From 6ccc65ab237a9926e6e0f43e3bc1ef357ff16240 Mon Sep 17 00:00:00 2001 From: Hazel Atkinson Date: Sat, 5 Apr 2025 17:25:16 +0100 Subject: windows fix (untested) --- src/main.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 08f7b48..6a6d61f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -166,14 +166,14 @@ fn launch_stats_task(container: ContainerSummary, docker: Arc, meter_pro let shared_labels = &shared_labels[..]; //println!("Starting reporting for container: {shared_labels:?}"); - + // create meters let meter_container_cpu_usage_seconds_total = meter_provider.meter("test_meter").f64_counter("container_cpu_usage_seconds_total").with_unit("s").with_description("Cumulative cpu time consumed").build(); while let Some(val) = stats_stream.next().await { if let Ok(stats) = val { meter_container_cpu_usage_seconds_total.add( - Duration::from_nanos(stats.cpu_stats.cpu_usage.total_usage - stats.precpu_stats.cpu_usage.total_usage).as_secs_f64(), + cpu_delta_from_docker(stats.cpu_stats.cpu_usage.total_usage, stats.precpu_stats.cpu_usage.total_usage).as_secs_f64(), shared_labels); } else { @@ -184,3 +184,13 @@ fn launch_stats_task(container: ContainerSummary, docker: Arc, meter_pro } }) } + +fn cpu_delta_from_docker(cpu_usage: u64, precpu_usage: u64) -> Duration { + let delta = cpu_usage - precpu_usage; + + // https://docs.docker.com/reference/api/engine/version/v1.48/#tag/Container/operation/ContainerStats + // see response schema > cpu_stats > cpu_usage > total_usage + let delta_ns = if cfg!(windows) { delta * 100 } else { delta }; + + Duration::from_nanos(delta_ns) +} \ No newline at end of file -- cgit