aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs14
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