1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4pub struct State {
5 pub timestamp: i64,
7 pub node_info: NodeInfo,
9 pub pid: u32,
10 pub system_state: SystemState,
12 pub counter: Counter,
14 pub moment_counter: MomentCounter,
16 pub custom: Option<serde_json::Value>,
18}
19
20#[derive(Debug, Clone, Default, Serialize, Deserialize)]
21pub struct NodeInfo {
22 pub node_id: String,
23 pub ip: String,
24 pub port: u16,
25}
26#[derive(Debug, Clone, Default, Serialize, Deserialize)]
27pub struct SystemState {
28 pub os: String,
30 pub arch: String,
32 pub host_name: String,
34 pub uptime: u64,
36 pub cpu: Option<CpuState>,
38 pub mem_state: MemState,
40 pub disk_state: DiskState,
42 pub net_state: NetState,
44 pub gpu_state: Option<GpuState>,
46}
47
48#[derive(Debug, Clone, Default, Serialize, Deserialize)]
49pub struct CpuState {
50 pub name: String,
51 pub usage: f32,
52}
53
54#[derive(Debug, Clone, Default, Serialize, Deserialize)]
56pub struct MemState {
57 pub total: u64,
59 pub free: u64,
61 pub used: u64,
63}
64
65#[derive(Debug, Clone, Default, Serialize, Deserialize)]
67pub struct DiskState {
68 pub total: u64,
70 pub free: u64,
72}
73
74#[derive(Debug, Clone, Default, Serialize, Deserialize)]
76pub struct NetState {
77 pub rx: u64,
79 pub tx: u64,
81 pub tcp_conn_count: usize,
83}
84
85#[derive(Debug, Clone, Default, Serialize, Deserialize)]
87pub struct GpuState {
88 pub provider: GpuProvider,
90 pub gpus: Vec<GpuInfo>,
92 pub custom: Option<serde_json::Value>,
94}
95
96#[derive(Debug, Clone, Default, Serialize, Deserialize)]
97pub enum GpuProvider {
98 Nvidia,
99 Apple,
100 Custom(String),
101 #[default]
102 Unknown,
103}
104
105#[derive(Debug, Clone, Default, Serialize, Deserialize)]
107pub struct GpuInfo {
108 pub name: String,
110 pub usage: f32,
112 pub memory_total: u64,
114 pub memory_used: u64,
116 pub memory_free: u64,
118 pub temperature: u32,
120 pub power_usage: u32,
122}
123
124#[derive(Debug, Default, Clone, Serialize, Deserialize)]
129pub struct Counter {
130 pub request_count: usize,
134 pub request_invalid_count: usize,
139 pub response_2xx_count: usize,
141 pub response_3xx_count: usize,
143 pub response_4xx_count: usize,
149 pub response_5xx_count: usize,
152 pub response_time_since_last: usize,
158}
159
160#[derive(Debug, Clone, Default, Serialize, Deserialize)]
162pub struct MomentCounter {
163 pub http_connect_count: isize,
171 pub sse_connect_count: isize,
173 pub websocket_connect_count: isize,
175}
176
177impl State {
178 pub fn reset_counter(&mut self) {
179 self.counter.request_count = 0;
180 self.counter.response_time_since_last = 0;
181 self.counter.request_invalid_count = 0;
182 self.counter.response_2xx_count = 0;
183 self.counter.response_3xx_count = 0;
184 self.counter.response_4xx_count = 0;
185 self.counter.response_5xx_count = 0;
186 }
187}