rivet_logger/processors/
load_average.rs1#[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}