Skip to content

Commit c7179e7

Browse files
committed
feat: add cpu_usage_pct metric (#28)
1 parent 9b7153b commit c7179e7

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

readme.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ This will collect 10 samples with an update interval of 500 milliseconds.
114114
},
115115
"ecpu_usage": [1181, 0.082656614], // (Frequency MHz, Usage %)
116116
"pcpu_usage": [1974, 0.015181795], // (Frequency MHz, Usage %)
117+
"cpu_usage_pct": 0.036854, // Combined CPU usage (weighted by core count, 0–1)
117118
"gpu_usage": [461, 0.021497859], // (Frequency MHz, Usage %)
118119
"cpu_power": 0.20486385, // Watts
119120
"gpu_power": 0.017451683, // Watts
@@ -185,6 +186,10 @@ macmon_cpu_temp_celsius{chip="Apple M3 Pro"} 47.3
185186
# TYPE macmon_cpu_power_watts gauge
186187
macmon_cpu_power_watts{chip="Apple M3 Pro"} 8.42
187188
189+
# HELP macmon_cpu_usage_ratio Combined CPU utilization (0–1), weighted by core count
190+
# TYPE macmon_cpu_usage_ratio gauge
191+
macmon_cpu_usage_ratio{chip="Apple M3 Pro"} 0.037
192+
188193
# HELP macmon_ecpu_usage_ratio Efficiency CPU cluster utilization (0–1)
189194
# TYPE macmon_ecpu_usage_ratio gauge
190195
macmon_ecpu_usage_ratio{chip="Apple M3 Pro"} 0.083

src/metrics.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub struct Metrics {
3333
pub memory: MemMetrics,
3434
pub ecpu_usage: (u32, f32), // freq, percent_from_max
3535
pub pcpu_usage: (u32, f32), // freq, percent_from_max
36+
pub cpu_usage_pct: f32, // combined ecpu+pcpu usage, weighted by core count
3637
pub gpu_usage: (u32, f32), // freq, percent_from_max
3738
pub cpu_power: f32, // Watts
3839
pub gpu_power: f32, // Watts
@@ -279,11 +280,16 @@ impl Sampler {
279280
results.push(rs);
280281
}
281282

283+
let ecores = self.soc.ecpu_cores as f32;
284+
let pcores = self.soc.pcpu_cores as f32;
285+
let tcores = ecores + pcores;
286+
282287
let mut rs = Metrics::default();
283288
rs.ecpu_usage.0 = zero_div(results.iter().map(|x| x.ecpu_usage.0).sum(), measures as _);
284289
rs.ecpu_usage.1 = zero_div(results.iter().map(|x| x.ecpu_usage.1).sum(), measures as _);
285290
rs.pcpu_usage.0 = zero_div(results.iter().map(|x| x.pcpu_usage.0).sum(), measures as _);
286291
rs.pcpu_usage.1 = zero_div(results.iter().map(|x| x.pcpu_usage.1).sum(), measures as _);
292+
rs.cpu_usage_pct = zero_div(rs.ecpu_usage.1 * ecores + rs.pcpu_usage.1 * pcores, tcores);
287293
rs.gpu_usage.0 = zero_div(results.iter().map(|x| x.gpu_usage.0).sum(), measures as _);
288294
rs.gpu_usage.1 = zero_div(results.iter().map(|x| x.gpu_usage.1).sum(), measures as _);
289295
rs.cpu_power = zero_div(results.iter().map(|x| x.cpu_power).sum(), measures as _);

src/serve.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ fn to_prometheus(m: &Metrics, soc: &SocInfo) -> String {
2828
gauge!(out, "macmon_memory_ram_used_bytes", "Used RAM in bytes", m.memory.ram_usage);
2929
gauge!(out, "macmon_memory_swap_total_bytes", "Total swap in bytes", m.memory.swap_total);
3030
gauge!(out, "macmon_memory_swap_used_bytes", "Used swap in bytes", m.memory.swap_usage);
31+
gauge!(out, "macmon_cpu_usage_ratio", "Combined CPU utilization (0–1), weighted by core count", m.cpu_usage_pct);
3132
gauge!(out, "macmon_ecpu_freq_mhz", "Efficiency CPU cluster frequency in MHz", m.ecpu_usage.0);
3233
gauge!(out, "macmon_ecpu_usage_ratio", "Efficiency CPU cluster utilization (0–1)", m.ecpu_usage.1);
3334
gauge!(out, "macmon_pcpu_freq_mhz", "Performance CPU cluster frequency in MHz", m.pcpu_usage.0);

0 commit comments

Comments
 (0)