integration-module/crates/api-grub/src/main.rs

75 lines
2.1 KiB
Rust

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::<Config>(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()
}
}
}