darpan 0.2.5

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::core::detector_registry::DetectorRegistry;
use crate::detectors::{ConfigDetector, DockerDetector, PortDetector, ProcessDetector};
use crate::health::{
    health_registry::HealthCheckerRegistry, http::HttpHealthChecker, port::PortHealthChecker,
    process::ProcessHealthChecker, traffic::TrafficBasedHealthChecker,
};
use crate::logs::{
    docker::DockerLogStreamer, file::FileLogStreamer, log_registry::LogStreamerRegistry,
    process::ProcessLogStreamer, systemd::SystemdLogStreamer,
};
use std::time::Duration;

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

/// Build and initialize registries with built-in components
pub struct RegistryBuilder;

impl RegistryBuilder {
    /// Build detector registry with built-in detectors
    pub fn build_detector_registry(
        enabled_detectors: &[String],
        port_range: (u16, u16),
    ) -> DetectorRegistry {
        let mut registry = DetectorRegistry::new();

        // Register built-in detectors
        registry.register("config".to_string(), Box::new(ConfigDetector::new()));
        registry.register(
            "port".to_string(),
            Box::new(PortDetector::new(port_range.0, port_range.1)),
        );
        registry.register("process".to_string(), Box::new(ProcessDetector::new()));
        registry.register("docker".to_string(), Box::new(DockerDetector::new()));

        // Enable requested detectors
        registry.enable(enabled_detectors.to_vec());

        registry
    }

    /// Build health checker registry with built-in checkers
    pub fn build_health_registry(timeout: Duration) -> HealthCheckerRegistry {
        let mut registry = HealthCheckerRegistry::new();

        // Register checkers in priority order
        registry.register(
            "traffic".to_string(),
            Box::new(TrafficBasedHealthChecker::new()),
        );
        registry.register("http".to_string(), Box::new(HttpHealthChecker::new(timeout)));
        registry.register("process".to_string(), Box::new(ProcessHealthChecker::new()));

        #[cfg(feature = "db-health-checks")]
        registry.register(
            "database".to_string(),
            Box::new(DatabaseHealthChecker::new(timeout)),
        );

        // Set default checker
        registry.set_default(Box::new(PortHealthChecker::new(timeout)));

        registry
    }

    /// Build log streamer registry with built-in streamers
    pub fn build_log_registry() -> LogStreamerRegistry {
        let mut registry = LogStreamerRegistry::new();

        // Register streamers in priority order
        registry.register("docker".to_string(), Box::new(DockerLogStreamer::new()));
        registry.register("systemd".to_string(), Box::new(SystemdLogStreamer::new()));
        registry.register("file".to_string(), Box::new(FileLogStreamer::new()));
        registry.register("process".to_string(), Box::new(ProcessLogStreamer::new()));

        registry
    }
}