monitoring-alerting #30

Merged
wjro merged 12 commits from monitoring-alerting into master 2025-05-06 17:50:57 +00:00
Showing only changes of commit fbd466a85c - Show all commits

View 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 {}