sui_bridge/sui_bridge_watchdog/
sui_bridge_status.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! The SuiBridgeStatus observable monitors whether the Sui Bridge is paused.
5
6use crate::sui_bridge_watchdog::Observable;
7use crate::sui_client::SuiBridgeClient;
8use async_trait::async_trait;
9use prometheus::IntGauge;
10use std::sync::Arc;
11
12use tokio::time::Duration;
13use tracing::{error, info};
14
15pub struct SuiBridgeStatus {
16    sui_client: Arc<SuiBridgeClient>,
17    metric: IntGauge,
18}
19
20impl SuiBridgeStatus {
21    pub fn new(sui_client: Arc<SuiBridgeClient>, metric: IntGauge) -> Self {
22        Self { sui_client, metric }
23    }
24}
25
26#[async_trait]
27impl Observable for SuiBridgeStatus {
28    fn name(&self) -> &str {
29        "SuiBridgeStatus"
30    }
31
32    async fn observe_and_report(&self) {
33        let status = self.sui_client.is_bridge_paused().await;
34        match status {
35            Ok(status) => {
36                self.metric.set(status as i64);
37                info!("Sui Bridge Status: {:?}", status);
38            }
39            Err(e) => {
40                error!("Error getting sui bridge status: {:?}", e);
41            }
42        }
43    }
44
45    fn interval(&self) -> Duration {
46        Duration::from_secs(10)
47    }
48}