use siafu::{JobBuilder, Scheduler};
use std::time::{SystemTime, Duration};
use std::thread;
use siafu::utils::time::ScheduleTime;
use siafu::scheduler::types::RecurringInterval;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut scheduler = Scheduler::new();
let once_job = JobBuilder::new("once-job")
.once(ScheduleTime::Delay(Duration::from_secs(5)))
.add_handler(|| {
println!("One-time job executed!");
Ok(())
})
.build();
println!("Adding one-time job...");
scheduler.add_job(once_job)?;
let recurring_job = JobBuilder::new("recurring-job")
.recurring(RecurringInterval::Secondly(3), Some(ScheduleTime::Delay(Duration::from_secs(3))))
.repeat(5) .add_handler(|| {
println!("Recurring job executed!");
Ok(())
})
.build();
println!("Adding recurring job...");
scheduler.add_job(recurring_job)?;
let cron_job = JobBuilder::new("cron-job")
.cron("0 * * * * * *")
.add_handler(|| {
println!("Cron job executed!");
Ok(())
})
.build();
println!("Adding cron job...");
scheduler.add_job(cron_job)?;
let random_job = JobBuilder::new("random-job")
.random(ScheduleTime::Delay(Duration::from_secs(5)), ScheduleTime::Delay(Duration::from_secs(15)))
.add_handler(|| {
println!("Random time job executed!");
Ok(())
})
.build();
println!("Adding random time job...");
scheduler.add_job(random_job)?;
println!("Running scheduler...");
let start_time = SystemTime::now();
while SystemTime::now().duration_since(start_time)?.as_secs() < 30 {
scheduler.run_pending()?;
if let Some(next) = scheduler.next_run() {
let duration = next.duration_since(SystemTime::now())
.unwrap_or(Duration::from_secs(0));
println!("Next job scheduled in {} seconds", duration.as_secs());
} else {
println!("No more jobs scheduled");
}
thread::sleep(Duration::from_secs(1));
}
Ok(())
}