async def metrics(request): """Prometheus compatible metrics. Naming convention: https://prometheus.io/docs/practices/naming/ """ return web.Response( text=format_dataclass_for_prometheus(await get_metrics()))
def test_format_dataclass_for_prometheus(): @dataclass class Simple: a: int b: float c: str assert format_dataclass_for_prometheus(Simple(1, 2.2, "3")) == 'a 1\nb 2.2\nc "3"' @dataclass class Tagged: d: Simple e: str assert format_dataclass_for_prometheus(Tagged(Simple( 1, 2.2, "3"), "e")) == 'd{a=1,b=2.2,c="3"} 1\ne "e"'
async def metrics(request): """Prometheus compatible metrics. Naming convention: https://prometheus.io/docs/practices/naming/ """ shared_stats = request.config_dict["shared_stats"] return web.Response( text=format_dataclass_for_prometheus(await get_metrics(shared_stats)))
def test_metrics(): metrics = Metrics( pyaleph_build_info=BuildInfo( python_version='3.8.0', version='v999', ), pyaleph_status_sync_messages_total=123, pyaleph_status_sync_pending_messages_total=456, ) assert format_dataclass_for_prometheus(metrics) == ( 'pyaleph_build_info{python_version="3.8.0",version="v999"} 1\n' 'pyaleph_status_sync_messages_total 123\n' 'pyaleph_status_sync_pending_messages_total 456')
def test_metrics(): metrics = Metrics( pyaleph_build_info=BuildInfo( python_version='3.8.0', version='v999', ), pyaleph_status_peers_total=0, pyaleph_status_sync_messages_total=123, pyaleph_status_sync_pending_messages_total=456, pyaleph_status_sync_pending_txs_total=0, pyaleph_status_chain_eth_last_committed_height=0, ) assert format_dataclass_for_prometheus(metrics) == ( 'pyaleph_build_info{python_version="3.8.0",version="v999"} 1\n' 'pyaleph_status_peers_total 0\n' 'pyaleph_status_sync_messages_total 123\n' 'pyaleph_status_sync_pending_messages_total 456\n' 'pyaleph_status_sync_pending_txs_total 0\n' 'pyaleph_status_chain_eth_last_committed_height 0')