mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
feat: added CPU average load to the Remote protocol and moved from the list of Double to the struct
This commit is contained in:
@@ -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
|
||||
])
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user