ops_janus/
lib.rs

1use janus::Statuser;
2use ops_core::{async_trait, CheckResponse, Checker};
3
4const ACTION: &str = "Troubleshoot Janus";
5
6/// Checks a Janus backend is healthy.
7pub struct JanusChecker<S>
8where
9    S: Statuser + Send + Sync,
10{
11    statuser: S,
12    impact: String,
13}
14
15impl<S> JanusChecker<S>
16where
17    S: Statuser + Send + Sync,
18{
19    /// Creates a new Janus health checker
20    pub fn new(statuser: S, impact: &str) -> Self {
21        Self {
22            statuser,
23            impact: impact.to_owned(),
24        }
25    }
26}
27
28#[async_trait]
29impl<S> Checker for JanusChecker<S>
30where
31    S: Statuser + Send + Sync,
32{
33    async fn check(&self) -> CheckResponse {
34        match self.statuser.status() {
35            Ok(_) => CheckResponse::healthy("Janus is reachable"),
36            Err(err) => CheckResponse::unhealthy(
37                &format!("Cannot get Janus status: {}", err),
38                ACTION,
39                &self.impact,
40            ),
41        }
42    }
43}