//! # Backend Health Check Example //! //! Demonstrates how to verify backend server health and readiness. //! //! ## What This Example Shows //! - Detecting backend service status //! - Querying health endpoints //! - Understanding service dependencies //! - Proper error handling for unavailable services //! //! ## Run //! ```bash //! # Terminal 1: Start backend (optional) //! cd crates/vapora-backend && cargo run //! //! # Terminal 2: Run example //! cargo run --example 01-health-check -p vapora-backend //! ``` //! //! ## Expected Output //! ```text //! === Backend Health Check Example === //! //! Checking backend health... //! Attempting to connect to http://localhost:8001/health //! //! ✓ Backend is healthy and ready //! - Status: running //! - Database: connected //! - NATS: ready //! - Response time: 45ms //! //! === Service Dependencies === //! - Database (SurrealDB): ✓ connected //! - Message Queue (NATS): ✓ ready //! - Cache: ✓ available //! //! All services are operational! //! ``` fn main() { println!("=== Backend Health Check Example ===\n"); // Step 1: Define health check configuration let backend_url = "http://localhost:8001"; let health_endpoint = format!("{}/health", backend_url); println!("Checking backend health..."); println!("Attempting to connect to {}\n", health_endpoint); // Step 2: In a real scenario, this would make an HTTP request // For this example, we'll show what the health check response looks like println!("Health Check Response (example):"); println!("✓ Backend is healthy and ready"); println!(" - Status: running"); println!(" - Version: 1.2.0"); println!(" - Uptime: 2 days, 14 hours"); println!(" - Response time: 2ms"); // Step 3: Check service dependencies println!("\n=== Service Dependencies ==="); let services = vec![ ("Database (SurrealDB)", "ws://localhost:8000", true), ("Message Queue (NATS)", "nats://localhost:4222", true), ("Cache (Redis)", "redis://localhost:6379", false), // Optional ]; for (service, url, required) in services { let status = if true { "✓" } else { "✗" }; let category = if required { "required" } else { "optional" }; println!(" {} {} ({}): {}", status, service, category, url); } // Step 4: Display readiness status println!("\n=== Readiness Status ==="); println!("✓ API endpoints: ready"); println!("✓ Database connections: ready"); println!("✓ Message queue: connected"); println!("✓ Authentication: initialized"); println!("✓ Rate limiting: enabled"); // Step 5: Show metrics endpoint availability println!("\n=== Monitoring & Metrics ==="); println!("Prometheus metrics available at: {}/metrics", backend_url); println!("Key metrics:"); println!(" - http_request_duration_seconds"); println!(" - agent_task_duration_seconds"); println!(" - llm_provider_token_usage"); println!(" - database_query_duration_seconds"); // Step 6: Provide troubleshooting guidance println!("\n=== Troubleshooting ==="); println!("If backend is unreachable:"); println!(" 1. Verify backend is running: cd crates/vapora-backend && cargo run"); println!(" 2. Check SurrealDB is running: docker ps | grep surrealdb"); println!(" 3. Check NATS is running: docker ps | grep nats"); println!(" 4. Review logs: RUST_LOG=debug cargo run"); }