11from settings import cfg , logger
22from web3 import Web3
33import asyncio
4- from helpers import strip_url , validate_protocol , generate_labels_from_metadata
4+ from helpers import strip_url , check_protocol , generate_labels_from_metadata
55from collectors .ws import websocket_collector
66from websockets .exceptions import WebSocketException
77
88
99class evm_collector ():
1010
1111 def __init__ (self , rpc_metadata ):
12- validate_protocol (rpc_metadata ['url' ], "wss" )
1312 self .url = rpc_metadata ['url' ]
14- self .client = Web3 (Web3 .WebsocketProvider (self .url , websocket_timeout = cfg .response_timeout ))
15-
16- self .labels , self .labels_values = generate_labels_from_metadata (rpc_metadata )
17-
18- self .ws_collector = websocket_collector (self .url ,
19- sub_payload = {
20- "method" : "eth_subscribe" ,
21- "jsonrpc" : "2.0" ,
22- "id" : rpc_metadata ['chain_id' ],
23- "params" : ["newHeads" ]
24- })
25- self .net_peer_enabled = True
26- self .ws_collector .setDaemon (True )
27- self .ws_collector .start ()
13+ if check_protocol (rpc_metadata ['url' ], "wss" ) or check_protocol (rpc_metadata ['url' ], 'ws' ):
14+ self .client = Web3 (Web3 .WebsocketProvider (self .url , websocket_timeout = cfg .response_timeout ))
15+
16+ self .labels , self .labels_values = generate_labels_from_metadata (rpc_metadata )
17+
18+ self .ws_collector = websocket_collector (self .url ,
19+ sub_payload = {
20+ "method" : "eth_subscribe" ,
21+ "jsonrpc" : "2.0" ,
22+ "id" : rpc_metadata ['chain_id' ],
23+ "params" : ["newHeads" ]
24+ })
25+ self .ws_collector .setDaemon (True )
26+ self .ws_collector .start ()
27+ else :
28+ logger .error ("Please provide wss/ws endpoint for {}" .format (strip_url (self .url )))
29+ exit (1 )
2830
2931 def probe (self , metrics ):
3032 try :
@@ -35,21 +37,13 @@ def probe(self, metrics):
3537 metrics ['brpc_latency' ].add_metric (self .labels_values , self .ws_collector .get_latency ())
3638 metrics ['brpc_block_height' ].add_metric (self .labels_values , self .client .eth .block_number )
3739 metrics ['brpc_total_difficulty' ].add_metric (self .labels_values ,
38- self .client .eth .get_block ('latest' )['totalDifficulty' ])
40+ self .client .eth .get_block ('latest' )['totalDifficulty' ])
3941 metrics ['brpc_difficulty' ].add_metric (self .labels_values ,
40- self .client .eth .get_block ('latest' )['difficulty' ])
41-
42- try :
43- if self .net_peer_enabled :
44- metrics ['brpc_net_peer_count' ].add_metric (self .labels_values , self .client .net .peer_count )
45- except ValueError :
46- logger .error (
47- "Net peer function is not supported for this chain, the collector will ignore this from this point on."
48- )
49- self .net_peer_enabled = False
50-
42+ self .client .eth .get_block ('latest' )['difficulty' ])
5143 metrics ['brpc_gas_price' ].add_metric (self .labels_values , self .client .eth .gas_price )
5244 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 })
5347 else :
5448 logger .info ("Client is not connected to {}" .format (strip_url (self .url )))
5549 metrics ['brpc_health' ].add_metric (self .labels_values , False )
0 commit comments