Skip to main content

modkit_node_info/
model.rs

1/// Node represents a deployment unit where Hyperspot is running
2#[derive(Debug, Clone, PartialEq)]
3pub struct Node {
4    pub id: uuid::Uuid,
5    pub hostname: String,
6    pub ip_address: Option<String>,
7    pub created_at: chrono::DateTime<chrono::Utc>,
8    pub updated_at: chrono::DateTime<chrono::Utc>,
9}
10
11/// System information for a node
12#[derive(Debug, Clone, PartialEq)]
13pub struct NodeSysInfo {
14    pub node_id: uuid::Uuid,
15    pub os: OsInfo,
16    pub cpu: CpuInfo,
17    pub memory: MemoryInfo,
18    pub host: HostInfo,
19    pub gpus: Vec<GpuInfo>,
20    pub battery: Option<BatteryInfo>,
21    pub collected_at: chrono::DateTime<chrono::Utc>,
22}
23
24/// Operating system information
25#[derive(Debug, Clone, PartialEq, Eq)]
26pub struct OsInfo {
27    pub name: String,
28    pub version: String,
29    pub arch: String,
30}
31
32/// CPU information
33#[derive(Debug, Clone, PartialEq)]
34pub struct CpuInfo {
35    pub model: String,
36    pub num_cpus: u32,
37    pub cores: u32,
38    pub frequency_mhz: f64,
39}
40
41/// Memory information
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub struct MemoryInfo {
44    pub total_bytes: u64,
45    pub available_bytes: u64,
46    pub used_bytes: u64,
47    pub used_percent: u32,
48}
49
50/// Host information
51#[derive(Debug, Clone, PartialEq, Eq)]
52pub struct HostInfo {
53    pub hostname: String,
54    pub uptime_seconds: u64,
55    /// All detected IP addresses. The first one is the primary IP (used for default route).
56    pub ip_addresses: Vec<String>,
57}
58
59/// GPU information
60#[derive(Debug, Clone, PartialEq)]
61pub struct GpuInfo {
62    pub model: String,
63    pub cores: Option<u32>,
64    pub total_memory_mb: Option<f64>,
65    pub used_memory_mb: Option<f64>,
66}
67
68/// Battery information
69#[derive(Debug, Clone, PartialEq, Eq)]
70pub struct BatteryInfo {
71    pub on_battery: bool,
72    pub percentage: u32,
73}
74
75/// System capability information for a node
76#[derive(Debug, Clone, PartialEq)]
77pub struct NodeSysCap {
78    pub node_id: uuid::Uuid,
79    pub capabilities: Vec<SysCap>,
80    pub collected_at: chrono::DateTime<chrono::Utc>,
81}
82
83/// Individual system capability
84#[derive(Debug, Clone, PartialEq)]
85pub struct SysCap {
86    pub key: String,
87    pub category: String,
88    pub name: String,
89    pub display_name: String,
90    pub present: bool,
91    pub version: Option<String>,
92    pub amount: Option<f64>,
93    pub amount_dimension: Option<String>,
94    pub details: Option<String>,
95    /// Cache TTL in seconds - how long this capability data is valid
96    pub cache_ttl_secs: u64,
97    /// When this capability was last fetched (Unix timestamp in seconds)
98    pub fetched_at_secs: i64,
99}