sui_bridge/sui_bridge_watchdog/
sui_bridge_status.rs1use 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}