High-performance implementation of plcbundle written in Rust
at main 58 lines 1.9 kB view raw
1// Debug handlers 2 3use crate::server::ServerState; 4use crate::server::error::not_found; 5use axum::{ 6 extract::State, 7 http::{HeaderMap, HeaderValue, StatusCode}, 8 response::IntoResponse, 9}; 10use serde_json::json; 11use std::sync::Arc; 12 13pub async fn handle_debug_memory(State(state): State<ServerState>) -> impl IntoResponse { 14 // Get DID index stats for memory info (avoid holding lock in async context) 15 let did_stats = tokio::task::spawn_blocking({ 16 let manager = Arc::clone(&state.manager); 17 move || manager.get_did_index_stats() 18 }) 19 .await 20 .unwrap_or_default(); 21 22 let cached_shards = did_stats 23 .get("cached_shards") 24 .and_then(|v| v.as_i64()) 25 .unwrap_or(0); 26 let cache_limit = did_stats 27 .get("cache_limit") 28 .and_then(|v| v.as_i64()) 29 .unwrap_or(0); 30 31 let response = format!( 32 "Memory Stats:\n (Not fully implemented - using sysinfo would require additional dependency)\n\nDID Index:\n Cached shards: {}/{}\n", 33 cached_shards, cache_limit 34 ); 35 let mut headers = HeaderMap::new(); 36 headers.insert("Content-Type", HeaderValue::from_static("text/plain")); 37 (StatusCode::OK, headers, response) 38} 39 40pub async fn handle_debug_didindex(State(state): State<ServerState>) -> impl IntoResponse { 41 // Avoid holding lock in async context 42 let stats = tokio::task::spawn_blocking({ 43 let manager = Arc::clone(&state.manager); 44 move || manager.get_did_index_stats() 45 }) 46 .await 47 .unwrap_or_default(); 48 (StatusCode::OK, axum::Json(json!(stats))).into_response() 49} 50 51pub async fn handle_debug_resolver(State(state): State<ServerState>) -> impl IntoResponse { 52 if !state.config.enable_resolver { 53 return not_found("Resolver not enabled").into_response(); 54 } 55 56 let resolver_stats = state.manager.get_resolver_stats(); 57 (StatusCode::OK, axum::Json(json!(resolver_stats))).into_response() 58}