use std::collections::HashMap;
use decimal_percentage::Percentage;
use nix::unistd::Pid;
use serde::{Serialize, Serializer};
use crate::Leadership;
use crate::o11y::{Cpu, Disk, LoadAvg, MemStats, NetIO, SwapStats};
#[derive(Clone, Debug)]
pub struct ProcessId(pub Pid);
impl Serialize for ProcessId {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_i32(self.0.as_raw())
}
}
#[derive(Clone, Debug, Serialize)]
pub enum SystemResourceStat {
CPU(Cpu),
Disk(HashMap<String, Disk>),
Load(LoadAvg),
Memory(MemStats),
NetworkIO(HashMap<String, NetIO>),
Swap(SwapStats),
}
#[derive(Clone, Debug, Serialize)]
pub enum Event<T> {
UnixSignal(i32),
SystemResource(SystemResourceStat),
SystemResourceCPUThreshold(Percentage, Cpu),
SystemResourceLoadThreshold(Percentage, LoadAvg),
SystemResourceMemoryThreshold(Percentage, MemStats),
ConfigChange(notify::Event),
Suspended(Option<chrono::NaiveDateTime>),
Shutdown(Option<chrono::NaiveDateTime>),
LeadershipChange(Leadership, Leadership),
LogRotation,
App(T),
}
impl<T: std::fmt::Debug> ToString for Event<T> {
fn to_string(&self) -> String {
format!("{:?}", self)
}
}