99 lines
3.4 KiB
Rust
99 lines
3.4 KiB
Rust
|
|
//! # 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");
|
||
|
|
}
|