diff options
| author | Hazel Atkinson <yellowsink@riseup.net> | 2025-04-07 12:42:52 +0100 |
|---|---|---|
| committer | Hazel Atkinson <yellowsink@riseup.net> | 2025-04-07 12:42:52 +0100 |
| commit | 777376e4652c08e6dcd04f41faac44a36067e122 (patch) | |
| tree | e6a12aaa7c040b63da0c3f999df32d73282b2962 | |
| parent | a61ac43c3ae5baaede67449dde84ca86cbbc3873 (diff) | |
| download | containerspy-777376e4652c08e6dcd04f41faac44a36067e122.tar.gz containerspy-777376e4652c08e6dcd04f41faac44a36067e122.tar.bz2 containerspy-777376e4652c08e6dcd04f41faac44a36067e122.zip | |
fix fs stats
| -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