mod config; mod net; mod logger; mod json; mod export; mod monitoring; use anyhow::Result; use integr_structs::api::v3::Config; use logger::setup_logger; use config::{pull_local_config, init_config_grub_mechanism}; use net::init_api_grub_mechanism; use tokio::sync::mpsc; use tracing::{error, info, warn}; use monitoring::get_metrics_from_monitoring; #[tokio::main(flavor = "multi_thread")] async fn main() -> Result<()>{ dotenv::dotenv().ok(); setup_logger().await?; let config = get_config().await; // config update channel let (tx, mut rx) = mpsc::channel::(1); let event_config = tokio::spawn(async move { match init_config_grub_mechanism(&tx).await { Ok(_) => { info!("Config task deinitialized"); }, Err(er) => { error!("Config task returned an error : {}", er); }, } }); let event_grub = tokio::spawn(async move { if std::env::var("ENODE_MONITORING_IP").is_ok() { match get_metrics_from_monitoring(0, 5).await { Ok(_) => { info!("Grabing (eNODE.Monitoring) task deinitialized"); }, Err(er) => { error!("Grabing task returned an error : {}", er); }, } } else { match init_api_grub_mechanism(config, &mut rx).await { Ok(_) => { info!("Grabing task deinitialized"); }, Err(er) => { error!("Grabing task returned an error : {}", er); }, } } }); let events_handler = vec![event_config, event_grub]; for event in events_handler { let _ = event.await; } Ok(()) } async fn get_config() -> Config { return match pull_local_config().await { Ok(conf) => { info!("Local config was loaded"); conf }, Err(er) => { warn!("Cannot get local config due to {}", er); Config::default() } } }