background-jobs/jobs-actix/src/every.rs

27 lines
676 B
Rust
Raw Normal View History

2020-03-21 02:31:03 +00:00
use crate::{Job, QueueHandle};
use actix_rt::time::{interval_at, Instant};
2020-04-23 18:16:56 +00:00
use std::time::Duration;
2021-09-16 22:50:32 +00:00
use tracing::error;
/// A type used to schedule recurring jobs.
///
/// ```rust,ignore
2020-03-21 03:24:31 +00:00
/// let server = create_server(storage);
/// server.every(Duration::from_secs(60 * 30), MyJob::new());
/// ```
pub(crate) async fn every<J>(spawner: QueueHandle, duration: Duration, job: J)
where
J: Job + Clone + Send,
{
let mut interval = interval_at(Instant::now(), duration);
loop {
interval.tick().await;
let job = job.clone();
if spawner.queue::<J>(job).await.is_err() {
error!("Failed to queue job: {}", J::NAME);
2020-03-21 02:31:03 +00:00
}
}
}