icinga2_api/types/common/
checkable.rs1use serde::Deserialize;
6use serde::Serialize;
7
8use crate::serde::{
9 deserialize_empty_string_or_parse, deserialize_empty_string_or_string,
10 deserialize_icinga_timestamp, deserialize_optional_icinga_timestamp,
11 deserialize_optional_seconds_as_duration, serialize_icinga_timestamp,
12 serialize_none_as_empty_string, serialize_none_as_empty_string_or_to_string,
13 serialize_optional_duration_as_seconds, serialize_optional_icinga_timestamp,
14};
15use crate::types::enums::acknowledgement_type::IcingaAcknowledgementType;
16use crate::types::enums::host_or_service_state::IcingaHostOrServiceState;
17use crate::types::enums::state_type::IcingaStateType;
18use crate::types::names::IcingaCheckCommandName;
19use crate::types::names::IcingaEndpointName;
20use crate::types::names::IcingaEventCommandName;
21use crate::types::names::IcingaTimePeriodName;
22
23use super::check_result::IcingaCheckResult;
24use super::custom_var_object::CustomVarHolder;
25use super::custom_var_object::IcingaCustomVarObject;
26
27#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
29pub struct IcingaCheckable {
30 #[serde(flatten)]
32 pub custom_var: IcingaCustomVarObject,
33 pub acknowledgement: IcingaAcknowledgementType,
35 #[serde(
37 serialize_with = "serialize_optional_icinga_timestamp",
38 deserialize_with = "deserialize_optional_icinga_timestamp"
39 )]
40 pub acknowledgement_expiry: Option<time::OffsetDateTime>,
41 #[serde(
43 serialize_with = "serialize_optional_icinga_timestamp",
44 deserialize_with = "deserialize_optional_icinga_timestamp"
45 )]
46 pub acknowledgement_last_change: Option<time::OffsetDateTime>,
47 #[serde(
49 serialize_with = "serialize_none_as_empty_string",
50 deserialize_with = "deserialize_empty_string_or_string"
51 )]
52 pub action_url: Option<String>,
53 pub check_attempt: u64,
55 pub check_command: IcingaCheckCommandName,
57 #[serde(default)]
59 #[serde(
60 serialize_with = "serialize_optional_duration_as_seconds",
61 deserialize_with = "deserialize_optional_seconds_as_duration"
62 )]
63 pub check_interval: Option<time::Duration>,
64 #[serde(
66 serialize_with = "serialize_none_as_empty_string_or_to_string",
67 deserialize_with = "deserialize_empty_string_or_parse"
68 )]
69 pub check_period: Option<IcingaTimePeriodName>,
70 #[serde(default)]
72 #[serde(
73 serialize_with = "serialize_optional_duration_as_seconds",
74 deserialize_with = "deserialize_optional_seconds_as_duration"
75 )]
76 pub check_timeout: Option<time::Duration>,
77 #[serde(
79 serialize_with = "serialize_none_as_empty_string_or_to_string",
80 deserialize_with = "deserialize_empty_string_or_parse"
81 )]
82 pub command_endpoint: Option<IcingaEndpointName>,
83 pub downtime_depth: u64,
85 pub enable_active_checks: bool,
87 pub enable_event_handler: bool,
89 pub enable_flapping: bool,
91 pub enable_notifications: bool,
93 pub enable_passive_checks: bool,
95 pub enable_perfdata: bool,
97 #[serde(
99 serialize_with = "serialize_none_as_empty_string_or_to_string",
100 deserialize_with = "deserialize_empty_string_or_parse"
101 )]
102 pub event_command: Option<IcingaEventCommandName>,
103 pub executions: Option<()>,
105 pub flapping: bool,
107 pub flapping_current: f64,
109 #[serde(default)]
111 pub flapping_ignore_states: Option<Vec<IcingaHostOrServiceState>>,
112 #[serde(
114 serialize_with = "serialize_optional_icinga_timestamp",
115 deserialize_with = "deserialize_optional_icinga_timestamp"
116 )]
117 pub flapping_last_change: Option<time::OffsetDateTime>,
118 pub flapping_threshold: f64,
120 pub flapping_threshold_low: f64,
122 pub flapping_threshold_high: f64,
124 pub force_next_check: bool,
126 pub force_next_notification: bool,
128 pub handled: bool,
130 #[serde(
132 serialize_with = "serialize_none_as_empty_string",
133 deserialize_with = "deserialize_empty_string_or_string"
134 )]
135 pub icon_image: Option<String>,
136 #[serde(
138 serialize_with = "serialize_none_as_empty_string",
139 deserialize_with = "deserialize_empty_string_or_string"
140 )]
141 pub icon_image_alt: Option<String>,
142 #[serde(
144 serialize_with = "serialize_icinga_timestamp",
145 deserialize_with = "deserialize_icinga_timestamp"
146 )]
147 pub last_check: time::OffsetDateTime,
148 pub last_check_result: IcingaCheckResult,
150 #[serde(
152 serialize_with = "serialize_icinga_timestamp",
153 deserialize_with = "deserialize_icinga_timestamp"
154 )]
155 pub last_hard_state_change: time::OffsetDateTime,
156 pub last_reachable: bool,
158 #[serde(
160 serialize_with = "serialize_optional_icinga_timestamp",
161 deserialize_with = "deserialize_optional_icinga_timestamp"
162 )]
163 pub last_state_change: Option<time::OffsetDateTime>,
164 pub last_state_type: IcingaStateType,
166 #[serde(
168 serialize_with = "serialize_optional_icinga_timestamp",
169 deserialize_with = "deserialize_optional_icinga_timestamp"
170 )]
171 pub last_state_unreachable: Option<time::OffsetDateTime>,
172 pub max_check_attempts: u64,
174 #[serde(
176 serialize_with = "serialize_optional_icinga_timestamp",
177 deserialize_with = "deserialize_optional_icinga_timestamp"
178 )]
179 pub next_check: Option<time::OffsetDateTime>,
180 #[serde(
182 serialize_with = "serialize_optional_icinga_timestamp",
183 deserialize_with = "deserialize_optional_icinga_timestamp"
184 )]
185 pub next_update: Option<time::OffsetDateTime>,
186 #[serde(
188 serialize_with = "serialize_none_as_empty_string",
189 deserialize_with = "deserialize_empty_string_or_string"
190 )]
191 pub notes: Option<String>,
192 #[serde(
194 serialize_with = "serialize_none_as_empty_string",
195 deserialize_with = "deserialize_empty_string_or_string"
196 )]
197 pub notes_url: Option<String>,
198 #[serde(
200 serialize_with = "serialize_optional_icinga_timestamp",
201 deserialize_with = "deserialize_optional_icinga_timestamp"
202 )]
203 pub previous_state_change: Option<time::OffsetDateTime>,
204 pub problem: bool,
206 #[serde(default)]
208 #[serde(
209 serialize_with = "serialize_optional_duration_as_seconds",
210 deserialize_with = "deserialize_optional_seconds_as_duration"
211 )]
212 pub retry_interval: Option<time::Duration>,
213 pub severity: u64,
215 pub state_type: IcingaStateType,
217 pub volatile: bool,
219}
220
221impl CustomVarHolder for IcingaCheckable {
222 fn custom_var_value(&self, name: &str) -> Option<&serde_json::Value> {
223 self.custom_var.custom_var_value(name)
224 }
225}