monitoring-alerting #30
59
harmony/src/domain/topology/monitoring_alerting.rs
Normal file
59
harmony/src/domain/topology/monitoring_alerting.rs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
use serde::Serialize;
|
||||||
|
use tokio::sync::OnceCell;
|
||||||
|
|
||||||
|
use async_trait::async_trait;
|
||||||
|
|
||||||
|
use crate::interpret::{InterpretError, Outcome};
|
||||||
|
|
||||||
|
use super::{HelmCommand, Topology};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
struct MonitoringState {
|
||||||
|
message: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct MonitoringAlertingTopology {
|
||||||
|
monitoring_state: OnceCell<Option<MonitoringState>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl MonitoringAlertingTopology {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
monitoring_state: OnceCell::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn get_monitoring_state(&self) -> Result<Option<MonitoringState>, InterpretError> {
|
||||||
|
let state = MonitoringState {
|
||||||
|
message: "monitoring stack not installed".to_string(),
|
||||||
|
};
|
||||||
|
Ok(Some(state))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl Topology for MonitoringAlertingTopology {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"MonitoringAlertingTopology"
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn ensure_ready(&self) -> Result<Outcome, InterpretError> {
|
||||||
|
let monitoring_state = self
|
||||||
|
.monitoring_state
|
||||||
|
.get_or_try_init(|| async { self.get_monitoring_state() })
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if monitoring_state.is_some() {
|
||||||
|
Ok(Outcome::success(
|
||||||
|
"Monitoring stack already installed".to_string(),
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
Ok(Outcome::success(
|
||||||
|
"Monitoring stack not installed".to_string(),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HelmCommand for MonitoringAlertingTopology {}
|
||||||
Loading…
Reference in New Issue
Block a user