use std::io;
use std::io::IsTerminal;
use std::path::PathBuf;
use clap::Parser;
const DEFAULT_FILTER: &str = "warn,liminal_server=info,liminal=info";
#[derive(Debug, Parser)]
struct Cli {
#[arg(long)]
config: PathBuf,
#[command(subcommand)]
command: Option<Command>,
}
#[derive(Debug, clap::Subcommand)]
enum Command {
MigrateParticipantLogs,
CheckpointCensus {
#[arg(long)]
conversation: u64,
#[arg(long)]
store: Option<PathBuf>,
},
}
fn init_tracing() {
let filter = tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(DEFAULT_FILTER));
drop(
tracing_subscriber::fmt()
.with_env_filter(filter)
.with_ansi(io::stderr().is_terminal())
.with_writer(io::stderr)
.try_init(),
);
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
init_tracing();
match cli.command {
None => liminal_server::run(cli.config.as_path())?,
Some(Command::MigrateParticipantLogs) => {
let migration = liminal_server::run_participant_log_migration(cli.config.as_path())?;
for conversation in &migration.conversations {
println!(
"{} {:?}",
conversation.conversation_id, conversation.outcome
);
}
}
Some(Command::CheckpointCensus {
conversation,
store,
}) => {
let census = liminal_server::run_checkpoint_census(
cli.config.as_path(),
conversation,
store.as_deref(),
)?;
for line in census {
println!("{line}");
}
}
}
Ok(())
}