diff --git a/Modules/CPU/main.swift b/Modules/CPU/main.swift index 2180f187..3df16b76 100644 --- a/Modules/CPU/main.swift +++ b/Modules/CPU/main.swift @@ -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 ]) } diff --git a/Modules/CPU/popup.swift b/Modules/CPU/popup.swift index 0a65018f..89ca6194 100644 --- a/Modules/CPU/popup.swift +++ b/Modules/CPU/popup.swift @@ -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 }) diff --git a/Modules/CPU/readers.swift b/Modules/CPU/readers.swift index 69cddb0a..e822fbca 100644 --- a/Modules/CPU/readers.swift +++ b/Modules/CPU/readers.swift @@ -533,11 +533,13 @@ public class LimitReader: Reader { } } -public class AverageReader: Reader<[Double]> { +public class AverageLoadReader: Reader { 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) } }