|
1 | 1 | package org.hypertrace.core.serviceframework.metrics; |
2 | 2 |
|
3 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 4 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
4 | 5 |
|
5 | 6 | import com.typesafe.config.Config; |
6 | 7 | import com.typesafe.config.ConfigFactory; |
7 | 8 | import io.micrometer.core.instrument.Counter; |
| 9 | +import io.micrometer.core.instrument.DistributionSummary; |
8 | 10 | import io.micrometer.core.instrument.Timer; |
9 | 11 | import io.micrometer.core.instrument.composite.CompositeMeterRegistry; |
| 12 | +import java.util.Arrays; |
| 13 | +import java.util.HashMap; |
10 | 14 | import java.util.List; |
11 | 15 | import java.util.Map; |
12 | 16 | import java.util.concurrent.TimeUnit; |
13 | 17 | import java.util.concurrent.atomic.AtomicInteger; |
| 18 | +import java.util.stream.Collectors; |
14 | 19 | import org.junit.jupiter.api.AfterEach; |
15 | 20 | import org.junit.jupiter.api.Assertions; |
16 | 21 | import org.junit.jupiter.api.Test; |
@@ -117,6 +122,40 @@ public void testGauge() { |
117 | 122 | assertEquals(11, gauge.get()); |
118 | 123 | } |
119 | 124 |
|
| 125 | + @Test |
| 126 | + public void testDistributionSummary() { |
| 127 | + initializeCustomRegistry(List.of("testing")); |
| 128 | + |
| 129 | + DistributionSummary distribution = PlatformMetricsRegistry |
| 130 | + .registerDistributionSummary("my.distribution", Map.of("foo", "bar")); |
| 131 | + distribution.record(100); |
| 132 | + assertEquals(1, distribution.count()); |
| 133 | + assertEquals(100, distribution.totalAmount()); |
| 134 | + |
| 135 | + // Try to register the same summary again and we should get the same instance. |
| 136 | + distribution = PlatformMetricsRegistry |
| 137 | + .registerDistributionSummary("my.distribution", Map.of("foo", "bar")); |
| 138 | + distribution.record(50); |
| 139 | + assertEquals(2, distribution.count()); |
| 140 | + assertEquals(150, distribution.totalAmount()); |
| 141 | + assertEquals(75, distribution.mean()); |
| 142 | + assertTrue( |
| 143 | + Arrays.stream(distribution.takeSnapshot().percentileValues()).map(m -> m.percentile()) |
| 144 | + .collect( |
| 145 | + Collectors.toList()).containsAll(List.of(0.5, 0.95, 0.99))); |
| 146 | + |
| 147 | + // Create a new distribution with histogram enabled |
| 148 | + distribution = PlatformMetricsRegistry |
| 149 | + .registerDistributionSummary("my.distribution", new HashMap<>(), true); |
| 150 | + distribution.record(100); |
| 151 | + assertEquals(1, distribution.count()); |
| 152 | + assertEquals(100, distribution.totalAmount()); |
| 153 | + assertTrue( |
| 154 | + Arrays.stream(distribution.takeSnapshot().percentileValues()).map(m -> m.percentile()) |
| 155 | + .collect( |
| 156 | + Collectors.toList()).containsAll(List.of(0.5, 0.95, 0.99))); |
| 157 | + } |
| 158 | + |
120 | 159 | @Test |
121 | 160 | public void test_initializePrometheusPushGateway_withNullUrlAddress_throwsException() { |
122 | 161 | Assertions.assertThrows(IllegalArgumentException.class, |
|
0 commit comments