1
1
//! The `jobs` table provides a way to have scheduled jobs
2
2
use anyhow:: { Context as _, Result } ;
3
- use chrono:: { DateTime , Duration , FixedOffset } ;
4
- use postgres_types:: { FromSql , ToSql } ;
3
+ use chrono:: { DateTime , FixedOffset } ;
5
4
use serde:: { Deserialize , Serialize } ;
6
5
use tokio_postgres:: Client as DbClient ;
7
6
use uuid:: Uuid ;
@@ -11,40 +10,23 @@ pub struct Job {
11
10
pub id : Uuid ,
12
11
pub name : String ,
13
12
pub scheduled_at : DateTime < FixedOffset > ,
14
- pub frequency : Option < i32 > ,
15
- pub frequency_unit : Option < FrequencyUnit > ,
16
13
pub metadata : serde_json:: Value ,
17
14
pub executed_at : Option < DateTime < FixedOffset > > ,
18
15
pub error_message : Option < String > ,
19
16
}
20
17
21
- #[ derive( Serialize , Deserialize , Debug , ToSql , FromSql ) ]
22
- #[ postgres( name = "frequency_unit" ) ]
23
- pub enum FrequencyUnit {
24
- #[ postgres( name = "days" ) ]
25
- Days ,
26
- #[ postgres( name = "hours" ) ]
27
- Hours ,
28
- #[ postgres( name = "minutes" ) ]
29
- Minutes ,
30
- #[ postgres( name = "seconds" ) ]
31
- Seconds ,
32
- }
33
-
34
18
pub async fn insert_job (
35
19
db : & DbClient ,
36
20
name : & String ,
37
21
scheduled_at : & DateTime < FixedOffset > ,
38
- frequency : & Option < i32 > ,
39
- frequency_unit : & Option < FrequencyUnit > ,
40
22
metadata : & serde_json:: Value ,
41
23
) -> Result < ( ) > {
42
24
tracing:: trace!( "insert_job(name={})" , name) ;
43
25
44
26
db. execute (
45
- "INSERT INTO jobs (name, scheduled_at, frequency, frequency_unit, metadata) VALUES ($1, $2, $3, $4, $5)
27
+ "INSERT INTO jobs (name, scheduled_at, metadata) VALUES ($1, $2, $3, $4, $5)
46
28
ON CONFLICT (name, scheduled_at) DO UPDATE SET metadata = EXCLUDED.metadata" ,
47
- & [ & name, & scheduled_at, & frequency , & frequency_unit , & metadata] ,
29
+ & [ & name, & scheduled_at, & metadata] ,
48
30
)
49
31
. await
50
32
. context ( "Inserting job" ) ?;
@@ -103,8 +85,6 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
103
85
let id: Uuid = job. get ( 0 ) ;
104
86
let name: String = job. get ( 1 ) ;
105
87
let scheduled_at: DateTime < FixedOffset > = job. get ( 2 ) ;
106
- let frequency: Option < i32 > = job. get ( 3 ) ;
107
- let frequency_unit: Option < FrequencyUnit > = job. get ( 4 ) ;
108
88
let metadata: serde_json:: Value = job. get ( 5 ) ;
109
89
let executed_at: Option < DateTime < FixedOffset > > = job. get ( 6 ) ;
110
90
let error_message: Option < String > = job. get ( 7 ) ;
@@ -113,8 +93,6 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
113
93
id,
114
94
name,
115
95
scheduled_at,
116
- frequency,
117
- frequency_unit,
118
96
metadata,
119
97
executed_at,
120
98
error_message,
@@ -123,12 +101,3 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
123
101
124
102
Ok ( data)
125
103
}
126
-
127
- pub fn get_duration_from_cron ( cron_period : i32 , cron_unit : & FrequencyUnit ) -> Duration {
128
- match cron_unit {
129
- FrequencyUnit :: Days => Duration :: days ( cron_period as i64 ) ,
130
- FrequencyUnit :: Hours => Duration :: hours ( cron_period as i64 ) ,
131
- FrequencyUnit :: Minutes => Duration :: minutes ( cron_period as i64 ) ,
132
- FrequencyUnit :: Seconds => Duration :: seconds ( cron_period as i64 ) ,
133
- }
134
- }
0 commit comments