|
|
@@ -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<ClientManager>, project_mgr: Arc<Tracker |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
fn register_metrics_job<T: MetricsProvider + 'static>(interval: usize, schedule: &mut Scheduler, client_mgr: Arc<ClientManager>, project_mgr: Arc<TrackerInfoManager>, p_url: String, provider: Arc<T>) -> color_eyre::Result<()> { |
|
|
|
fn perform_metrics_job<T: MetricsProvider + 'static>(interval: usize, client_mgr: Arc<ClientManager>, project_mgr: Arc<TrackerInfoManager>, p_url: String, provider: Arc<T>) { |
|
|
|
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<T: MetricsProvider + 'static>(interval: usize, client_mgr: Arc<ClientManager>, project_mgr: Arc<TrackerInfoManager>, p_url: String, provider: Arc<T>) -> 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() { |
|
|
|