diff --git a/src/main.rs b/src/main.rs index 67d6035..d949f72 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; use std::sync::Arc; +use std::thread::JoinHandle; use std::time::SystemTime; use clap::Parser; use prometheus::push_metrics; @@ -57,14 +58,29 @@ fn projects_refresh_job(client_mgr: Arc, project_mgr: Arc(interval: usize, schedule: &mut Scheduler, client_mgr: Arc, project_mgr: Arc, p_url: String, provider: Arc) -> color_eyre::Result<()> { +fn perform_metrics_job(interval: usize, client_mgr: Arc, project_mgr: Arc, p_url: String, provider: Arc) { + let mut schedule = Scheduler::new(); + metric_refresh_job(client_mgr.clone(), project_mgr.clone(), p_url.clone(), provider.clone()); every(interval as Interval) - .seconds()? - .run_four_args(schedule, metric_refresh_job, client_mgr, project_mgr, p_url, provider)?; - Ok(()) + .seconds().unwrap() + .run_four_args(&mut schedule, metric_refresh_job, client_mgr, project_mgr, p_url, provider).unwrap(); + + loop { + if let Err(e) = schedule.run_pending() { + warn!("Error: {e}"); + } + std::thread::sleep(std::time::Duration::from_secs(1)); + } } +fn spawn_metrics_job(interval: usize, client_mgr: Arc, project_mgr: Arc, p_url: String, provider: Arc) -> JoinHandle<()> { + std::thread::spawn(move || { + perform_metrics_job(interval, client_mgr, project_mgr, p_url, provider); + }) +} + + pub fn main() -> color_eyre::Result<()> { let subscriber = tracing_subscriber::FmtSubscriber::new(); tracing::subscriber::set_global_default(subscriber)?; @@ -85,29 +101,26 @@ pub fn main() -> color_eyre::Result<()> { .seconds()? .run_two_args(&mut schedule, projects_refresh_job, client_mgr.clone(), project_mgr.clone())?; - register_metrics_job( + spawn_metrics_job( args.project_metrics_refresh_interval, - &mut schedule, client_mgr.clone(), project_mgr.clone(), p_url.clone(), - project_metrics.clone())?; + project_metrics.clone()); - register_metrics_job( + spawn_metrics_job( args.queue_metrics_refresh_interval, - &mut schedule, client_mgr.clone(), project_mgr.clone(), p_url.clone(), - queue_metrics.clone())?; + queue_metrics.clone()); - register_metrics_job( + spawn_metrics_job( args.downloader_metrics_refresh_interval, - &mut schedule, client_mgr.clone(), project_mgr.clone(), p_url.clone(), - downloader_metrics.clone())?; + downloader_metrics.clone()); loop { if let Err(e) = schedule.run_pending() {