summaryrefslogtreecommitdiffstats
path: root/src/data_collection/cpu/sysinfo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/data_collection/cpu/sysinfo.rs')
-rw-r--r--src/data_collection/cpu/sysinfo.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/data_collection/cpu/sysinfo.rs b/src/data_collection/cpu/sysinfo.rs
new file mode 100644
index 00000000..9970eadf
--- /dev/null
+++ b/src/data_collection/cpu/sysinfo.rs
@@ -0,0 +1,39 @@
+//! CPU stats through sysinfo.
+//! Supports FreeBSD.
+
+use std::collections::VecDeque;
+
+use sysinfo::{CpuExt, LoadAvg, System, SystemExt};
+
+use super::{CpuData, CpuDataType, CpuHarvest};
+use crate::data_collection::cpu::LoadAvgHarvest;
+
+pub fn get_cpu_data_list(sys: &System, show_average_cpu: bool) -> crate::error::Result<CpuHarvest> {
+ let mut cpu_deque: VecDeque<_> = sys
+ .cpus()
+ .iter()
+ .enumerate()
+ .map(|(i, cpu)| CpuData {
+ data_type: CpuDataType::Cpu(i),
+ cpu_usage: cpu.cpu_usage() as f64,
+ })
+ .collect();
+
+ if show_average_cpu {
+ let cpu = sys.global_cpu_info();
+
+ cpu_deque.push_front(CpuData {
+ data_type: CpuDataType::Avg,
+ cpu_usage: cpu.cpu_usage() as f64,
+ })
+ }
+
+ Ok(Vec::from(cpu_deque))
+}
+
+pub fn get_load_avg() -> crate::error::Result<LoadAvgHarvest> {
+ let sys = System::new();
+ let LoadAvg { one, five, fifteen } = sys.load_average();
+
+ Ok([one as f32, five as f32, fifteen as f32])
+}