mod delivery; mod integration; mod logger; use integr_structs::api::ApiConfigV2; use logger::setup_logger; use dotenv::dotenv; use anyhow::Result; use tokio::sync::mpsc; use log::{info, error}; use integration::init_integration_mech; use delivery::init_delivery_mech; use std::sync::Arc; // Arch : // 1) 2 Unix-Socket client (for api grub and preproc) :: i think its a continious process for events when services are unavailable // 2) mpsc beetween `delivery` and `integration` :: // 3) websocket client in `integration` to pull configs from Monitoring System :: #[tokio::main(flavor = "multi_thread")] async fn main() -> Result<()> { let _ = setup_logger().await?; info!("Pulling env vars from .env file if exists ..."); dotenv().ok(); let (tx, rx) = mpsc::channel::(1); let tx = Arc::new(tx); let integr_jh = tokio::spawn( async move { if let Err(er) = init_integration_mech(tx).await { error!("Error in integration submodule during to: {}", er); } } ); let deliv_future = tokio::spawn(async move { if let Err(er) = init_delivery_mech(rx).await { error!("Error in delivery submodule during to: {}", er); } }); // for deliv adding // let action_vec: Vec> = vec![integr_jh, deliv_future]; for event in vec![integr_jh, deliv_future] { let _ = event.await; } Ok(()) }