1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use janus::Statuser;
use ops_core::{async_trait, CheckResponse, Checker};

const ACTION: &str = "Troubleshoot Janus";

/// Checks a Janus backend is healthy.
pub struct JanusChecker<S>
where
    S: Statuser + Send + Sync,
{
    statuser: S,
    impact: String,
}

impl<S> JanusChecker<S>
where
    S: Statuser + Send + Sync,
{
    /// Creates a new Janus health checker
    pub fn new(statuser: S, impact: &str) -> Self {
        Self {
            statuser,
            impact: impact.to_owned(),
        }
    }
}

#[async_trait]
impl<S> Checker for JanusChecker<S>
where
    S: Statuser + Send + Sync,
{
    async fn check(&self) -> CheckResponse {
        match self.statuser.status() {
            Ok(_) => CheckResponse::healthy("Janus is reachable"),
            Err(err) => CheckResponse::unhealthy(
                &format!("Cannot get Janus status: {}", err),
                ACTION,
                &self.impact,
            ),
        }
    }
}