use super::{presentation, Gauge};
use anyhow::Result;
use clap::{CommandFactory, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(
version = crate::GIT_VERSION,
name = "gauge",
about = "Research-quality metrics over Wiki entries and complete DAG frontiers"
)]
struct Cli {
#[arg(long, env = "PILE")]
pile: PathBuf,
#[arg(long, env = "TRIBLESPACE_KEY")]
key: Option<PathBuf>,
#[command(subcommand)]
command: Option<Command>,
}
#[derive(Subcommand)]
enum Command {
Health,
Tags,
Quality,
Hubs {
#[arg(short, long, default_value = "15")]
top: usize,
},
Risk,
Orphans {
#[arg(short, long, default_value = "20")]
top: usize,
#[arg(long)]
ids: bool,
},
}
pub fn run() -> Result<()> {
let cli = Cli::parse();
let Some(command) = cli.command else {
Cli::command().print_help()?;
println!();
return Ok(());
};
let gauge = Gauge::new(cli.pile, cli.key);
crate::cli::with_output("gauge", |out| match command {
Command::Health => presentation::health(&gauge.health()?, out),
Command::Tags => presentation::tags(&gauge.tags()?, out),
Command::Quality => presentation::quality(&gauge.quality()?, out),
Command::Hubs { top } => presentation::hubs(&gauge.hubs(top)?, out),
Command::Risk => presentation::risk(&gauge.risk()?, out),
Command::Orphans { top, ids } => presentation::orphans(&gauge.orphans(top)?, ids, out),
})
}