Source code for caspia.toolbox.plugins.pollen_metrics

# pylint: disable=unused-variable
import os

from aiopollen.errors import ResponseError
from aiopollen.plugin import ClientPlugin

from caspia.toolbox import monitor

from .utils import patch


[docs]class Plugin(ClientPlugin): def __init__(self, client): super().__init__(client) self.client = client self.name = os.environ.get('CSP_METRICS_ACAN_NAME') self.interval = float(os.environ.get('CSP_METRICS_ACAN_INTERVAL', '5.0')) if not self.name: return labels = dict(pollen_name=self.name) monitor.register_metric('pollen:request', 'integer', labels=labels) monitor.register_metric('pollen:broadcast', 'integer', labels=labels, collect=True) @patch(client) async def request(original_method, addr, data, *args, **kwargs): time = self.client.loop.time start = time() try: response = await original_method(addr, data, *args, **kwargs) except ResponseError as error: monitor.record_metric('pollen:request', dict(value=1, duration=time() - start, request_len=len(data), response_len=len(error.data)), labels=dict(error=repr(error))) raise except Exception as exc: # pylint: disable=broad-except monitor.record_metric('pollen:request', dict(value=1, duration=time() - start, request_len=len(data)), labels=dict(error=repr(exc))) raise else: monitor.record_metric( 'pollen:request', dict(value=1, duration=time() - start, request_len=len(data), response_len=(len(response)))) return response @patch(client) async def broadcast(original_method, group, data, *args, **kwargs): await original_method(group, data, *args, **kwargs) monitor.record_metric('pollen:broadcast', 1) @client.listen_broadcast def on_broadcast(*args, **kwargs): monitor.record_metric('pollen:broadcast', 1)