diff --git a/examples/lamp/src/main.rs b/examples/lamp/src/main.rs index bdf0f38..feb8b4f 100644 --- a/examples/lamp/src/main.rs +++ b/examples/lamp/src/main.rs @@ -1,5 +1,9 @@ use harmony::{ - data::Version, inventory::Inventory, maestro::Maestro, modules::lamp::{LAMPConfig, LAMPScore}, topology::{HAClusterTopology, Url} + data::Version, + inventory::Inventory, + maestro::Maestro, + modules::lamp::{LAMPConfig, LAMPScore}, + topology::{HAClusterTopology, Url}, }; #[tokio::main] diff --git a/examples/tui/src/main.rs b/examples/tui/src/main.rs index d912844..d29eae5 100644 --- a/examples/tui/src/main.rs +++ b/examples/tui/src/main.rs @@ -1,12 +1,20 @@ +use std::net::{SocketAddr, SocketAddrV4}; + use harmony::{ inventory::Inventory, maestro::Maestro, modules::{ dns::DnsScore, dummy::{ErrorScore, PanicScore, SuccessScore}, + load_balancer::LoadBalancerScore, + okd::load_balancer::OKDLoadBalancerScore, + }, + topology::{ + BackendServer, HAClusterTopology, HealthCheck, HttpMethod, HttpStatusCode, + LoadBalancerService, }, - topology::HAClusterTopology, }; +use harmony_macros::ipv4; #[tokio::main] async fn main() { @@ -14,11 +22,49 @@ async fn main() { let topology = HAClusterTopology::autoload(); let mut maestro = Maestro::new(inventory, topology); + let backend_server = BackendServer { + address: "192.168.0.0".to_string(), + port: 342, + }; + let lb_service = LoadBalancerService { + backend_servers: vec![ + backend_server.clone(), + backend_server.clone(), + backend_server.clone(), + ], + listening_port: SocketAddr::V4(SocketAddrV4::new(ipv4!("192.168.0.0"), 49387)), + health_check: Some(HealthCheck::HTTP( + "/some_long_ass_path_to_see_how_it_is_displayed_but_it_has_to_be_even_longer" + .to_string(), + HttpMethod::GET, + HttpStatusCode::Success2xx, + )), + }; + let okd_lbscore = LoadBalancerScore { + public_services: vec![ + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + ], + private_services: vec![ + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + lb_service.clone(), + ], + }; + maestro.register_all(vec![ Box::new(SuccessScore {}), Box::new(ErrorScore {}), Box::new(PanicScore {}), Box::new(DnsScore::new(vec![], None)), + Box::new(okd_lbscore), ]); harmony_tui::init(maestro).await.unwrap(); } diff --git a/harmony/src/domain/score.rs b/harmony/src/domain/score.rs index caf74ff..a48548c 100644 --- a/harmony/src/domain/score.rs +++ b/harmony/src/domain/score.rs @@ -225,7 +225,7 @@ mod tests { let dns_score = Box::new(DnsScore::new(vec![], None)); let print_score_output = >::print_score_details(&dns_score); - let expected_empty_dns_score_table = "\n+--------------------------+----------------------------+\n| score_name | DnsScore |\n+--------------------------+----------------------------+\n| dns_entries | [] |\n| register_dhcp_leases | None |\n+--------------------------+----------------------------+\n\n\n"; + let expected_empty_dns_score_table = "\n+--------------------------+--------------------------------------------------+\n| score_name | DnsScore |\n+--------------------------+--------------------------------------------------+\n| dns_entries | [] |\n| register_dhcp_leases | None |\n+--------------------------+--------------------------------------------------+\n\n\n"; assert_eq!(print_score_output, expected_empty_dns_score_table); } } diff --git a/harmony/src/domain/topology/load_balancer.rs b/harmony/src/domain/topology/load_balancer.rs index afb9092..6127019 100644 --- a/harmony/src/domain/topology/load_balancer.rs +++ b/harmony/src/domain/topology/load_balancer.rs @@ -46,6 +46,7 @@ pub struct LoadBalancerService { #[derive(Debug, PartialEq, Clone, Serialize)] pub struct BackendServer { + // TODO should not be a string, probably IPAddress pub address: String, pub port: u16, } diff --git a/harmony_tui/src/lib.rs b/harmony_tui/src/lib.rs index d8c18e2..7ae70bd 100644 --- a/harmony_tui/src/lib.rs +++ b/harmony_tui/src/lib.rs @@ -36,13 +36,13 @@ pub mod tui { /// modules::dummy::{ErrorScore, PanicScore, SuccessScore}, /// topology::HAClusterTopology, /// }; -/// +/// /// #[tokio::main] /// async fn main() { /// let inventory = Inventory::autoload(); /// let topology = HAClusterTopology::autoload(); /// let mut maestro = Maestro::new(inventory, topology); -/// +/// /// maestro.register_all(vec![ /// Box::new(SuccessScore {}), /// Box::new(ErrorScore {}), @@ -125,7 +125,6 @@ impl HarmonyTUI { std::fs::create_dir_all("log")?; tui_logger::set_log_file("log/harmony.log").unwrap(); - color_eyre::install()?; let mut terminal = ratatui::init(); log_panics::init(); diff --git a/harmony_tui/src/widget/score.rs b/harmony_tui/src/widget/score.rs index e394b81..3acb5c2 100644 --- a/harmony_tui/src/widget/score.rs +++ b/harmony_tui/src/widget/score.rs @@ -63,7 +63,7 @@ impl ScoreListWidget { warn!("No Score selected, nothing to launch"); } } - + pub(crate) fn get_selected_score(&self) -> Option>> { let list_read = self.list_state.read().unwrap(); if let Some(index) = list_read.selected() {