use gradatum_admin::{
api_key_cmd, init, jobs_cmd, token, vault_rename, BackfillArgs, BackfillTitlesArgs,
DowngradeFromTrashArgs, VaultRenameArgs,
};
use clap::{Args, Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(version, about = "gradatum-admin — CLI opérateur Gradatum")]
struct Cli {
#[command(subcommand)]
command: Cmd,
}
#[derive(Debug, Subcommand)]
enum Cmd {
Init(init::InitArgs),
Token {
#[command(subcommand)]
cmd: token::TokenCmd,
},
#[command(name = "api-key")]
ApiKey {
#[command(subcommand)]
cmd: api_key_cmd::ApiKeyCmd,
},
#[command(name = "backfill-embeddings")]
BackfillEmbeddings {
#[arg(long, default_value = "/var/lib/gradatum")]
root: std::path::PathBuf,
#[arg(long)]
tenant: Option<String>,
#[arg(long)]
limit: Option<usize>,
},
#[command(name = "backfill-titles")]
BackfillTitles {
#[arg(long, default_value = "/var/lib/gradatum")]
root: std::path::PathBuf,
#[arg(long, default_value = "main")]
tenant: String,
#[arg(long)]
dry_run: bool,
#[arg(long)]
limit: Option<usize>,
},
Jobs {
#[command(subcommand)]
cmd: jobs_cmd::JobsCmd,
},
#[command(name = "downgrade-from-legacy-vault-trash")]
DowngradeFromLegacyVaultTrash {
#[arg(long, default_value = "/home/maintainer-user/.memory-vault")]
legacy_vault_path: std::path::PathBuf,
#[arg(long, default_value = "/var/lib/gradatum")]
root: std::path::PathBuf,
#[arg(long)]
dry_run: bool,
#[arg(long)]
limit: Option<usize>,
},
Vault {
#[command(subcommand)]
cmd: VaultCmd,
},
}
#[derive(Debug, Subcommand)]
enum VaultCmd {
Rename(VaultRenameCliArgs),
}
#[derive(Debug, Args)]
struct VaultRenameCliArgs {
pub ancien: String,
pub nouveau: String,
#[arg(long, default_value = "/var/lib/gradatum")]
pub root: std::path::PathBuf,
#[arg(long, default_value = "main")]
pub tenant: String,
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::try_init().ok();
let cli = Cli::parse();
match cli.command {
Cmd::Init(args) => init::run(args),
Cmd::Token { cmd } => token::run(cmd),
Cmd::ApiKey { cmd } => api_key_cmd::run(cmd).await,
Cmd::Jobs { cmd } => jobs_cmd::run(cmd).await,
Cmd::BackfillEmbeddings {
root,
tenant,
limit,
} => {
let args = BackfillArgs {
root,
tenant,
limit,
};
let n = gradatum_admin::backfill(args).await?;
println!("backfill-embeddings: {n} job(s) enqueued");
Ok(())
}
Cmd::BackfillTitles {
root,
tenant,
dry_run,
limit,
} => {
let args = BackfillTitlesArgs {
root,
tenant,
dry_run,
limit,
};
let report = gradatum_admin::backfill_titles(args).await?;
if dry_run {
println!(
"backfill-titles [DRY-RUN]: notes_scanned={} titles_extracted={} titles_updated={} titles_no_h1={}",
report.notes_scanned,
report.titles_extracted,
report.titles_updated,
report.titles_no_h1,
);
} else {
println!(
"backfill-titles: notes_scanned={} titles_extracted={} titles_updated={} titles_no_h1={}",
report.notes_scanned,
report.titles_extracted,
report.titles_updated,
report.titles_no_h1,
);
}
Ok(())
}
Cmd::DowngradeFromLegacyVaultTrash {
legacy_vault_path,
root,
dry_run,
limit,
} => {
let args = DowngradeFromTrashArgs {
legacy_vault_path,
gradatum_root: root,
dry_run,
limit,
};
let stats = gradatum_admin::downgrade_from_vault_trash(args).await?;
println!("downgrade-from-legacy-vault-trash complete: {stats:?}");
Ok(())
}
Cmd::Vault { cmd } => match cmd {
VaultCmd::Rename(cli_args) => {
let args = VaultRenameArgs {
root: cli_args.root,
ancien: cli_args.ancien,
nouveau: cli_args.nouveau,
tenant: cli_args.tenant,
};
let report = vault_rename(args).await?;
println!(
"vault rename: note_id={} slug={}",
report.note_id, report.slug
);
Ok(())
}
},
}
}
#[cfg(test)]
mod tests {
#[test]
fn version_is_set() {
assert!(!env!("CARGO_PKG_VERSION").is_empty());
}
}