mod database; mod error; mod message; mod model; mod worker; use std::sync::{mpsc::channel, Arc, Mutex}; use std::thread; use std::time; use chrono::prelude::*; use database::init_database_pool; use model::{Job, JobAction}; use worker::{CheckHandler, DeployHandler, Manager, WorkerStatus}; fn main() { let now: DateTime = Utc::now(); init_database_pool(); let (sender, receiver) = channel(); let mut deployer: Manager = Manager::new("deploy"); let deploy_handler = DeployHandler::new(Arc::new(Mutex::new(sender))); deployer.launch_workers(5, Arc::new(deploy_handler)); let check_handler = CheckHandler::new(); let mut checker: Manager = Manager::new("checker"); checker.launch_workers(5, Arc::new(check_handler)); checker.subscribe(receiver); for i in 0..5000 { let job = Job::new(i, JobAction::MegaportDeploy); deployer.add_runner(job); } let wait = time::Duration::from_millis(100); while !deployer.healthcheck(WorkerStatus::Stopped) { thread::sleep(wait); } let elapsed = Utc::now() - now; println!( "deployment done in : {}.{}s", elapsed.num_seconds(), elapsed.num_milliseconds(), ); }