sui_bridge/sui_bridge_watchdog/
eth_bridge_status.rs1use crate::abi::EthSuiBridge::EthSuiBridgeInstance;
7use crate::sui_bridge_watchdog::Observable;
8use crate::utils::EthProvider;
9use alloy::primitives::Address as EthAddress;
10use async_trait::async_trait;
11use prometheus::IntGauge;
12use tokio::time::Duration;
13use tracing::{error, info};
14
15pub struct EthBridgeStatus {
16 bridge_contract: EthSuiBridgeInstance<EthProvider>,
17 metric: IntGauge,
18}
19
20impl EthBridgeStatus {
21 pub fn new(provider: EthProvider, bridge_address: EthAddress, metric: IntGauge) -> Self {
22 let bridge_contract = EthSuiBridgeInstance::new(bridge_address, provider.clone());
23 Self {
24 bridge_contract,
25 metric,
26 }
27 }
28}
29
30#[async_trait]
31impl Observable for EthBridgeStatus {
32 fn name(&self) -> &str {
33 "EthBridgeStatus"
34 }
35
36 async fn observe_and_report(&self) {
37 let status = self.bridge_contract.paused().call().await;
38 match status {
39 Ok(status) => {
40 self.metric.set(status as i64);
41 info!("Eth Bridge Status: {:?}", status);
42 }
43 Err(e) => {
44 error!("Error getting eth bridge status: {:?}", e);
45 }
46 }
47 }
48
49 fn interval(&self) -> Duration {
50 Duration::from_secs(10)
51 }
52}