Skip to main content

rivet_logger/processors/
load_average.rs

1#[cfg(not(target_arch = "wasm32"))]
2use crate::logger::LogValue;
3use crate::logger::{BoxError, LogRecord, Processor};
4
5#[derive(Clone, Copy, Debug)]
6pub enum LoadAverageWindow {
7    OneMinute,
8    FiveMinute,
9    FifteenMinute,
10}
11
12pub struct LoadAverage {
13    window: LoadAverageWindow,
14}
15
16impl LoadAverage {
17    pub fn new(window: LoadAverageWindow) -> Self {
18        Self { window }
19    }
20}
21
22impl Default for LoadAverage {
23    fn default() -> Self {
24        Self::new(LoadAverageWindow::OneMinute)
25    }
26}
27
28impl Processor for LoadAverage {
29    #[cfg(target_arch = "wasm32")]
30    fn process(&self, record: LogRecord) -> Result<LogRecord, BoxError> {
31        let _ = self.window;
32        Ok(record)
33    }
34
35    #[cfg(not(target_arch = "wasm32"))]
36    fn process(&self, mut record: LogRecord) -> Result<LogRecord, BoxError> {
37        let load = sysinfo::System::load_average();
38        let value = match self.window {
39            LoadAverageWindow::OneMinute => load.one,
40            LoadAverageWindow::FiveMinute => load.five,
41            LoadAverageWindow::FifteenMinute => load.fifteen,
42        };
43
44        if value.is_finite() {
45            record
46                .extra
47                .insert("load_average".to_string(), LogValue::F64(value));
48        }
49
50        Ok(record)
51    }
52}