diff options
Diffstat (limited to 'src/stats_task.rs')
| -rw-r--r-- | src/stats_task.rs | 84 |
1 files changed, 46 insertions, 38 deletions
diff --git a/src/stats_task.rs b/src/stats_task.rs index 6b8eb21..34fa6fb 100644 --- a/src/stats_task.rs +++ b/src/stats_task.rs @@ -1,13 +1,11 @@ -use std::borrow::Cow; -use std::collections::HashMap; -use bollard::container::{BlkioStatsEntry, MemoryStatsStats, MemoryStatsStatsV1, Stats, StatsOptions}; +use bollard::container::{BlkioStatsEntry, MemoryStatsStats, Stats, StatsOptions}; use bollard::models::ContainerSummary; use bollard::Docker; use opentelemetry::metrics::MeterProvider; use opentelemetry::KeyValue; use opentelemetry_sdk::metrics::SdkMeterProvider; use std::mem::MaybeUninit; -use std::sync::{Arc, LazyLock, RwLock}; +use std::sync::Arc; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use tokio::task::JoinHandle; use tokio_stream::StreamExt; @@ -51,17 +49,22 @@ pub fn launch_stats_task( 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:?}"); - }, + } } } // I'm going to rust jail! let first_read = unsafe { first_read.assume_init() }; - let Stats { blkio_stats, networks: mut last_net_stats, memory_stats: mut last_mem_stats, .. } = first_read; + let Stats { + blkio_stats, + networks: mut last_net_stats, + memory_stats: mut last_mem_stats, + .. + } = first_read; let mut last_io_stats = blkio_stats.io_service_bytes_recursive; @@ -189,7 +192,9 @@ pub fn launch_stats_task( let meter_container_memory_usage_bytes = meter .u64_gauge("container_memory_usage_bytes") .with_unit("By") - .with_description("Current memory usage, including all memory regardless of when it was accessed") + .with_description( + "Current memory usage, including all memory regardless of when it was accessed", + ) .build(); let meter_container_memory_working_set_bytes = meter .u64_gauge("container_memory_working_set_bytes") @@ -233,7 +238,7 @@ pub fn launch_stats_task( let meter_container_network_transmit_packets_total = meter .u64_counter("container_network_transmit_packets_total") .with_description("Cumulative count of packets transmitted") - .build();; + .build(); let meter_container_start_time_seconds = meter .u64_gauge("container_start_time_seconds") @@ -352,18 +357,29 @@ pub fn launch_stats_task( // todo // i have no way to test cgroups v2 so only work on v1 - see readme for more info } else if let Some(MemoryStatsStats::V2(v2stats)) = stats.memory_stats.stats { - // container_memory_cache meter_container_memory_cache.record(v2stats.file, shared_labels); // container_memory_failures_total // need last if let Some(MemoryStatsStats::V2(last_v2)) = last_mem_stats.stats { - meter_container_memory_failures_total.add(v2stats.pgfault - last_v2.pgfault, labels_mem_container_min_c); - meter_container_memory_failures_total.add(v2stats.pgfault - last_v2.pgfault, labels_mem_container_min_h); - - meter_container_memory_failures_total.add(v2stats.pgmajfault - last_v2.pgmajfault, labels_mem_container_maj_c); - meter_container_memory_failures_total.add(v2stats.pgmajfault - last_v2.pgmajfault, labels_mem_container_maj_h); + meter_container_memory_failures_total.add( + v2stats.pgfault - last_v2.pgfault, + labels_mem_container_min_c, + ); + meter_container_memory_failures_total.add( + v2stats.pgfault - last_v2.pgfault, + labels_mem_container_min_h, + ); + + meter_container_memory_failures_total.add( + v2stats.pgmajfault - last_v2.pgmajfault, + labels_mem_container_maj_c, + ); + meter_container_memory_failures_total.add( + v2stats.pgmajfault - last_v2.pgmajfault, + labels_mem_container_maj_h, + ); } // container_memory_kernel_usage @@ -385,7 +401,8 @@ pub fn launch_stats_task( meter_container_memory_usage_bytes.record(all_usage, shared_labels); // container_memory_working_set_bytes - meter_container_memory_working_set_bytes.record(all_usage - v2stats.inactive_file, shared_labels); + meter_container_memory_working_set_bytes + .record(all_usage - v2stats.inactive_file, shared_labels); } } @@ -404,39 +421,31 @@ pub fn launch_stats_task( net_labels.push(KeyValue::new("interface", interface.clone())); let net_labels = &net_labels.into_boxed_slice()[..]; - meter_container_network_receive_bytes_total.add( - this_inter.rx_bytes - last_this_inter.rx_bytes, - net_labels - ); - meter_container_network_transmit_bytes_total.add( - this_inter.tx_bytes - last_this_inter.tx_bytes, - net_labels - ); + meter_container_network_receive_bytes_total + .add(this_inter.rx_bytes - last_this_inter.rx_bytes, net_labels); + meter_container_network_transmit_bytes_total + .add(this_inter.tx_bytes - last_this_inter.tx_bytes, net_labels); #[cfg(not(windows))] - meter_container_network_receive_errors_total.add( - this_inter.rx_errors - last_this_inter.rx_errors, - net_labels - ); + meter_container_network_receive_errors_total + .add(this_inter.rx_errors - last_this_inter.rx_errors, net_labels); #[cfg(not(windows))] - meter_container_network_transmit_errors_total.add( - this_inter.tx_errors - last_this_inter.tx_errors, - net_labels - ); + meter_container_network_transmit_errors_total + .add(this_inter.tx_errors - last_this_inter.tx_errors, net_labels); meter_container_network_receive_packets_dropped_total.add( this_inter.rx_dropped - last_this_inter.rx_dropped, - net_labels + net_labels, ); meter_container_network_transmit_packets_dropped_total.add( this_inter.tx_dropped - last_this_inter.tx_dropped, - net_labels + net_labels, ); meter_container_network_receive_packets_total.add( this_inter.rx_packets - last_this_inter.rx_packets, - net_labels + net_labels, ); meter_container_network_transmit_packets_total.add( this_inter.tx_packets - last_this_inter.tx_packets, - net_labels + net_labels, ); } } @@ -494,7 +503,6 @@ fn get_rw_totals<'a>(iter: impl IntoIterator<Item = &'a BlkioStatsEntry>) -> (u6 (read, write) } - // LMAO i built this entire string pool around the idea of needing &'static str but turns out i can just use owned strings // guuuh okay whatever that's fine i guess, i'll keep this around just in case i need it -- sink @@ -521,4 +529,4 @@ fn pool_kv(key: &str, val: &str) -> KeyValue { LABEL_POOL.write().unwrap().insert(cows, kv.clone()); kv } -}*/
\ No newline at end of file +}*/ |
