87 lines
2.2 KiB
Rust
87 lines
2.2 KiB
Rust
mod dataset;
|
|
mod index;
|
|
mod repository;
|
|
|
|
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 = || {
|
|
info!("Syncing repositories...");
|
|
let ret = repository::sync_repositories(&config);
|
|
if let Err(err) = ret {
|
|
error!("Failed to sync repositories, err: '{}'", err);
|
|
return;
|
|
}
|
|
|
|
info!("Building dataset...");
|
|
let ret = dataset::create_dataset(&config);
|
|
if let Err(err) = ret {
|
|
error!("Failed to build dataset, err: '{}'", err);
|
|
}
|
|
};
|
|
|
|
let job2 = || {
|
|
info!("Indexing repositories...");
|
|
let ret = index::index_repositories(&config);
|
|
if let Err(err) = ret {
|
|
error!("Failed to index repositories, err: '{}'", err);
|
|
}
|
|
};
|
|
|
|
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(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use tabby_common::{
|
|
config::{Config, Experimental, Repository},
|
|
path::set_tabby_root,
|
|
};
|
|
use temp_testdir::*;
|
|
use tracing_test::traced_test;
|
|
|
|
use super::*;
|
|
|
|
#[traced_test]
|
|
#[test]
|
|
fn end_to_end() {
|
|
set_tabby_root(TempDir::default().to_path_buf());
|
|
|
|
let config = Config {
|
|
repositories: vec![Repository {
|
|
git_url: "https://github.com/TabbyML/interview-questions".to_owned(),
|
|
}],
|
|
experimental: Experimental::default(),
|
|
};
|
|
|
|
repository::sync_repositories(&config).unwrap();
|
|
dataset::create_dataset(&config).unwrap();
|
|
index::index_repositories(&config).unwrap();
|
|
}
|
|
}
|