Skip to content

Commit 5ceed51

Browse files
authored
bin/enqueue-job: Use clap to parse commands and generate help text (#5768)
1 parent c196552 commit 5ceed51

File tree

2 files changed

+29
-19
lines changed

2 files changed

+29
-19
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ cargo-registry-index = { path = "cargo-registry-index" }
3131
cargo-registry-markdown = { path = "cargo-registry-markdown" }
3232
cargo-registry-s3 = { path = "cargo-registry-s3" }
3333
chrono = { version = "=0.4.23", features = ["serde"] }
34-
clap = { version = "=4.0.32", features = ["derive", "unicode", "wrap_help"] }
34+
clap = { version = "=4.0.32", features = ["derive", "env", "unicode", "wrap_help"] }
3535

3636
conduit = "=0.10.0"
3737
conduit-axum = { path = "conduit-axum" }

src/bin/enqueue-job.rs

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
#![warn(clippy::all, rust_2018_idioms)]
22

3-
use anyhow::{anyhow, Result};
3+
use anyhow::Result;
44
use cargo_registry::schema::background_jobs::dsl::*;
5-
use cargo_registry::{db, env, worker};
5+
use cargo_registry::{db, worker};
6+
use clap::Parser;
67
use diesel::prelude::*;
78

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+
823
fn main() -> Result<()> {
9-
let conn = db::oneoff_connection()?;
10-
let mut args = std::env::args().skip(1);
24+
let command = Command::parse();
1125

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:?}");
1428

15-
match &*job {
16-
"update_downloads" => {
29+
match command {
30+
Command::UpdateDownloads => {
1731
let count: i64 = background_jobs
1832
.filter(job_type.eq("update_downloads"))
1933
.count()
@@ -27,15 +41,11 @@ fn main() -> Result<()> {
2741
Ok(worker::update_downloads().enqueue(&conn)?)
2842
}
2943
}
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)?),
4050
}
4151
}

0 commit comments

Comments
 (0)