Bläddra i källkod

Add multithreading even more.

master
rewby 9 månader sedan
förälder
incheckning
2b601e4b4f
Signerad av: rewby GPG-nyckel ID: 4C2B6D2972EE5423
1 ändrade filer med 26 tillägg och 13 borttagningar
  1. +26
    -13
      src/main.rs

+ 26
- 13
src/main.rs Visa fil

@@ -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() {


Laddar…
Avbryt
Spara