44from helpers import strip_url , check_protocol , generate_labels_from_metadata
55from collectors .ws import websocket_collector
66from websockets .exceptions import WebSocketException
7+ from metrics_processor import results
78
89
910class evm_collector ():
@@ -12,9 +13,7 @@ def __init__(self, rpc_metadata):
1213 self .url = rpc_metadata ['url' ]
1314 if check_protocol (rpc_metadata ['url' ], "wss" ) or check_protocol (rpc_metadata ['url' ], 'ws' ):
1415 self .client = Web3 (Web3 .WebsocketProvider (self .url , websocket_timeout = cfg .response_timeout ))
15-
1616 self .labels , self .labels_values = generate_labels_from_metadata (rpc_metadata )
17-
1817 self .ws_collector = websocket_collector (self .url ,
1918 sub_payload = {
2019 "method" : "eth_subscribe" ,
@@ -24,35 +23,34 @@ def __init__(self, rpc_metadata):
2423 })
2524 self .ws_collector .setDaemon (True )
2625 self .ws_collector .start ()
26+
2727 else :
2828 logger .error ("Please provide wss/ws endpoint for {}" .format (strip_url (self .url )))
2929 exit (1 )
3030
31- def probe (self , metrics ):
31+ def probe (self ) -> results :
32+ results .register (self .url , self .labels_values )
3233 try :
3334 if self .client .isConnected ():
34- metrics ['brpc_health' ].add_metric (self .labels_values , True )
35- metrics ['brpc_head_count' ].add_metric (self .labels_values , self .ws_collector .message_counter )
36- metrics ['brpc_disconnects' ].add_metric (self .labels_values , self .ws_collector .disconnects_counter )
37- metrics ['brpc_latency' ].add_metric (self .labels_values , self .ws_collector .get_latency ())
38- metrics ['brpc_block_height' ].add_metric (self .labels_values , self .client .eth .block_number )
39- metrics ['brpc_total_difficulty' ].add_metric (self .labels_values ,
40- self .client .eth .get_block ('latest' )['totalDifficulty' ])
41- metrics ['brpc_difficulty' ].add_metric (self .labels_values ,
42- self .client .eth .get_block ('latest' )['difficulty' ])
43- metrics ['brpc_gas_price' ].add_metric (self .labels_values , self .client .eth .gas_price )
44- metrics ['brpc_max_priority_fee' ].add_metric (self .labels_values , self .client .eth .max_priority_fee )
45- metrics ['brpc_client_version' ].add_metric (self .labels_values ,
46- value = {"client_version" : self .client .clientVersion })
35+ results .record_health (self .url , True )
36+ results .record_head_count (self .url , self .ws_collector .message_counter )
37+ results .record_disconnects (self .url , self .ws_collector .disconnects_counter )
38+ results .record_latency (self .url , self .ws_collector .get_latency ())
39+ results .record_block_height (self .url , self .client .eth .block_number )
40+ results .record_total_difficulty (self .url , self .client .eth .get_block ('latest' )['totalDifficulty' ])
41+ results .record_difficulty (self .url , self .client .eth .get_block ('latest' )['difficulty' ])
42+ results .record_gas_price (self .url , self .client .eth .gas_price )
43+ results .record_max_priority_fee (self .url , self .client .eth .max_priority_fee )
44+ results .record_client_version (self .url , self .client .clientVersion )
4745 else :
4846 logger .info ("Client is not connected to {}" .format (strip_url (self .url )))
49- metrics [ 'brpc_health' ]. add_metric (self .labels_values , False )
47+ results . record_health (self .url , False )
5048 except asyncio .exceptions .TimeoutError as exc :
5149 logger .info ("Client timed out for {}: {}" .format (strip_url (self .url ), exc ))
52- metrics [ 'brpc_health' ]. add_metric (self .labels_values , False )
50+ results . record_health (self .url , False )
5351 except WebSocketException as exc :
5452 logger .info ("Websocket client exception {}: {}" .format (strip_url (self .url ), exc ))
55- metrics [ 'brpc_health' ]. add_metric (self .labels_values , False )
53+ results . record_health (self .url , False )
5654 except Exception as exc :
5755 logger .error ("Failed probing {} with error: {}" .format (strip_url (self .url ), exc ))
58- metrics [ 'brpc_health' ]. add_metric (self .labels_values , False )
56+ results . record_health (self .url , False )
0 commit comments