/** * Returns a newly-created immutable {@link Map} which contains all values of {@link Meter}s in the * specified {@link MeterRegistry}. The format of the key string is: * <ul> * <li>{@code <name>#<statistic>{tagName=tagValue,...}}</li> * <li>e.g. {@code "armeria.server.activeRequests#value{method=greet}"}</li> * <li>e.g. {@code "someSubsystem.someValue#sumOfSquares"} (no tags)</li> * </ul> * Note: It is not recommended to use this method for the purposes other than testing. */ public static Map<String, Double> measureAll(MeterRegistry registry) { requireNonNull(registry, "registry"); final ImmutableMap.Builder<String, Double> builder = ImmutableMap.builder(); registry.forEachMeter(meter -> Streams.stream(meter.measure()).forEach(measurement -> { final String fullName = measurementName(meter.getId(), measurement); final double value = measurement.getValue(); builder.put(fullName, value); })); return builder.build(); }
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 @DisplayName("function-tracking counter increments by change in a monotonically increasing function when observed") default void functionTrackingCounter(MeterRegistry registry) { AtomicLong n = new AtomicLong(0); registry.more().counter("tracking", emptyList(), n); n.incrementAndGet(); clock(registry).add(step()); registry.forEachMeter(Meter::measure); assertThat(registry.get("tracking").functionCounter().count()).isEqualTo(1.0); } }
public static List<Datapoint> listDatapoints(String regName, Predicate<Meter> predicate) { List<Datapoint> result = new ArrayList<>(); MeterRegistry registry = BackendRegistries.getNow(regName); if (registry == null) { throw new NoRegistryException(regName); } registry.forEachMeter(m -> { if (predicate.test(m)) { String id = id(m); m.measure().forEach(measurement -> { result.add(new Datapoint(id + "$" + measurement.getStatistic().name(), measurement.getValue())); }); } }); return result; }