61 lines
1.5 KiB
Rust
61 lines
1.5 KiB
Rust
mod dataset;
|
|
mod index;
|
|
mod repository;
|
|
mod utils;
|
|
|
|
use anyhow::Result;
|
|
use job_scheduler::{Job, JobScheduler};
|
|
use tabby_common::config::Config;
|
|
use tracing::{error, info};
|
|
|
|
pub async fn scheduler(now: bool) -> Result<()> {
|
|
let config = Config::load()?;
|
|
let mut scheduler = JobScheduler::new();
|
|
|
|
let job1 = || {
|
|
println!("Syncing repositories...");
|
|
let ret = repository::sync_repositories(&config);
|
|
if let Err(err) = ret {
|
|
error!("Failed to sync repositories, err: '{}'", err);
|
|
return;
|
|
}
|
|
|
|
println!("Building dataset...");
|
|
let ret = dataset::create_dataset(&config);
|
|
if let Err(err) = ret {
|
|
error!("Failed to build dataset, err: '{}'", err);
|
|
}
|
|
println!();
|
|
};
|
|
|
|
let job2 = || {
|
|
println!("Indexing repositories...");
|
|
let ret = index::index_repositories(&config);
|
|
if let Err(err) = ret {
|
|
error!("Failed to index repositories, err: '{}'", err);
|
|
}
|
|
println!()
|
|
};
|
|
|
|
if now {
|
|
job1();
|
|
job2();
|
|
} else {
|
|
// Every 5 minutes.
|
|
scheduler.add(Job::new("0 1/5 * * * * *".parse().unwrap(), job1));
|
|
|
|
// Every 5 hours.
|
|
scheduler.add(Job::new("0 0 1/5 * * * *".parse().unwrap(), job2));
|
|
|
|
info!("Scheduler activated...");
|
|
loop {
|
|
scheduler.tick();
|
|
let duration = scheduler.time_till_next_job();
|
|
info!("Sleep {:?} for next job ...", duration);
|
|
std::thread::sleep(duration);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|