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;
pub struct RegistryBuilder;
impl RegistryBuilder {
pub fn build_detector_registry(
enabled_detectors: &[String],
port_range: (u16, u16),
) -> DetectorRegistry {
let mut registry = DetectorRegistry::new();
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()));
registry.enable(enabled_detectors.to_vec());
registry
}
pub fn build_health_registry(timeout: Duration) -> HealthCheckerRegistry {
let mut registry = HealthCheckerRegistry::new();
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)),
);
registry.set_default(Box::new(PortHealthChecker::new(timeout)));
registry
}
pub fn build_log_registry() -> LogStreamerRegistry {
let mut registry = LogStreamerRegistry::new();
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
}
}