22from typing import Any , Callable , Set , cast
33from urllib .parse import urlparse
44
5- from metrics .metrics import ETH_RPC_REQUESTS , ETH_RPC_REQUESTS_DURATION
5+ from metrics .metrics import ETH_RPC_REQUESTS_DURATION
6+ from prometheus_client import Counter
67from requests import HTTPError , Response
78from web3 import Web3
89from web3 .middleware import construct_simple_cache_middleware
1112logger = logging .getLogger (__name__ )
1213
1314
14- def add_requests_metric_middleware (web3 : Web3 ) -> Web3 :
15+ def add_requests_metric_middleware (web3 : Web3 , rpc_metric : Counter ) -> Web3 :
1516 """
1617 Works correctly with MultiProvider and vanilla Providers.
1718
@@ -28,7 +29,7 @@ def middleware(method: RPCEndpoint, params: Any) -> RPCResponse:
2829 response = make_request (method , params )
2930 except HTTPError as ex :
3031 failed : Response = ex .response
31- ETH_RPC_REQUESTS .labels (
32+ rpc_metric .labels (
3233 method = method ,
3334 code = failed .status_code ,
3435 domain = urlparse (web3 .provider .endpoint_uri ).netloc , # pyright: ignore
@@ -42,7 +43,7 @@ def middleware(method: RPCEndpoint, params: Any) -> RPCResponse:
4243 if isinstance (error , dict ):
4344 code = error .get ('code' ) or code
4445
45- ETH_RPC_REQUESTS .labels (
46+ rpc_metric .labels (
4647 method = method ,
4748 code = code ,
4849 domain = urlparse (web3 .provider .endpoint_uri ).netloc , # pyright: ignore
@@ -70,12 +71,12 @@ def add_cache_middleware(web3: Web3) -> Web3:
7071 return web3
7172
7273
73- def add_middlewares (web3 : Web3 ) -> Web3 :
74+ def add_middlewares (web3 : Web3 , rpc_metric : Counter ) -> Web3 :
7475 """
7576 Cache middleware should go first to avoid rewriting metrics for cached requests.
7677 If middleware has level = 0, the middleware will be appended to the end of the middleware list.
7778 So we need [..., cache, other middlewares]
7879 """
7980 add_cache_middleware (web3 )
80- add_requests_metric_middleware (web3 )
81+ add_requests_metric_middleware (web3 , rpc_metric )
8182 return web3
0 commit comments