Skip to main content

Mountain/IPC/Common/HealthStatus/
HealthIssue.rs

1#![allow(non_snake_case)]
2
3//! Tagged health issue. Each variant carries a free-form description
4//! string; `Severity` and `Description` accessors normalise the
5//! tag→severity mapping in one place so the recalculation logic in
6//! `HealthMonitor::Struct` stays a pure aggregation.
7
8use serde::{Deserialize, Serialize};
9
10use crate::IPC::Common::HealthStatus::SeverityLevel;
11
12#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
13pub enum Enum {
14	HighLatency(String),
15	MemoryPressure(String),
16	ConnectionLoss(String),
17	QueueOverflow(String),
18	SecurityViolation(String),
19	PerformanceDegradation(String),
20	Custom(String),
21}
22
23impl Enum {
24	pub fn Severity(&self) -> SeverityLevel::Enum {
25		match self {
26			Enum::HighLatency(_) => SeverityLevel::Enum::Medium,
27			Enum::MemoryPressure(_) => SeverityLevel::Enum::Medium,
28			Enum::ConnectionLoss(_) => SeverityLevel::Enum::High,
29			Enum::QueueOverflow(_) => SeverityLevel::Enum::High,
30			Enum::SecurityViolation(_) => SeverityLevel::Enum::Critical,
31			Enum::PerformanceDegradation(_) => SeverityLevel::Enum::Medium,
32			Enum::Custom(_) => SeverityLevel::Enum::Low,
33		}
34	}
35
36	pub fn Description(&self) -> &str {
37		match self {
38			Enum::HighLatency(D)
39			| Enum::MemoryPressure(D)
40			| Enum::ConnectionLoss(D)
41			| Enum::QueueOverflow(D)
42			| Enum::SecurityViolation(D)
43			| Enum::PerformanceDegradation(D)
44			| Enum::Custom(D) => D,
45		}
46	}
47}