lighthouse_protocol/payload/metrics/
laser.rs

1use std::collections::HashMap;
2
3use serde::Deserialize;
4
5#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
6pub struct LaserMetrics {
7    pub rooms: Vec<RoomMetrics>,
8}
9
10#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
11pub struct RoomMetrics {
12    pub room: String,
13    #[serde(flatten)]
14    pub api: RoomApiMetrics,
15}
16
17// FIXME: Once https://github.com/serde-rs/serde/pull/2525 and
18// https://github.com/serde-rs/serde/issues/745 are merged/fixed, we can
19// hopefully do it like this:
20
21// #[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
22// #[serde(tag = "api_version")]
23// pub enum RoomApiMetrics {
24//     #[serde(rename = 1)]
25//     V1(RoomV1Metrics),
26//     #[serde(rename = 2)]
27//     V2(RoomV2Metrics),
28// }
29
30// The untagged struct does not serialize correctly (it omits the api_version),
31// therefore we intentionally leave the Serialize conformance out for now.
32
33#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
34#[serde(untagged)]
35pub enum RoomApiMetrics {
36    V1(RoomV1Metrics),
37    V2(RoomV2Metrics),
38}
39
40#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
41pub struct RoomV1Metrics {
42    pub controller_metrics: BoardV1Metrics,
43    pub lamp_metrics: HashMap<i32, BoardV1Metrics>,
44}
45
46#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
47pub struct BoardV1Metrics {
48    pub id: i32,
49    pub version: i32,
50    pub uptime: i32,
51    pub temperature: i32,
52    pub init_temperature: i32,
53    pub settings: String,
54    pub timeout: i32,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub frames: Option<i32>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub is_responding: Option<bool>,
59}
60
61#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
62pub struct RoomV2Metrics {
63    pub controller_metrics: ControllerV2Metrics,
64    pub lamp_metrics: Vec<LampV2Metrics>,
65}
66
67#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
68pub struct ControllerV2Metrics {
69    pub responding: bool,
70    pub ping_latency_ms: f64,
71    pub firmware_version: i32,
72    pub uptime: i32,
73    pub frames: i32,
74    pub fps: i32,
75    pub core_temperature: f64,
76    pub board_temperature: f64,
77    pub shunt_voltage: f64,
78    pub voltage: f64,
79    pub power: f64,
80    pub current: f64,
81}
82
83#[derive(Debug, /* Serialize,*/ Deserialize, PartialEq, Clone)]
84pub struct LampV2Metrics {
85    pub responding: bool,
86    pub firmware_version: i32,
87    pub uptime: i32,
88    pub timeout: i32,
89    pub temperature: i32,
90    pub fuse_tripped: bool,
91    pub flashing_status: String,
92}