use std::path::PathBuf;
use std::process::ExitCode;
use clap::Parser;
use jammi_db::config::JammiConfig;
use jammi_server::runtime::OssServer;
use jammi_server::telemetry::init_tracing;
#[derive(Parser)]
#[command(
name = "jammi-server",
version,
about = "OSS Jammi server: Arrow Flight SQL, CatalogService, TriggerService, and /healthz /readyz /metrics"
)]
struct Cli {
#[arg(long)]
config: Option<PathBuf>,
}
#[tokio::main]
async fn main() -> ExitCode {
let cli = Cli::parse();
let config = match JammiConfig::load(cli.config.as_deref()) {
Ok(cfg) => cfg,
Err(e) => {
eprintln!("jammi-server: failed to load config: {e}");
return ExitCode::FAILURE;
}
};
init_tracing(&config);
let server = match OssServer::new(config).await {
Ok(s) => s,
Err(e) => {
tracing::error!(error = %e, "failed to construct OSS server");
return ExitCode::FAILURE;
}
};
let bound = match server.bind().await {
Ok(b) => b,
Err(e) => {
tracing::error!(error = %e, "failed to bind OSS server listeners");
return ExitCode::FAILURE;
}
};
println!(
"jammi-server listening flight={} health={}",
bound.flight_addr(),
bound.health_addr()
);
if let Err(e) = bound.serve().await {
tracing::error!(error = %e, "OSS server exited with error");
return ExitCode::FAILURE;
}
ExitCode::SUCCESS
}