@@ -42,6 +42,7 @@ use std::pin::Pin;
42
42
use std:: sync:: Arc ;
43
43
use std:: time:: Instant ;
44
44
45
+ use crate :: adapter:: ProviderStatus ;
45
46
use crate :: chain:: BlockFinality ;
46
47
use crate :: {
47
48
adapter:: {
@@ -820,29 +821,56 @@ impl EthereumAdapterTrait for EthereumAdapter {
820
821
let logger = self . logger . clone ( ) ;
821
822
822
823
let web3 = self . web3 . clone ( ) ;
824
+ let metrics = self . metrics . clone ( ) ;
825
+ let provider = self . provider ( ) . to_string ( ) ;
823
826
let net_version_future = retry ( "net_version RPC call" , & logger)
824
827
. no_limit ( )
825
828
. timeout_secs ( 20 )
826
829
. run ( move || {
827
830
let web3 = web3. cheap_clone ( ) ;
828
- async move { web3. net ( ) . version ( ) . await . map_err ( Into :: into) }
831
+ let metrics = metrics. cheap_clone ( ) ;
832
+ let provider = provider. clone ( ) ;
833
+ async move {
834
+ web3. net ( ) . version ( ) . await . map_err ( |e| {
835
+ metrics. set_status ( ProviderStatus :: VersionFail , & provider) ;
836
+ e. into ( )
837
+ } )
838
+ }
839
+ } )
840
+ . map_err ( |e| {
841
+ self . metrics
842
+ . set_status ( ProviderStatus :: VersionTimeout , self . provider ( ) ) ;
843
+ e
829
844
} )
830
845
. boxed ( ) ;
831
846
832
847
let web3 = self . web3 . clone ( ) ;
848
+ let metrics = self . metrics . clone ( ) ;
849
+ let provider = self . provider ( ) . to_string ( ) ;
833
850
let gen_block_hash_future = retry ( "eth_getBlockByNumber(0, false) RPC call" , & logger)
834
851
. no_limit ( )
835
852
. timeout_secs ( 30 )
836
853
. run ( move || {
837
854
let web3 = web3. cheap_clone ( ) ;
855
+ let metrics = metrics. cheap_clone ( ) ;
856
+ let provider = provider. clone ( ) ;
838
857
async move {
839
858
web3. eth ( )
840
859
. block ( BlockId :: Number ( Web3BlockNumber :: Number ( 0 . into ( ) ) ) )
841
- . await ?
860
+ . await
861
+ . map_err ( |e| {
862
+ metrics. set_status ( ProviderStatus :: GenesisFail , & provider) ;
863
+ e
864
+ } ) ?
842
865
. map ( |gen_block| gen_block. hash . map ( BlockHash :: from) )
843
866
. flatten ( )
844
867
. ok_or_else ( || anyhow ! ( "Ethereum node could not find genesis block" ) )
845
868
}
869
+ } )
870
+ . map_err ( |e| {
871
+ self . metrics
872
+ . set_status ( ProviderStatus :: GenesisTimeout , self . provider ( ) ) ;
873
+ e
846
874
} ) ;
847
875
848
876
let ( net_version, genesis_block_hash) =
@@ -858,6 +886,8 @@ impl EthereumAdapterTrait for EthereumAdapter {
858
886
genesis_block_hash,
859
887
} ;
860
888
889
+ self . metrics
890
+ . set_status ( ProviderStatus :: Working , self . provider ( ) ) ;
861
891
Ok ( ident)
862
892
}
863
893
0 commit comments