use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct State {
pub timestamp: i64,
pub node_info: NodeInfo,
pub system_state: SystemState,
pub counter: Counter,
pub moment_counter: MomentCounter,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NodeInfo {
pub node_id: String,
pub ip: String,
pub port: u16,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SystemState {
pub os: String,
pub arch: String,
pub host_name: String,
pub uptime: u64,
pub cpu_usage: f32,
pub mem_state: MemState,
pub disk_state: DiskState,
pub net_state: NetState,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MemState {
pub total: u64,
pub free: u64,
pub used: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiskState {
pub total: u64,
pub free: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NetState {
pub rx: u64,
pub tx: u64,
pub tcp_conn_count: usize,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct Counter {
pub request_count: usize,
pub request_invalid_count: usize,
pub response_2xx_count: usize,
pub response_3xx_count: usize,
pub response_4xx_count: usize,
pub response_5xx_count: usize,
pub response_time_since_last: usize,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MomentCounter {
pub http_connect_count: isize,
pub sse_connect_count: isize,
pub websocket_connect_count: isize,
}
impl State {
pub fn reset_counter(&mut self) {
self.counter.request_count = 0;
self.counter.response_time_since_last = 0;
self.counter.request_invalid_count = 0;
self.counter.response_2xx_count = 0;
self.counter.response_3xx_count = 0;
self.counter.response_4xx_count = 0;
self.counter.response_5xx_count = 0;
}
}