From 849bd797103e1fcaefa2a728539b3a2717a84a80 Mon Sep 17 00:00:00 2001 From: Willem Date: Tue, 9 Sep 2025 15:35:28 -0400 Subject: [PATCH 1/2] connected alert rules, grafana, etc --- .../crd/rhob_monitoring_stack.rs | 5 +- .../modules/prometheus/rhob_alerting_score.rs | 47 +++++++------------ 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs b/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs index bd542e9..f82e410 100644 --- a/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs +++ b/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs @@ -4,7 +4,9 @@ use kube::CustomResource; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use crate::modules::monitoring::kube_prometheus::crd::rhob_prometheuses::LabelSelector; +use crate::modules::monitoring::kube_prometheus::crd::rhob_prometheuses::{ + LabelSelector, PrometheusSpec, +}; /// MonitoringStack CRD for monitoring.rhobs/v1alpha1 #[derive(CustomResource, Serialize, Deserialize, Debug, Clone, JsonSchema)] @@ -28,6 +30,7 @@ pub struct MonitoringStackSpec { /// Resource selector for workloads monitored by this stack. #[serde(default, skip_serializing_if = "Option::is_none")] pub resource_selector: Option, + } impl Default for MonitoringStackSpec { diff --git a/harmony/src/modules/prometheus/rhob_alerting_score.rs b/harmony/src/modules/prometheus/rhob_alerting_score.rs index 2110157..67449f2 100644 --- a/harmony/src/modules/prometheus/rhob_alerting_score.rs +++ b/harmony/src/modules/prometheus/rhob_alerting_score.rs @@ -25,8 +25,13 @@ use crate::modules::monitoring::kube_prometheus::crd::rhob_monitoring_stack::{ use crate::modules::monitoring::kube_prometheus::crd::rhob_prometheus_rules::{ PrometheusRule, PrometheusRuleSpec, RuleGroup, }; -use crate::modules::monitoring::kube_prometheus::crd::rhob_prometheuses::LabelSelector; +use crate::modules::monitoring::kube_prometheus::crd::rhob_prometheuses::{ + AlertmanagerEndpoints, LabelSelector, PrometheusSpec, PrometheusSpecAlerting, +}; +use crate::modules::monitoring::kube_prometheus::crd::rhob_role::{ + build_prom_role, build_prom_rolebinding, build_prom_service_account, +}; use crate::modules::monitoring::kube_prometheus::crd::rhob_service_monitor::{ ServiceMonitor, ServiceMonitorSpec, }; @@ -252,21 +257,29 @@ impl RHOBAlertingInterpret { "installing crd-prometheuses in namespace {}", self.sender.namespace.clone() ); + debug!("building role/rolebinding/serviceaccount for crd-prometheus"); let stack = MonitoringStack { metadata: ObjectMeta { + name: Some(format!("{}-monitoring", self.sender.namespace.clone()).into()), namespace: Some(self.sender.namespace.clone()), - labels: Some([("coo".into(), "example".into())].into()), + labels: Some( + [ + ("monitoring-stack".into(), "true".into()), + ] + .into(), + ), ..Default::default() }, spec: MonitoringStackSpec { log_level: Some("debug".into()), retention: Some("1d".into()), resource_selector: Some(LabelSelector { - match_labels: [("app".into(), "demo".into())].into(), - ..Default::default() + match_labels: Default::default(), + match_expressions: vec![], }), + }, }; @@ -275,6 +288,7 @@ impl RHOBAlertingInterpret { .await .map_err(|e| InterpretError::new(e.to_string()))?; + let alert_manager_domain = topology .get_domain(format!("alert-manager-{}", self.sender.namespace.clone())) .await?; @@ -317,31 +331,6 @@ impl RHOBAlertingInterpret { ))) } - async fn install_alert_manager( - &self, - client: &Arc, - ) -> Result { - let am = Alertmanager { - metadata: ObjectMeta { - name: Some(self.sender.namespace.clone()), - labels: Some(std::collections::BTreeMap::from([( - "alertmanagerConfig".to_string(), - "enabled".to_string(), - )])), - namespace: Some(self.sender.namespace.clone()), - ..Default::default() - }, - spec: AlertmanagerSpec::default(), - }; - client - .apply(&am, Some(&self.sender.namespace.clone())) - .await - .map_err(|e| InterpretError::new(e.to_string()))?; - Ok(Outcome::success(format!( - "successfully deployed service monitor {:#?}", - am.metadata.name - ))) - } async fn install_monitors( &self, mut monitors: Vec, From a5f9ecfcf7ab4ba16f108fa3febefa4d11ded9bb Mon Sep 17 00:00:00 2001 From: Willem Date: Tue, 9 Sep 2025 15:36:49 -0400 Subject: [PATCH 2/2] cargo fmt --- .../kube_prometheus/crd/rhob_monitoring_stack.rs | 1 - harmony/src/modules/prometheus/rhob_alerting_score.rs | 10 +--------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs b/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs index f82e410..d500891 100644 --- a/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs +++ b/harmony/src/modules/monitoring/kube_prometheus/crd/rhob_monitoring_stack.rs @@ -30,7 +30,6 @@ pub struct MonitoringStackSpec { /// Resource selector for workloads monitored by this stack. #[serde(default, skip_serializing_if = "Option::is_none")] pub resource_selector: Option, - } impl Default for MonitoringStackSpec { diff --git a/harmony/src/modules/prometheus/rhob_alerting_score.rs b/harmony/src/modules/prometheus/rhob_alerting_score.rs index 67449f2..b547031 100644 --- a/harmony/src/modules/prometheus/rhob_alerting_score.rs +++ b/harmony/src/modules/prometheus/rhob_alerting_score.rs @@ -261,15 +261,9 @@ impl RHOBAlertingInterpret { let stack = MonitoringStack { metadata: ObjectMeta { - name: Some(format!("{}-monitoring", self.sender.namespace.clone()).into()), namespace: Some(self.sender.namespace.clone()), - labels: Some( - [ - ("monitoring-stack".into(), "true".into()), - ] - .into(), - ), + labels: Some([("monitoring-stack".into(), "true".into())].into()), ..Default::default() }, spec: MonitoringStackSpec { @@ -279,7 +273,6 @@ impl RHOBAlertingInterpret { match_labels: Default::default(), match_expressions: vec![], }), - }, }; @@ -288,7 +281,6 @@ impl RHOBAlertingInterpret { .await .map_err(|e| InterpretError::new(e.to_string()))?; - let alert_manager_domain = topology .get_domain(format!("alert-manager-{}", self.sender.namespace.clone())) .await?;