//! Templates for the platform-health status page (`/health`). use std::sync::Arc; use askama::Template; use crate::auth::SessionUser; use super::super::CsrfTokenOption; /// Test result for health page display. #[derive(Clone)] pub struct HealthTest { pub name: String, pub passed: bool, pub latency_ms: u64, } /// Pre-formatted health snapshot for template rendering. #[derive(Clone)] pub struct PrivacyJobDisplay { pub name: String, pub description: String, pub last_ran: String, pub rows_affected: String, pub status_class: String, } /// Pre-formatted health check snapshot for template rendering. pub struct HealthSnapshotDisplay { pub checked_at: String, pub status: String, pub status_class: String, pub duration_ms: i32, } /// Pre-formatted PoM snapshot for template rendering. #[derive(Clone)] pub struct PomSnapshotDisplay { pub checked_at: String, pub status: String, pub status_class: String, pub response_time_ms: i64, } /// Pre-formatted PoM incident for template rendering. #[derive(Clone)] pub struct PomIncidentDisplay { pub to_status: String, pub started_at: String, pub duration: String, } /// Public page: platform health status and monitoring dashboard. #[derive(Template)] #[template(path = "pages/health.html")] pub struct HealthTemplate { pub csrf_token: CsrfTokenOption, pub session_user: Option, // Overall status pub overall_status: String, pub overall_status_class: String, pub uptime: String, pub version: String, pub check_duration_ms: u64, // Database pub db_status: String, pub db_status_class: String, pub db_pool_size: String, pub db_pool_max: String, pub db_pool_utilization: String, pub db_active_connections: String, pub user_count: String, pub project_count: String, pub item_count: String, pub transaction_count: String, pub blog_post_count: String, // Sessions pub session_status: String, pub session_status_class: String, pub active_sessions: String, // Storage pub storage_status: String, pub storage_status_class: String, pub storage_configured: bool, pub storage_bucket: String, pub storage_region: String, // Stripe pub stripe_status: String, pub stripe_status_class: String, pub stripe_configured: bool, pub stripe_mode: String, pub connected_creators: String, // Email pub email_status: String, pub email_status_class: String, pub email_provider: String, // SyncKit pub synckit_status: String, pub synckit_status_class: String, pub synckit_configured: bool, pub synckit_app_count: String, pub synckit_device_count: String, pub synckit_log_entries: String, // Security & Monitoring pub admin_status: String, // Background monitor pub monitor_enabled: bool, pub monitor_interval_secs: u64, pub alerts_configured: bool, pub uptime_24h: Option, pub uptime_7d: Option, pub last_incident: Option, pub recent_snapshots: Vec, // Server pub environment: String, pub host: Arc, pub started_at: String, // Privacy & Compliance pub privacy_jobs: Vec, // Tests pub public_tests: Vec, pub db_tests: Vec, pub generated_at: String, // External monitoring (PoM) pub pom_available: bool, pub pom_status: Option, pub pom_status_class: Option, pub pom_response_time_ms: Option, pub pom_checked_at: Option, pub pom_uptime_24h: Option, pub pom_uptime_7d: Option, pub pom_recent: Vec, pub pom_avg_latency: Option, pub pom_p95_latency: Option, pub pom_incident_active: bool, pub pom_incident_status: Option, pub pom_incident_since: Option, pub pom_recent_incidents: Vec, // External monitoring (PoM) — route checks pub pom_routes_total: usize, pub pom_routes_ok: usize, pub pom_routes_failed: Vec, }