server-watchdog 0.1.2

A server monitoring and remote control tool via messenger.
Documentation
use log::{debug, error, info};
use reqwest::Client;
use crate::domain::server::{health::Health, Server};

pub struct HttpServerClient {
    client: Client
}

impl HttpServerClient {
    pub fn new() -> Self {
        Self {
            client: Client::new()
        }
    }
}

impl HttpServerClient {

    pub async fn kill(&self, server: &Server) -> bool {

        let kill_url = match server.get_kill_url() {
            Some(value) => value,
            None => return false
        };

        let client = self.client.clone();

        if let Err(e) = client.get(kill_url).send().await {
            error!("[HttpWatchdog] Err: Kill request failed {}", e);
            false
        } else {
            info!("[HttpWatchdog] Info: Kill signal sent successfully");
            true
        }
    }

    pub async fn healthcheck(&self, server: &Server) -> Health {
        let health_check_url = match server.get_health_check_url() {
            Some(value) => value,
            None => return Health::Unknown(String::from("Healthcheck path is undefined"))
        };

        debug!("Health check url: {}", health_check_url);
        let response = self.client
            .get(health_check_url)
            .send()
            .await;

        match response {
            Ok(res) => {
                if res.status().is_success() {
                    Health::Healthy
                } else if res.status().is_server_error() {
                    Health::Unhealthy
                } else {
                    Health::Degraded
                }
            }
            Err(e) => {
                if e.is_timeout() {
                    Health::Unhealthy
                } else {
                    Health::Down
                }
            }
        }
    }
}