|
@@ -10,7 +10,7 @@ use uuid::Uuid;
|
|
|
pub struct Job {
|
|
|
pub id: Uuid,
|
|
|
pub name: String,
|
|
|
- pub expected_time: DateTime<FixedOffset>,
|
|
|
+ pub scheduled_at: DateTime<FixedOffset>,
|
|
|
pub frequency: Option<i32>,
|
|
|
pub frequency_unit: Option<FrequencyUnit>,
|
|
|
pub metadata: serde_json::Value,
|
|
@@ -34,7 +34,7 @@ pub enum FrequencyUnit {
|
|
|
pub async fn insert_job(
|
|
|
db: &DbClient,
|
|
|
name: &String,
|
|
|
- expected_time: &DateTime<FixedOffset>,
|
|
|
+ scheduled_at: &DateTime<FixedOffset>,
|
|
|
frequency: &Option<i32>,
|
|
|
frequency_unit: &Option<FrequencyUnit>,
|
|
|
metadata: &serde_json::Value,
|
|
@@ -42,9 +42,9 @@ pub async fn insert_job(
|
|
|
tracing::trace!("insert_job(name={})", name);
|
|
|
|
|
|
db.execute(
|
|
|
- "INSERT INTO jobs (name, expected_time, frequency, frequency_unit, metadata) VALUES ($1, $2, $3, $4, $5)
|
|
|
- ON CONFLICT (name, expected_time) DO UPDATE SET metadata = EXCLUDED.metadata",
|
|
|
- &[&name, &expected_time, &frequency, &frequency_unit, &metadata],
|
|
|
+ "INSERT INTO jobs (name, scheduled_at, frequency, frequency_unit, metadata) VALUES ($1, $2, $3, $4, $5)
|
|
|
+ ON CONFLICT (name, scheduled_at) DO UPDATE SET metadata = EXCLUDED.metadata",
|
|
|
+ &[&name, &scheduled_at, &frequency, &frequency_unit, &metadata],
|
|
|
)
|
|
|
.await
|
|
|
.context("Inserting job")?;
|
|
@@ -86,13 +86,13 @@ pub async fn update_job_executed_at(db: &DbClient, id: &Uuid) -> Result<()> {
|
|
|
}
|
|
|
|
|
|
// Selects all jobs with:
|
|
|
-// - expected_time in the past
|
|
|
+// - scheduled_at in the past
|
|
|
// - error_message is null or executed_at is at least 60 minutes ago (intended to make repeat executions rare enough)
|
|
|
pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
|
|
|
let jobs = db
|
|
|
.query(
|
|
|
"
|
|
|
- SELECT * FROM jobs WHERE expected_time <= now() AND (error_message IS NULL OR executed_at <= now() - INTERVAL '60 minutes')",
|
|
|
+ SELECT * FROM jobs WHERE scheduled_at <= now() AND (error_message IS NULL OR executed_at <= now() - INTERVAL '60 minutes')",
|
|
|
&[],
|
|
|
)
|
|
|
.await
|
|
@@ -102,7 +102,7 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
|
|
|
for job in jobs {
|
|
|
let id: Uuid = job.get(0);
|
|
|
let name: String = job.get(1);
|
|
|
- let expected_time: DateTime<FixedOffset> = job.get(2);
|
|
|
+ let scheduled_at: DateTime<FixedOffset> = job.get(2);
|
|
|
let frequency: Option<i32> = job.get(3);
|
|
|
let frequency_unit: Option<FrequencyUnit> = job.get(4);
|
|
|
let metadata: serde_json::Value = job.get(5);
|
|
@@ -112,7 +112,7 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
|
|
|
data.push(Job {
|
|
|
id,
|
|
|
name,
|
|
|
- expected_time,
|
|
|
+ scheduled_at,
|
|
|
frequency,
|
|
|
frequency_unit,
|
|
|
metadata,
|