From bc64afcb05896f9816f5311c95ffe8e9498cde06 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Thu, 26 Mar 2026 22:43:54 +0400 Subject: [PATCH] Add request tracing, debug /v1/keys/list endpoint - TraceLayer logs every HTTP request (method, path, status, duration) - Default log level info, tower_http=debug (no RUST_LOG needed) - GET /v1/keys/list shows all registered fingerprints - Helps debug key registration and lookup issues Co-Authored-By: Claude Opus 4.6 (1M context) --- warzone/crates/warzone-server/src/main.rs | 8 +++++++- warzone/crates/warzone-server/src/routes/keys.rs | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/warzone/crates/warzone-server/src/main.rs b/warzone/crates/warzone-server/src/main.rs index c142b46..3c98027 100644 --- a/warzone/crates/warzone-server/src/main.rs +++ b/warzone/crates/warzone-server/src/main.rs @@ -20,7 +20,12 @@ struct Cli { #[tokio::main] async fn main() -> anyhow::Result<()> { - tracing_subscriber::fmt::init(); + tracing_subscriber::fmt() + .with_env_filter( + tracing_subscriber::EnvFilter::try_from_default_env() + .unwrap_or_else(|_| "info,tower_http=debug".parse().unwrap()), + ) + .init(); let cli = Cli::parse(); tracing::info!("Warzone server starting on {}", cli.bind); @@ -30,6 +35,7 @@ async fn main() -> anyhow::Result<()> { let app = axum::Router::new() .merge(routes::web_router()) .nest("/v1", routes::router()) + .layer(tower_http::trace::TraceLayer::new_for_http()) .with_state(state); let listener = tokio::net::TcpListener::bind(&cli.bind).await?; diff --git a/warzone/crates/warzone-server/src/routes/keys.rs b/warzone/crates/warzone-server/src/routes/keys.rs index 6b8882a..44a404f 100644 --- a/warzone/crates/warzone-server/src/routes/keys.rs +++ b/warzone/crates/warzone-server/src/routes/keys.rs @@ -10,9 +10,25 @@ use crate::state::AppState; pub fn routes() -> Router { Router::new() .route("/keys/register", post(register_keys)) + .route("/keys/list", get(list_keys)) .route("/keys/{fingerprint}", get(get_bundle)) } +/// Debug endpoint: list all registered fingerprints. +async fn list_keys(State(state): State) -> Json { + let keys: Vec = state + .db + .keys + .iter() + .filter_map(|item| { + item.ok() + .and_then(|(k, _)| String::from_utf8(k.to_vec()).ok()) + }) + .collect(); + tracing::info!("Listed {} registered keys", keys.len()); + Json(serde_json::json!({ "keys": keys, "count": keys.len() })) +} + /// Normalize fingerprint: strip colons, lowercase. fn normalize_fp(fp: &str) -> String { fp.chars()