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,
11 pub system_state: SystemState,
13 pub counter: Counter,
15 pub moment_counter: MomentCounter,
17 pub custom: Option<serde_json::Value>,
19}
20
21#[derive(Debug, Clone, Default, Serialize, Deserialize)]
22pub struct NodeInfo {
23 pub node_id: String,
24 pub ip: String,
25 pub port: u16,
26}
27#[derive(Debug, Clone, Default, Serialize, Deserialize)]
28pub struct SystemState {
29 pub os: String,
31 pub arch: String,
33 pub host_name: String,
35 pub uptime: u64,
37 pub cpu: CpuState,
39 pub mem: MemState,
41 pub disk: DiskState,
43 pub net: NetState,
45 pub gpu: Option<GpuState>,
47}
48
49#[derive(Debug, Clone, Default, Serialize, Deserialize)]
50pub struct CpuState {
51 pub name: String,
52 pub usage: f32,
53}
54
55#[derive(Debug, Clone, Default, Serialize, Deserialize)]
57pub struct MemState {
58 pub total: u64,
60 pub free: u64,
62 pub used: u64,
64}
65
66#[derive(Debug, Clone, Default, Serialize, Deserialize)]
68pub struct DiskState {
69 pub total: u64,
71 pub free: u64,
73}
74
75#[derive(Debug, Clone, Default, Serialize, Deserialize)]
77pub struct NetState {
78 pub rx: u64,
80 pub tx: u64,
82 pub tcp_conn_count: usize,
84}
85
86#[derive(Debug, Clone, Default, Serialize, Deserialize)]
88pub struct GpuState {
89 pub provider: GpuProvider,
91 pub gpus: Vec<GpuInfo>,
93 pub custom: Option<serde_json::Value>,
95}
96
97#[derive(Debug, Clone, Default, Serialize, Deserialize)]
98pub enum GpuProvider {
99 Nvidia,
100 Apple,
101 Custom(String),
102 #[default]
103 Unknown,
104}
105
106#[derive(Debug, Clone, Default, Serialize, Deserialize)]
108pub struct GpuInfo {
109 pub name: String,
111 pub usage: f32,
113 pub memory_total: u64,
115 pub memory_used: u64,
117 pub memory_free: u64,
119 pub temperature: u32,
121 pub power_usage: u32,
123}
124
125#[derive(Debug, Default, Clone, Serialize, Deserialize)]
130pub struct Counter {
131 pub request_count: usize,
135 pub request_invalid_count: usize,
140 pub response_2xx_count: usize,
142 pub response_3xx_count: usize,
144 pub response_4xx_count: usize,
150 pub response_5xx_count: usize,
153 pub response_time_since_last: usize,
159}
160
161#[derive(Debug, Clone, Default, Serialize, Deserialize)]
163pub struct MomentCounter {
164 pub http_connect_count: isize,
172 pub sse_connect_count: isize,
174 pub websocket_connect_count: isize,
176}
177
178impl State {
179 pub fn reset_counter(&mut self) {
180 self.counter.request_count = 0;
181 self.counter.response_time_since_last = 0;
182 self.counter.request_invalid_count = 0;
183 self.counter.response_2xx_count = 0;
184 self.counter.response_3xx_count = 0;
185 self.counter.response_4xx_count = 0;
186 self.counter.response_5xx_count = 0;
187 }
188}