resymo_agent/
config.rs

1//! The configuration model
2//!
3//! ## Schema
4//!
5//! Whenever you make changes to the configuration model, run:
6//!
7//! ```bash
8//! run --package resymo-agent --example gen_schema
9//! ```
10
11use crate::{collector, command};
12use crate::{uplink, utils::is_default};
13
14/// Agent configuration
15#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
16pub struct Config {
17    #[serde(default)]
18    pub uplinks: Uplinks,
19
20    #[serde(default)]
21    pub collectors: Collectors,
22
23    #[serde(default)]
24    pub commands: Commands,
25}
26
27/// Uplink configuration
28#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
29#[serde(rename_all = "camelCase")]
30pub struct Uplinks {
31    #[serde(default, skip_serializing_if = "Option::is_none")]
32    pub http_server: Option<uplink::http_server::Options>,
33
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub homeassistant: Option<uplink::homeassistant::Options>,
36}
37
38/// Common collector settings
39#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
40#[serde(rename_all = "camelCase")]
41pub struct CommonCollector {
42    #[serde(default, skip_serializing_if = "is_default")]
43    pub disabled: bool,
44}
45
46/// Collector configurations
47#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
48#[serde(rename_all = "camelCase")]
49pub struct Collectors {
50    /// Load average
51    #[serde(default)]
52    pub load_avg: CommonCollector,
53
54    /// Swap
55    #[serde(default)]
56    pub swap: CommonCollector,
57
58    /// Memory
59    #[serde(default)]
60    pub memory: CommonCollector,
61
62    /// Disk
63    #[serde(default)]
64    pub disk_free: CommonCollector,
65
66    /// Exec
67    #[serde(default)]
68    pub exec: collector::exec::Configuration,
69}
70
71/// Common collector settings
72#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
73#[serde(rename_all = "camelCase")]
74pub struct CommonCommand {
75    #[serde(default, skip_serializing_if = "is_default")]
76    pub disabled: bool,
77}
78
79/// Collector configurations
80#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
81#[serde(rename_all = "camelCase")]
82pub struct Commands {
83    /// Exec
84    #[serde(default)]
85    pub exec: command::exec::Configuration,
86}