75 lines
2.1 KiB
Rust
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()
|
|
}
|
|
}
|
|
} |