darpan 0.1.0

Linux developer service monitoring utility with auto-detection, real-time health checks, and interactive TUI for databases, APIs, Docker containers, and more
Documentation
use crate::health::{HealthCheckerTrait, http::HttpHealthChecker, port::PortHealthChecker, process::ProcessHealthChecker};
use crate::models::{HealthResult, Service};
use std::time::Duration;

#[cfg(feature = "db-health-checks")]
use crate::health::database::DatabaseHealthChecker;

pub struct HealthChecker {
    checkers: Vec<Box<dyn HealthCheckerTrait>>,
    default_checker: PortHealthChecker,
}

impl HealthChecker {
    pub fn new(timeout: Duration, _retry_count: u32) -> Self {
        let mut checkers: Vec<Box<dyn HealthCheckerTrait>> = Vec::new();
        
        // Add all health checkers
        checkers.push(Box::new(HttpHealthChecker::new(timeout)));
        checkers.push(Box::new(ProcessHealthChecker::new()));
        
        #[cfg(feature = "db-health-checks")]
        checkers.push(Box::new(DatabaseHealthChecker::new(timeout)));
        
        Self {
            checkers,
            default_checker: PortHealthChecker::new(timeout),
        }
    }

    pub async fn check(&self, service: &Service) -> HealthResult {
        // Find a suitable checker
        for checker in &self.checkers {
            if checker.supports(service) {
                return checker.check(service).await;
            }
        }
        
        // Fall back to port check
        self.default_checker.check(service).await
    }
}