"""Tests for Prometheus metrics utilities.""" import pytest from prometheus_client import CollectorRegistry def make_metrics(service_name="test-service", registry=None): from shared.metrics import ServiceMetrics return ServiceMetrics(service_name, registry=registry) def test_metrics_creates_with_prefix(): """ServiceMetrics stores sanitized service name prefix.""" registry = CollectorRegistry() m = make_metrics("my-service", registry=registry) assert m.service_name == "my_service" def test_errors_total_increment(): """errors_total counter can be incremented with labels.""" registry = CollectorRegistry() m = make_metrics("test-svc", registry=registry) m.errors_total.labels(service="test_svc", error_type="timeout").inc() assert m.errors_total.labels(service="test_svc", error_type="timeout")._value.get() == 1.0 def test_events_processed_increment(): """events_processed counter can be incremented with labels.""" registry = CollectorRegistry() m = make_metrics("test-svc", registry=registry) m.events_processed.labels(service="test_svc", event_type="candle").inc(5) assert m.events_processed.labels(service="test_svc", event_type="candle")._value.get() == 5.0 def test_processing_seconds_observe(): """processing_seconds histogram can observe values.""" registry = CollectorRegistry() m = make_metrics("test-svc", registry=registry) m.processing_seconds.labels(service="test_svc").observe(0.5) m.processing_seconds.labels(service="test_svc").observe(1.5) # Sum should be 2.0 assert m.processing_seconds.labels(service="test_svc")._sum.get() == 2.0 def test_service_up_gauge(): """service_up gauge can be set.""" registry = CollectorRegistry() m = make_metrics("test-svc", registry=registry) m.service_up.labels(service="test_svc").set(1) assert m.service_up.labels(service="test_svc")._value.get() == 1.0 m.service_up.labels(service="test_svc").set(0) assert m.service_up.labels(service="test_svc")._value.get() == 0.0