diff options
| -rw-r--r-- | src/stats_task.rs | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/src/stats_task.rs b/src/stats_task.rs index 464793a..4240a63 100644 --- a/src/stats_task.rs +++ b/src/stats_task.rs @@ -1,4 +1,5 @@ -use bollard::container::StatsOptions; +use std::mem::MaybeUninit; +use bollard::container::{BlkioStats, BlkioStatsEntry, StatsOptions}; use bollard::models::ContainerSummary; use bollard::Docker; use opentelemetry::metrics::MeterProvider; @@ -37,11 +38,14 @@ pub fn launch_stats_task( }), ); - // drop the first read + // use the first read only for stats diffing for blkio - don't need for cpu thanks to precpu. + #[allow(unused_assignments)] + let mut first_read = MaybeUninit::uninit(); + loop { match stats_stream.next().await { None => return, - Some(Ok(_)) => break, + Some(Ok(st)) => { first_read = MaybeUninit::new(st); break }, Some(Err(err)) => { // TODO: use json logging or syslog so loki can understand this lol println!("Failed to get stats for container {container_id}!: {err:?}"); @@ -49,6 +53,10 @@ pub fn launch_stats_task( } } + // I'm going to rust jail! + let first_read = unsafe { first_read.assume_init() }; + let mut last_io_stats = first_read.blkio_stats.io_service_bytes_recursive; + // container labels shared for all metrics let mut shared_labels = vec