@TearDown(Level.Trial) public void tearDown(Blackhole hole) { for (io.micrometer.core.instrument.Meter m : registry.getMeters()) { if (m instanceof io.micrometer.core.instrument.Counter) { hole.consume(((io.micrometer.core.instrument.Counter) m).count()); } } } }
private void assertMetricsContainsTag(String tagKey, String tagValue) { List<Meter.Id> meterIds = null; try { meterIds = this.meterRegistry.getMeters().stream() .map(Meter::getId) .collect(Collectors.toList()); Collection<Timer> timers = this.meterRegistry.get(REQUEST_METRICS_NAME).timers(); System.err.println("Looking for gateway.requests: tag: " + tagKey + ", value: "+ tagValue); timers.forEach(timer -> System.err.println(timer.getId()+timer.getClass().getSimpleName())); long count = getCount(tagKey, tagValue); assertThat(count).isEqualTo(1); } catch (MeterNotFoundException e) { System.err.println("\n\n\nError finding gatway.requests meter: tag: " + tagKey + ", value: "+ tagValue); System.err.println("\n\n\nMeter ids prior to search: "+meterIds + "\n\n\n and after:"); this.meterRegistry.forEachMeter(meter -> System.err.println(meter.getId() + meter.getClass().getSimpleName())); // try again? long count = getCount(tagKey, tagValue); if (count != 1) { throw e; } } }
@Test public void shouldRegisterMetrics() { RateLimiterRegistry rateLimiterRegistry = RateLimiterRegistry.ofDefaults(); rateLimiterRegistry.rateLimiter("testName"); RateLimiterMetrics rateLimiterMetrics = RateLimiterMetrics.ofRateLimiterRegistry(rateLimiterRegistry); rateLimiterMetrics.bindTo(meterRegistry); final List<String> metricNames = meterRegistry.getMeters() .stream() .map(Meter::getId) .map(Meter.Id::getName) .collect(Collectors.toList()); final List<String> expectedMetrics = newArrayList( "resilience4j.ratelimiter.testName.available_permissions", "resilience4j.ratelimiter.testName.number_of_waiting_threads"); assertThat(metricNames).hasSameElementsAs(expectedMetrics); }
@Test public void shouldRegisterMetrics() { BulkheadRegistry bulkheadRegistry = BulkheadRegistry.ofDefaults(); bulkheadRegistry.bulkhead("testName"); BulkheadMetrics bulkheadMetrics = BulkheadMetrics.ofBulkheadRegistry(bulkheadRegistry); bulkheadMetrics.bindTo(meterRegistry); final List<String> metricNames = meterRegistry.getMeters() .stream() .map(Meter::getId) .map(Meter.Id::getName) .collect(Collectors.toList()); final List<String> expectedMetrics = newArrayList( "resilience4j.bulkhead.testName.available_concurrent_calls"); assertThat(metricNames).hasSameElementsAs(expectedMetrics); }
@Test public void shouldRegisterMetrics() { RetryRegistry retryRegistry = RetryRegistry.ofDefaults(); retryRegistry.retry("testName"); RetryMetrics retryMetrics = RetryMetrics.ofRetryRegistry(retryRegistry); retryMetrics.bindTo(meterRegistry); final List<String> metricNames = meterRegistry.getMeters() .stream() .map(Meter::getId) .map(Meter.Id::getName) .collect(Collectors.toList()); final List<String> expectedMetrics = newArrayList( "resilience4j.retry.testName.successful_calls_with_retry", "resilience4j.retry.testName.failed_calls_with_retry", "resilience4j.retry.testName.successful_calls_without_retry", "resilience4j.retry.testName.failed_calls_without_retry"); assertThat(metricNames).hasSameElementsAs(expectedMetrics); }
@Test public void shouldRegisterMetrics() { CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.ofDefaults(); circuitBreakerRegistry.circuitBreaker("testName"); CircuitBreakerMetrics circuitBreakerMetrics = CircuitBreakerMetrics.ofCircuitBreakerRegistry(circuitBreakerRegistry); circuitBreakerMetrics.bindTo(meterRegistry); final List<String> metricNames = meterRegistry.getMeters() .stream() .map(Meter::getId) .map(Meter.Id::getName) .collect(Collectors.toList()); final List<String> expectedMetrics = newArrayList( "resilience4j.circuitbreaker.testName.successful", "resilience4j.circuitbreaker.testName.failed", "resilience4j.circuitbreaker.testName.not_permitted", "resilience4j.circuitbreaker.testName.state", "resilience4j.circuitbreaker.testName.buffered", "resilience4j.circuitbreaker.testName.buffered_max"); assertThat(metricNames).hasSameElementsAs(expectedMetrics); }
private void collectNames(Set<String> names, MeterRegistry registry) { if (registry instanceof CompositeMeterRegistry) { ((CompositeMeterRegistry) registry).getRegistries() .forEach((member) -> collectNames(names, member)); } else { registry.getMeters().stream().map(this::getName).forEach(names::add); } }
@Test @DirtiesContext public void testAutoDiscovery() { log.info("--- Starting tests with auto discovery ---"); for (final Meter meter : meterRegistry.getMeters()) { log.debug("Found meter: {}", meter.getId()); } assertEquals(METHOD_COUNT * 2, this.meterRegistry.getMeters().stream().filter(Counter.class::isInstance).count()); assertEquals(METHOD_COUNT, this.meterRegistry.getMeters().stream().filter(Timer.class::isInstance).count()); log.info("--- Test completed ---"); }
@Test @DirtiesContext public void testAutoDiscovery() { log.info("--- Starting tests with custom auto discovery ---"); assertEquals(METHOD_COUNT * 2, this.meterRegistry.getMeters().stream().filter(Counter.class::isInstance).count()); assertEquals(METHOD_COUNT * 2, this.meterRegistry.getMeters().stream().filter(Timer.class::isInstance).count()); log.info("--- Test completed ---"); }
@Test public void testServerPreRegistration() { log.info("--- Starting tests with server pre-registration ---"); final MeterRegistry meterRegistry = new SimpleMeterRegistry(); assertEquals(0, meterRegistry.getMeters().size()); final MetricCollectingServerInterceptor mcsi = new MetricCollectingServerInterceptor(meterRegistry); mcsi.preregisterService(TestServiceGrpc.getServiceDescriptor()); MetricTestHelper.logMeters(meterRegistry.getMeters()); assertEquals(METHOD_COUNT * 3, meterRegistry.getMeters().size()); log.info("--- Test completed ---"); }
@Test @DirtiesContext public void testAutoDiscovery() { log.info("--- Starting tests with full auto discovery ---"); assertEquals(METHOD_COUNT * 2, this.meterRegistry.getMeters().stream() .filter(Counter.class::isInstance) .filter(m -> m.getId().getName().startsWith("grpc.")) // Only count grpc metrics .count()); assertEquals(METHOD_COUNT, this.meterRegistry.getMeters().stream() .filter(Timer.class::isInstance) .filter(m -> m.getId().getName().startsWith("grpc.")) // Only count grpc metrics .count()); log.info("--- Test completed ---"); }
@Test public void testClientPreRegistration() { log.info("--- Starting tests with client pre-registration ---"); final MeterRegistry meterRegistry = new SimpleMeterRegistry(); assertEquals(0, meterRegistry.getMeters().size()); final MetricCollectingClientInterceptor mcci = new MetricCollectingClientInterceptor(meterRegistry); mcci.preregisterService(TestServiceGrpc.getServiceDescriptor()); MetricTestHelper.logMeters(meterRegistry.getMeters()); assertEquals(METHOD_COUNT * 3, meterRegistry.getMeters().size()); log.info("--- Test completed ---"); }
@Test public void testClientCustomization() { log.info("--- Starting tests with client customization ---"); final MeterRegistry meterRegistry = new SimpleMeterRegistry(); assertEquals(0, meterRegistry.getMeters().size()); final MetricCollectingClientInterceptor mcci = new MetricCollectingClientInterceptor(meterRegistry, counter -> counter.tag("type", "counter"), timer -> timer.tag("type", "timer").publishPercentiles(0.5, 0.9, 0.99), OK, UNKNOWN); mcci.preregisterService(TestServiceGrpc.getServiceDescriptor()); MetricTestHelper.logMeters(meterRegistry.getMeters()); assertEquals(METHOD_COUNT * 10, meterRegistry.getMeters().size()); final Counter counter = meterRegistry.find(METRIC_NAME_CLIENT_REQUESTS_SENT).counter(); assertNotNull(counter); assertEquals("counter", counter.getId().getTag("type")); final Timer timer = meterRegistry.find(METRIC_NAME_CLIENT_PROCESSING_DURATION).timer(); assertNotNull(timer); assertEquals("timer", timer.getId().getTag("type")); log.info("--- Test completed ---"); }
@Test public void testServerCustomization() { log.info("--- Starting tests with server customization ---"); final MeterRegistry meterRegistry = new SimpleMeterRegistry(); assertEquals(0, meterRegistry.getMeters().size()); final MetricCollectingServerInterceptor mcsi = new MetricCollectingServerInterceptor(meterRegistry, counter -> counter.tag("type", "counter"), timer -> timer.tag("type", "timer").publishPercentiles(0.5, 0.9, 0.99), OK, UNKNOWN); mcsi.preregisterService(new TestServiceImpl()); MetricTestHelper.logMeters(meterRegistry.getMeters()); assertEquals(METHOD_COUNT * 10, meterRegistry.getMeters().size()); final Counter counter = meterRegistry.find(METRIC_NAME_SERVER_REQUESTS_RECEIVED).counter(); assertNotNull(counter); assertEquals("counter", counter.getId().getTag("type")); final Timer timer = meterRegistry.find(METRIC_NAME_SERVER_PROCESSING_DURATION).timer(); assertNotNull(timer); assertEquals("timer", timer.getId().getTag("type")); log.info("--- Test completed ---"); }
@Override public Iterator<Meter> iterator() { return impl.getMeters() .stream() .map(this::convert) .filter(Objects::nonNull) .iterator(); } }
@Override public Set<String> metricsNames() { if (metrics != null) { return metrics.registry().getMeters().stream() .map(m -> m.getId().getName()) .collect(Collectors.toSet()); } return Collections.emptySet(); }
private JsonObject snapshot(MeterRegistry registry, String baseName) { Stream<Meter> filtered; if (baseName == null) { filtered = registry.getMeters().stream(); } else { filtered = registry.getMeters().stream() .filter(m -> m.getId().getName().startsWith(baseName)); } LinkedHashMap<String, List<JsonObject>> map = filtered .sorted(Comparator.comparing(m -> m.getId().getName())) .collect( Collectors.groupingBy(m -> m.getId().getName(), LinkedHashMap::new, Collectors.mapping(MetricsServiceImpl::metricToJson, Collectors.toList()))); return new JsonObject((Map<String, Object>)(Object) map); }
@GetMapping("/metrics") public ObjectNode fetchMetricsFromMicrometer() { ObjectNode metrics = factory.objectNode(); // Iterate over the meters and get the Zipkin Custom meters for constructing the Metrics endpoint for (Meter meter : meterRegistry.getMeters()) { String name = meter.getId().getName(); if (!name.startsWith("zipkin_collector")) continue; String transport = meter.getId().getTag("transport"); if (transport == null) continue; switch (meter.getId().getType()) { case COUNTER: metrics.put("counter." + name + "." + transport, meterRegistry.get(name).counter().count()); continue; case GAUGE: metrics.put("gauge." + name + "." + transport, meterRegistry.get(name).gauge().value()); } } return metrics; }
private Flux<MetricsSnapshot> getMetricsSnapshotStream() { return Flux.fromIterable(registry.getMeters()) .window(batchSize) .flatMap(