hellcheck 0.1.2

HTTP health checker
Documentation
use hyper::Uri;
use std::time::Duration;

#[derive(Debug, Clone)]
pub struct FileConfig {
    pub checkers: Vec<CheckerConfig>,
    pub notifiers: Vec<Notifier>,
}

#[derive(Debug, Clone)]
pub struct CheckerConfig {
    pub id: String,
    pub url: Uri,
    pub basic_auth: Option<BasicAuth>,
    pub interval: Duration,
    pub notifiers: Vec<String>,
}

#[derive(Debug, Clone)]
pub struct BasicAuth {
    pub username: String,
    pub password: String,
}

#[derive(Debug, Clone)]
pub struct Notifier {
    pub id: String,
    pub config: NotifierConfig,
}

#[derive(Debug, Clone)]
pub enum NotifierConfig {
    Telegram(TelegramNotifierConfig),
    Command(CommandNotifierConfig),
    Hipchat(HipchatNotifierConfig),
    Slack(SlackNotifierConfig),
}

#[derive(Debug, Clone)]
pub struct TelegramNotifierConfig {
    pub token: String,
    pub chat_id: String,
}

#[derive(Debug, Clone)]
pub struct HipchatNotifierConfig {
    pub base_url: Uri,
    pub token: String,
    pub room_id: String,
}

#[derive(Debug, Clone)]
pub struct SlackNotifierConfig {
    pub webhook_url: Uri,
}

#[derive(Debug, Clone)]
pub struct CommandNotifierConfig {
    pub command: String,
    pub arguments: Vec<String>,
}

impl FileConfig {
    pub fn get_checker_by_id(&self, id: &str) -> Option<CheckerConfig> {
        self.checkers.iter().find(|c| c.id == id).cloned()
    }

    pub fn get_notifier_by_id(&self, id: &str) -> Option<Notifier> {
        self.notifiers.iter().find(|n| n.id == id).cloned()
    }
}