diff options
| author | Hazel Atkinson <yellowsink@riseup.net> | 2025-04-05 17:25:16 +0100 |
|---|---|---|
| committer | Hazel Atkinson <yellowsink@riseup.net> | 2025-04-05 17:25:16 +0100 |
| commit | 6ccc65ab237a9926e6e0f43e3bc1ef357ff16240 (patch) | |
| tree | b2f183699e7cc468f170b2c5baf100d82c297948 | |
| parent | c37d2faa726b3d065995fa874d027ed5850bcbc0 (diff) | |
| download | containerspy-6ccc65ab237a9926e6e0f43e3bc1ef357ff16240.tar.gz containerspy-6ccc65ab237a9926e6e0f43e3bc1ef357ff16240.tar.bz2 containerspy-6ccc65ab237a9926e6e0f43e3bc1ef357ff16240.zip | |
windows fix (untested)
| -rw-r--r-- | src/main.rs | 14 |
1 files 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<Docker>, 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<Docker>, 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 |
