Skip to content

Commit 28d4093

Browse files
authored
Merge pull request #299 from lidofinance/develop
Release
2 parents d2268ba + f250853 commit 28d4093

File tree

9 files changed

+29
-16
lines changed

9 files changed

+29
-16
lines changed

src/blockchain/web3_extentions/middleware.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from typing import Any, Callable, Set, cast
33
from 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
67
from requests import HTTPError, Response
78
from web3 import Web3
89
from web3.middleware import construct_simple_cache_middleware
@@ -11,7 +12,7 @@
1112
logger = 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

src/bots/depositor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def __init__(
8484

8585
self._onchain_transport_w3 = None
8686
if TransportType.ONCHAIN_TRANSPORT in variables.MESSAGE_TRANSPORTS:
87-
self._onchain_transport_w3 = OnchainTransportProvider.create_ochain_transport_w3()
87+
self._onchain_transport_w3 = OnchainTransportProvider.create_onchain_transport_w3()
8888
transports.append(
8989
OnchainTransportProvider(
9090
w3=self._onchain_transport_w3,

src/bots/pauser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def __init__(self, w3: Web3):
5050
if TransportType.ONCHAIN_TRANSPORT in variables.MESSAGE_TRANSPORTS:
5151
transports.append(
5252
OnchainTransportProvider(
53-
w3=OnchainTransportProvider.create_ochain_transport_w3(),
53+
w3=OnchainTransportProvider.create_onchain_transport_w3(),
5454
onchain_address=variables.ONCHAIN_TRANSPORT_ADDRESS,
5555
message_schema=Schema(Or(PauseMessageSchema, PingMessageSchema)),
5656
parsers_providers=[PauseV2Parser, PauseV3Parser, PingParser],

src/bots/unvetter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def prepare_transport_bus(self):
5555
if TransportType.ONCHAIN_TRANSPORT in variables.MESSAGE_TRANSPORTS:
5656
transports.append(
5757
OnchainTransportProvider(
58-
w3=OnchainTransportProvider.create_ochain_transport_w3(),
58+
w3=OnchainTransportProvider.create_onchain_transport_w3(),
5959
onchain_address=variables.ONCHAIN_TRANSPORT_ADDRESS,
6060
message_schema=Schema(Or(UnvetMessageSchema, PingMessageSchema)),
6161
parsers_providers=[UnvetParser, PingParser],

src/main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from bots.unvetter import run_unvetter
1212
from metrics.healthcheck_pulse import start_pulse_server
1313
from metrics.logging import logging
14+
from metrics.metrics import ETH_RPC_REQUESTS
1415
from prometheus_client import start_http_server
1516
from web3_multi_provider import FallbackProvider
1617

@@ -49,7 +50,7 @@ def main(bot_name: str):
4950
)
5051

5152
logger.info({'msg': 'Add metrics to web3 requests.'})
52-
add_middlewares(w3)
53+
add_middlewares(w3, ETH_RPC_REQUESTS)
5354

5455
if bot_name == BotModule.DEPOSITOR:
5556
run_depositor(w3)

src/metrics/metrics.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,13 @@
114114
namespace=PROMETHEUS_PREFIX,
115115
)
116116

117+
ONCHAIN_TRANSPORT_ETH_RPC_REQUESTS = Counter(
118+
'onchain_transport_rpc_requests',
119+
'Total count of requests to onchain transport RPC',
120+
['method', 'code', 'domain'],
121+
namespace=PROMETHEUS_PREFIX,
122+
)
123+
117124
UNEXPECTED_EXCEPTIONS = Counter(
118125
'unexpected_exceptions',
119126
'Total count of unexpected exceptions',

src/transport/msg_providers/onchain_transport.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
from typing import Callable, List, Optional
44

55
import variables
6-
from blockchain.web3_extentions.middleware import add_cache_middleware
6+
from blockchain.web3_extentions.middleware import add_middlewares
77
from eth_typing import ChecksumAddress
88
from eth_utils import to_bytes
9+
from metrics.metrics import ONCHAIN_TRANSPORT_ETH_RPC_REQUESTS
910
from schema import Schema
1011
from transport.msg_providers.common import BaseMessageProvider
1112
from transport.msg_providers.rabbit import MessageType
@@ -325,5 +326,6 @@ def _parse_log(self, log: LogReceipt) -> Optional[dict]:
325326
return None
326327

327328
@staticmethod
328-
def create_ochain_transport_w3() -> Web3:
329-
return add_cache_middleware(Web3(FallbackProvider(variables.ONCHAIN_TRANSPORT_RPC_ENDPOINTS)))
329+
def create_onchain_transport_w3() -> Web3:
330+
w3 = Web3(FallbackProvider(variables.ONCHAIN_TRANSPORT_RPC_ENDPOINTS))
331+
return add_middlewares(w3, ONCHAIN_TRANSPORT_ETH_RPC_REQUESTS)

src/transport/msg_storage.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ def get_messages_and_actualize(self, actualize_filter: Callable[[BotMessage], bo
4646
"""
4747
messages = self.messages
4848
for transport in self._transports:
49-
messages.extend(transport.get_messages())
50-
self.messages = list(filter(lambda x: self._filter(x) and actualize_filter(x), messages))
49+
filtered_messages = list(filter(lambda x: self._filter(x), transport.get_messages()))
50+
messages.extend(filtered_messages)
51+
self.messages = list(filter(lambda x: actualize_filter(x), messages))
5152
return self.messages
5253

5354
def clear(self):

tests/fixtures/provider.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from blockchain.web3_extentions.lido_contracts import LidoContracts
77
from blockchain.web3_extentions.middleware import add_middlewares
88
from blockchain.web3_extentions.transaction import TransactionUtils
9+
from metrics.metrics import ETH_RPC_REQUESTS
910
from web3 import HTTPProvider, Web3
1011

1112
from tests.fork import anvil_fork
@@ -35,7 +36,7 @@ def web3_provider_integration(request) -> Web3:
3536

3637
with anvil_fork(anvil_path, rpc_endpoint, block_num):
3738
w3 = Web3(HTTPProvider('http://127.0.0.1:8545', request_kwargs={'timeout': 3600}))
38-
add_middlewares(w3)
39+
add_middlewares(w3, ETH_RPC_REQUESTS)
3940
assert w3.is_connected(), 'Failed to connect to the Web3 provider.'
4041
yield w3
4142

0 commit comments

Comments
 (0)