1
1
#![ warn( clippy:: all, rust_2018_idioms) ]
2
2
3
- use anyhow:: { anyhow , Result } ;
3
+ use anyhow:: Result ;
4
4
use cargo_registry:: schema:: background_jobs:: dsl:: * ;
5
- use cargo_registry:: { db, env, worker} ;
5
+ use cargo_registry:: { db, worker} ;
6
+ use clap:: Parser ;
6
7
use diesel:: prelude:: * ;
7
8
9
+ #[ derive( clap:: Parser , Debug ) ]
10
+ #[ command( name = "enqueue-job" , rename_all = "snake_case" ) ]
11
+ enum Command {
12
+ UpdateDownloads ,
13
+ DumpDb {
14
+ #[ arg( env = "READ_ONLY_REPLICA_URL" ) ]
15
+ database_url : String ,
16
+ #[ arg( default_value = "db-dump.tar.gz" ) ]
17
+ target_name : String ,
18
+ } ,
19
+ DailyDbMaintenance ,
20
+ SquashIndex ,
21
+ }
22
+
8
23
fn main ( ) -> Result < ( ) > {
9
- let conn = db:: oneoff_connection ( ) ?;
10
- let mut args = std:: env:: args ( ) . skip ( 1 ) ;
24
+ let command = Command :: parse ( ) ;
11
25
12
- let job = args . next ( ) . unwrap_or_default ( ) ;
13
- println ! ( "Enqueueing background job: {job }" ) ;
26
+ let conn = db :: oneoff_connection ( ) ? ;
27
+ println ! ( "Enqueueing background job: {command:? }" ) ;
14
28
15
- match & * job {
16
- "update_downloads" => {
29
+ match command {
30
+ Command :: UpdateDownloads => {
17
31
let count: i64 = background_jobs
18
32
. filter ( job_type. eq ( "update_downloads" ) )
19
33
. count ( )
@@ -27,15 +41,11 @@ fn main() -> Result<()> {
27
41
Ok ( worker:: update_downloads ( ) . enqueue ( & conn) ?)
28
42
}
29
43
}
30
- "dump_db" => {
31
- let database_url = args. next ( ) . unwrap_or_else ( || env ( "READ_ONLY_REPLICA_URL" ) ) ;
32
- let target_name = args
33
- . next ( )
34
- . unwrap_or_else ( || String :: from ( "db-dump.tar.gz" ) ) ;
35
- Ok ( worker:: dump_db ( database_url, target_name) . enqueue ( & conn) ?)
36
- }
37
- "daily_db_maintenance" => Ok ( worker:: daily_db_maintenance ( ) . enqueue ( & conn) ?) ,
38
- "squash_index" => Ok ( worker:: squash_index ( ) . enqueue ( & conn) ?) ,
39
- other => Err ( anyhow ! ( "Unrecognized job type `{}`" , other) ) ,
44
+ Command :: DumpDb {
45
+ database_url,
46
+ target_name,
47
+ } => Ok ( worker:: dump_db ( database_url, target_name) . enqueue ( & conn) ?) ,
48
+ Command :: DailyDbMaintenance => Ok ( worker:: daily_db_maintenance ( ) . enqueue ( & conn) ?) ,
49
+ Command :: SquashIndex => Ok ( worker:: squash_index ( ) . enqueue ( & conn) ?) ,
40
50
}
41
51
}
0 commit comments