feat: added CPU average load to the Remote protocol and moved from the list of Double to the struct

This commit is contained in:
Serhiy Mytrovtsiy
2025-09-27 19:28:42 +02:00
parent 25201834da
commit 5bf6f67ff0
3 changed files with 30 additions and 14 deletions

View File

@@ -47,6 +47,17 @@ public struct CPU_Limit: Codable {
var speed: Int = 0
}
public struct CPU_AverageLoad: Codable, RemoteType {
var load1: Double = 0
var load5: Double = 0
var load15: Double = 0
public func remote() -> Data? {
let string = "1,1,\(self.load1),\(self.load5),\(self.load15)$"
return string.data(using: .utf8)
}
}
public class CPU: Module {
private let popupView: Popup
private let settingsView: Settings
@@ -58,7 +69,7 @@ public class CPU: Module {
private var temperatureReader: TemperatureReader? = nil
private var frequencyReader: FrequencyReader? = nil
private var limitReader: LimitReader? = nil
private var averageReader: AverageReader? = nil
private var averageLoadReader: AverageLoadReader? = nil
private var usagePerCoreState: Bool {
Store.shared.bool(key: "\(self.config.name)_usagePerCore", defaultValue: false)
@@ -124,7 +135,7 @@ public class CPU: Module {
self.processReader = ProcessReader(.CPU) { [weak self] value in
self?.popupView.processCallback(value)
}
self.averageReader = AverageReader(.CPU, popup: true) { [weak self] value in
self.averageLoadReader = AverageLoadReader(.CPU, popup: true) { [weak self] value in
self?.popupView.averageCallback(value)
}
self.temperatureReader = TemperatureReader(.CPU, popup: true) { [weak self] value in
@@ -163,7 +174,7 @@ public class CPU: Module {
self.temperatureReader,
self.frequencyReader,
self.limitReader,
self.averageReader
self.averageLoadReader
])
}

View File

@@ -500,17 +500,17 @@ internal class Popup: PopupWrapper {
})
}
public func averageCallback(_ value: [Double]?) {
guard let value, value.count == 3 else { return }
public func averageCallback(_ value: CPU_AverageLoad?) {
guard let value else { return }
DispatchQueue.main.async(execute: {
if !(self.window?.isVisible ?? false) && self.initializedAverage {
return
}
self.average1Field?.stringValue = "\(value[0])"
self.average5Field?.stringValue = "\(value[1])"
self.average15Field?.stringValue = "\(value[2])"
self.average1Field?.stringValue = "\(value.load1)"
self.average5Field?.stringValue = "\(value.load5)"
self.average15Field?.stringValue = "\(value.load15)"
self.initializedAverage = true
})

View File

@@ -533,11 +533,13 @@ public class LimitReader: Reader<CPU_Limit> {
}
}
public class AverageReader: Reader<[Double]> {
public class AverageLoadReader: Reader<CPU_AverageLoad> {
private let title: String = "CPU"
private var load: CPU_AverageLoad = CPU_AverageLoad()
public override func setup() {
self.setInterval(60)
self.popup = false
self.setInterval(15)
}
public override func read() {
@@ -565,16 +567,19 @@ public class AverageReader: Reader<[Double]> {
let str = line.trimmingCharacters(in: .whitespaces)
let strFind = str.findAndCrop(pattern: "(\\d+(.|,)\\d+ *){3}$")
let strArr = strFind.cropped.split(separator: " ")
guard strArr.count == 3 else {
return
}
guard strArr.count == 3 else { return }
var list: [Double] = []
strArr.forEach { (n: Substring) in
let value = Double(n.replacingOccurrences(of: ",", with: ".")) ?? 0
list.append(value)
}
guard list.count == 3 else { return }
self.callback(list)
self.load.load1 = list[0]
self.load.load5 = list[1]
self.load.load15 = list[2]
self.callback(self.load)
}
}