use std::{path::PathBuf, sync::Arc}; use harmony::{ inventory::Inventory, maestro::Maestro, modules::{ application::{ ApplicationScore, RustWebFramework, RustWebapp, features::{ContinuousDelivery, Monitoring}, }, monitoring::alert_channel::{ discord_alert_channel::DiscordWebhook, webhook_receiver::WebhookReceiver, }, }, topology::{K8sAnywhereTopology, Url}, }; #[tokio::main] async fn main() { env_logger::init(); let topology = K8sAnywhereTopology::from_env(); let mut maestro = Maestro::initialize(Inventory::autoload(), topology) .await .unwrap(); let application = Arc::new(RustWebapp { name: "harmony-example-rust-webapp".to_string(), domain: Url::Url(url::Url::parse("https://rustapp.harmony.example.com").unwrap()), project_root: PathBuf::from("./examples/rust/webapp"), framework: Some(RustWebFramework::Leptos), }); let discord_receiver = DiscordWebhook { name: "test-discord".to_string(), url: Url::Url(url::Url::parse("https://discord.doesnt.exist.com").unwrap()), }; let webhook_receiver = WebhookReceiver { name: "sample-webhook-receiver".to_string(), url: Url::Url(url::Url::parse("https://webhook-doesnt-exist.com").unwrap()), }; let app = ApplicationScore { features: vec![ Box::new(ContinuousDelivery { application: application.clone(), }), // TODO add monitoring, backups, multisite ha, etc Box::new(Monitoring { application: application.clone(), alert_receiver: vec![Box::new(discord_receiver), Box::new(webhook_receiver)], service_monitors: vec![], alert_rules: vec![], }), // TODO add backups, multisite ha, etc ], application, }; maestro.register_all(vec![Box::new(app)]); harmony_cli::init(maestro, None).await.unwrap(); }