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) <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,12 @@ struct Cli {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> anyhow::Result<()> {
|
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();
|
let cli = Cli::parse();
|
||||||
tracing::info!("Warzone server starting on {}", cli.bind);
|
tracing::info!("Warzone server starting on {}", cli.bind);
|
||||||
@@ -30,6 +35,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
let app = axum::Router::new()
|
let app = axum::Router::new()
|
||||||
.merge(routes::web_router())
|
.merge(routes::web_router())
|
||||||
.nest("/v1", routes::router())
|
.nest("/v1", routes::router())
|
||||||
|
.layer(tower_http::trace::TraceLayer::new_for_http())
|
||||||
.with_state(state);
|
.with_state(state);
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind(&cli.bind).await?;
|
let listener = tokio::net::TcpListener::bind(&cli.bind).await?;
|
||||||
|
|||||||
@@ -10,9 +10,25 @@ use crate::state::AppState;
|
|||||||
pub fn routes() -> Router<AppState> {
|
pub fn routes() -> Router<AppState> {
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/keys/register", post(register_keys))
|
.route("/keys/register", post(register_keys))
|
||||||
|
.route("/keys/list", get(list_keys))
|
||||||
.route("/keys/{fingerprint}", get(get_bundle))
|
.route("/keys/{fingerprint}", get(get_bundle))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Debug endpoint: list all registered fingerprints.
|
||||||
|
async fn list_keys(State(state): State<AppState>) -> Json<serde_json::Value> {
|
||||||
|
let keys: Vec<String> = 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.
|
/// Normalize fingerprint: strip colons, lowercase.
|
||||||
fn normalize_fp(fp: &str) -> String {
|
fn normalize_fp(fp: &str) -> String {
|
||||||
fp.chars()
|
fp.chars()
|
||||||
|
|||||||
Reference in New Issue
Block a user