forked from NationTech/harmony
refactor: Prometheus alert channel configuration for extensibility to respect OpenClosed, this makes adding new alert channel types easier, requiring only a new trait implementation without modifying core logic
This commit is contained in:
@@ -16,3 +16,5 @@ harmony_macros = { path = "../../harmony_macros" }
|
||||
log = { workspace = true }
|
||||
env_logger = { workspace = true }
|
||||
url = { workspace = true }
|
||||
typetag = "0.2.20"
|
||||
serde = "1.0.219"
|
||||
|
||||
@@ -4,9 +4,7 @@ use harmony::{
|
||||
maestro::Maestro,
|
||||
modules::{
|
||||
lamp::{LAMPConfig, LAMPScore},
|
||||
monitoring::monitoring_alerting::{
|
||||
AlertChannel, MonitoringAlertingStackScore, WebhookServiceType,
|
||||
},
|
||||
monitoring::{kube_prometheus::prometheus_alert_channel::{DiscordChannel, SlackChannel}, monitoring_alerting::MonitoringAlertingScore},
|
||||
},
|
||||
topology::{K8sAnywhereTopology, Url},
|
||||
};
|
||||
@@ -34,28 +32,42 @@ async fn main() {
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
// You can choose the type of Topology you want, we suggest starting with the
|
||||
// K8sAnywhereTopology as it is the most automatic one that enables you to easily deploy
|
||||
// locally, to development environment from a CI, to staging, and to production with settings
|
||||
// that automatically adapt to each environment grade.
|
||||
let mut maestro = Maestro::<K8sAnywhereTopology>::initialize(
|
||||
let mut maestro = Maestro::<K8sAnywhereTopology>::initialize (
|
||||
Inventory::autoload(),
|
||||
K8sAnywhereTopology::new(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let url = url::Url::parse("https://discord.com/api/webhooks/dummy_channel/dummy_token")
|
||||
.expect("invalid URL");
|
||||
let url = url::Url::parse(
|
||||
"https://hooks.slack.com/services/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",
|
||||
)
|
||||
.expect("invalid URL");
|
||||
|
||||
let mut monitoring_stack_score = MonitoringAlertingStackScore::new();
|
||||
let mut monitoring_stack_score = MonitoringAlertingScore::new();
|
||||
monitoring_stack_score.namespace = Some(lamp_stack.config.namespace.clone());
|
||||
monitoring_stack_score.alert_channel = Some(AlertChannel::WebHookUrl {
|
||||
url: url,
|
||||
webhook_service_type: WebhookServiceType::Discord,
|
||||
});
|
||||
monitoring_stack_score.alert_channels = vec![(Box::new(SlackChannel {
|
||||
name: "alert-test".to_string(),
|
||||
webhook_url: url,})),
|
||||
(Box::new(DiscordChannel {
|
||||
name: "discord".to_string(),
|
||||
webhook_url: url::Url::parse("https://discord.com/api/webhooks/1372994201746276462/YRn4TA9pj8ve3lfmyj1j0Yx97i92gv4U_uavt4CV4_SSIVArYUqfDzMOmzSTic2d8XSL").expect("invalid URL"),}))];
|
||||
|
||||
maestro.register_all(vec![Box::new(lamp_stack), Box::new(monitoring_stack_score)]);
|
||||
|
||||
//TODO in process of testing
|
||||
//webhook depricated in MSTeams August 2025
|
||||
//(AlertChannel::MSTeams {
|
||||
// connector: "alert-test".to_string(),
|
||||
// webhook_url: url::Url::parse("").expect("invalid URL"),
|
||||
//}),
|
||||
|
||||
|
||||
maestro.register_all(vec![Box::new(monitoring_stack_score)]);
|
||||
// Here we bootstrap the CLI, this gives some nice features if you need them
|
||||
harmony_cli::init(maestro, None).await.unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user