Coverage for databases/tests/test_metrics.py: 100%
36 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-08-27 18:25 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-08-27 18:25 +0000
1import pytest
3from prisma import Prisma
4from prisma._compat import model_json
7@pytest.mark.asyncio
8async def test_prometheus(client: Prisma) -> None:
9 """Metrics can be returned in Prometheus format"""
10 await client.user.create(data={'name': 'Robert'})
12 metrics = await client.get_metrics(format='prometheus')
14 assert 'prisma_client_queries_total' in metrics
15 assert 'prisma_datasource_queries_total' in metrics
16 assert 'prisma_client_queries_active' in metrics
17 assert 'prisma_client_queries_duration_histogram_ms_bucket' in metrics
20@pytest.mark.asyncio
21async def test_json_string(client: Prisma) -> None:
22 """Metrics can be serlialized to JSON"""
23 await client.user.create(data={'name': 'Robert'})
25 metrics = await client.get_metrics()
26 assert isinstance(model_json(metrics), str)
29@pytest.mark.asyncio
30async def test_json(client: Prisma) -> None:
31 """Metrics returned in the JSON format"""
32 await client.user.create(data={'name': 'Robert'})
34 metrics = await client.get_metrics(format='json')
36 assert len(metrics.counters) > 0
37 assert metrics.counters[0].value > 0
39 assert len(metrics.gauges) > 0
40 gauge = next(filter(lambda g: g.key == 'prisma_pool_connections_open', metrics.gauges))
41 assert gauge.value > 0
43 assert len(metrics.histograms) > 0
44 assert metrics.histograms[0].value.sum > 0
45 assert metrics.histograms[0].value.count > 0
47 assert len(metrics.histograms[0].value.buckets) > 0
49 for bucket in metrics.histograms[0].value.buckets:
50 assert bucket.max_value >= 0
51 assert bucket.total_count >= 0
54@pytest.mark.asyncio
55async def test_global_labels(client: Prisma) -> None:
56 metrics = await client.get_metrics(global_labels={'foo': 'bar'})
57 assert metrics.counters[0].labels == {'foo': 'bar'}