package com.baiyue.eventbridge.metrics; import com.baiyue.common.event.EventTypes; import com.baiyue.eventbridge.mapper.BridgeInboxMapper; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; class EventBridgeInboxMetricsSamplerTest { @Test void samplesDatabaseOnceAndServesCachedLowCardinalityGauges() { BridgeInboxMapper mapper = mock(BridgeInboxMapper.class); SimpleMeterRegistry registry = new SimpleMeterRegistry(); InboxMetricsSnapshot known = snapshot("OVERSEAS", EventTypes.FIRST_LEG_LOADING_PLAN_COMPLETED, 7, 121.5, 2); InboxMetricsSnapshot unknown = snapshot("region-123", "dynamic-event-123", 3, 900.0, 1); when(mapper.observabilitySnapshots()).thenReturn(List.of(known, unknown)); EventBridgeInboxMetricsSampler sampler = new EventBridgeInboxMetricsSampler(mapper, registry); sampler.sample(); verify(mapper).observabilitySnapshots(); assertThat(gauge(registry, EventBridgeInboxMetricsSampler.BACKLOG_METRIC, "OVERSEAS", EventTypes.FIRST_LEG_LOADING_PLAN_COMPLETED)).isEqualTo(7.0); assertThat(gauge(registry, EventBridgeInboxMetricsSampler.OLDEST_AGE_METRIC, "OVERSEAS", EventTypes.FIRST_LEG_LOADING_PLAN_COMPLETED)).isEqualTo(121.5); assertThat(gauge(registry, EventBridgeInboxMetricsSampler.DEAD_METRIC, "OTHER", "OTHER")).isEqualTo(1.0); verifyNoMoreInteractions(mapper); } private InboxMetricsSnapshot snapshot(String region, String eventType, long backlog, double oldestAge, long dead) { InboxMetricsSnapshot snapshot = new InboxMetricsSnapshot(); snapshot.setTargetRegion(region); snapshot.setEventType(eventType); snapshot.setBacklogCount(backlog); snapshot.setOldestPendingAgeSeconds(oldestAge); snapshot.setDeadCount(dead); return snapshot; } private double gauge(SimpleMeterRegistry registry, String name, String region, String eventType) { return registry.get(name).tags("target_region", region, "event_type", eventType).gauge().value(); } }