From cf9ea674528da0f39dab6795f2b8a3c36a4d02fd Mon Sep 17 00:00:00 2001 From: Ondrej Novak Date: Wed, 10 Jun 2026 23:35:13 +0200 Subject: [PATCH] add timeseries container --- waybar-collectd/src/container.rs | 20 ++++++++++++++++++++ waybar-collectd/src/main.rs | 19 +++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 waybar-collectd/src/container.rs diff --git a/waybar-collectd/src/container.rs b/waybar-collectd/src/container.rs new file mode 100644 index 0000000..2989540 --- /dev/null +++ b/waybar-collectd/src/container.rs @@ -0,0 +1,20 @@ +pub struct Container { + max_samples: u32, + pub data: Vec>, // TODO: make this private, pass iterator instead +} + +impl Container { + pub fn new(max_samples: u32) -> Container { + Container { + max_samples: max_samples, + data: vec![], + } + } + + pub fn push(&mut self, data: Vec) { + if self.data.len() as u32 > self.max_samples { + self.data.pop(); + } + self.data.push(data) + } +} diff --git a/waybar-collectd/src/main.rs b/waybar-collectd/src/main.rs index bc7ee81..f483f84 100644 --- a/waybar-collectd/src/main.rs +++ b/waybar-collectd/src/main.rs @@ -1,9 +1,11 @@ +mod container; mod observables; +use container::Container; use draw::{StackedConfig, StackedSeries, StackedSeriesConfig, stacked}; -use imageproc::window::display_image; use observables::CpuObservable; use protocol::Protocol; +use std::{thread, time}; fn main() { let cfg = StackedConfig { @@ -18,21 +20,22 @@ fn main() { }; if let Ok(mut proto) = Protocol::new("/var/run/collectd-unixsock") { - let mut data: Vec> = vec![]; // loop { let cpu = CpuObservable::discover(&mut proto).unwrap(); + let mut container = Container::new(cfg.max_samples); for _ in 1..10 { - if data.len() > 10 { - data.pop(); - } let sample = cpu.sample(&mut proto).unwrap(); - data.push(sample); + container.push(sample); let img = stacked(StackedSeries { config: &cfg, - data: &data, + data: &container.data, }); - display_image("bzn", &img, 500, 500); + img.save("bzn.png").unwrap(); + + thread::sleep(time::Duration::from_secs(1)); + + // display_image("bzn", &img, 500, 500); } } else { panic!("sock not found!");