integration-module/crates/config-delivery/src/main.rs

47 lines
1.5 KiB
Rust

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::<ApiConfigV2>(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<JoinHandle<()>> = vec![integr_jh, deliv_future];
for event in vec![integr_jh, deliv_future] {
let _ = event.await;
}
Ok(())
}