55 lines
2.4 KiB
Java
55 lines
2.4 KiB
Java
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();
|
|
}
|
|
}
|