@Override public SortedMap<Double, Double> percentileValues(TimeUnit unit) { SortedMap<Double, Double> result = new TreeMap<>(); HistogramSnapshot snapshot = timer.takeSnapshot(); for (ValueAtPercentile valueAtPercentile : snapshot.percentileValues()) { result.put(valueAtPercentile.percentile(), valueAtPercentile.value(unit)); } return Collections.unmodifiableSortedMap(result); } }
private Metric<Number> toTimerMetric(Timer timer) { return new Metric<Number>(timer.getId(), timer.takeSnapshot()); }
private Map<String, Map<String, Number>> databaseMetrics() { Map<String, Map<String, Number>> resultsDatabase = new HashMap<>(); Collection<Timer> timers = Search.in(this.meterRegistry).name(s -> s.contains("hikari")).timers(); timers.forEach(timer -> { String key = timer.getId().getName().substring(timer.getId().getName().lastIndexOf('.') + 1); resultsDatabase.putIfAbsent(key, new HashMap<>()); resultsDatabase.get(key).put("count", timer.count()); resultsDatabase.get(key).put("max", timer.max(TimeUnit.MILLISECONDS)); resultsDatabase.get(key).put("totalTime", timer.totalTime(TimeUnit.MILLISECONDS)); resultsDatabase.get(key).put("mean", timer.mean(TimeUnit.MILLISECONDS)); ValueAtPercentile[] percentiles = timer.takeSnapshot().percentileValues(); for (ValueAtPercentile percentile : percentiles) { resultsDatabase.get(key).put(String.valueOf(percentile.percentile()), percentile.value(TimeUnit.MILLISECONDS)); } }); Collection<Gauge> gauges = Search.in(this.meterRegistry).name(s -> s.contains("hikari")).gauges(); gauges.forEach(gauge -> { String key = gauge.getId().getName().substring(gauge.getId().getName().lastIndexOf('.') + 1); resultsDatabase.putIfAbsent(key, new HashMap<>()); resultsDatabase.get(key).put("value", gauge.value()); }); return resultsDatabase; }
private Map<String, Object> garbageCollectorMetrics() { Map<String, Object> resultsGarbageCollector = new HashMap<>(); Collection<Timer> timers = Search.in(this.meterRegistry).name(s -> s.contains("jvm.gc.pause")).timers(); timers.forEach(timer -> { String key = timer.getId().getName(); HashMap<String, Number> gcPauseResults = new HashMap<>(); gcPauseResults.put("count", timer.count()); gcPauseResults.put("max", timer.max(TimeUnit.MILLISECONDS)); gcPauseResults.put("totalTime", timer.totalTime(TimeUnit.MILLISECONDS)); gcPauseResults.put("mean", timer.mean(TimeUnit.MILLISECONDS)); ValueAtPercentile[] percentiles = timer.takeSnapshot().percentileValues(); for (ValueAtPercentile percentile : percentiles) { gcPauseResults.put(String.valueOf(percentile.percentile()), percentile.value(TimeUnit.MILLISECONDS)); } resultsGarbageCollector.putIfAbsent(key, gcPauseResults); }); Collection<Gauge> gauges = Search.in(this.meterRegistry).name(s -> s.contains("jvm.gc") && !s.contains("jvm.gc.pause")).gauges(); gauges.forEach(gauge -> resultsGarbageCollector.put(gauge.getId().getName(), gauge.value())); Collection<Counter> counters = Search.in(this.meterRegistry).name(s -> s.contains("jvm.gc") && !s.contains("jvm.gc.pause")).counters(); counters.forEach(counter -> resultsGarbageCollector.put(counter.getId().getName(), counter.count())); gauges = Search.in(this.meterRegistry).name(s -> s.contains("jvm.classes.loaded")).gauges(); Double classesLoaded = gauges.stream().map(Gauge::value).reduce((x, y) -> (x + y)).orElse((double) 0); resultsGarbageCollector.put("classesLoaded", classesLoaded); Collection<FunctionCounter> functionCounters = Search.in(this.meterRegistry).name(s -> s.contains("jvm.classes.unloaded")).functionCounters(); Double classesUnloaded = functionCounters.stream().map(FunctionCounter::count).reduce((x, y) -> (x + y)).orElse((double) 0); resultsGarbageCollector.put("classesUnloaded", classesUnloaded); return resultsGarbageCollector; }
@Nullable private Optional<String> writeTimer(Timer timer) { HistogramSnapshot snapshot = timer.takeSnapshot(); long count = snapshot.count(); if (count > 0) { return Optional.of(write(timer.getId(), "timer", Fields.Count.tag(), decimal(count), Fields.Sum.tag(), decimal(snapshot.total(getBaseTimeUnit())), Fields.Max.tag(), decimal(snapshot.max(getBaseTimeUnit())))); } return Optional.empty(); }
private void announceTimer(Timer timer) { HistogramSnapshot snapshot = timer.takeSnapshot(); announce(timer, snapshot.count(), "count"); announce(timer, snapshot.total(getBaseTimeUnit()), "sum"); announce(timer, snapshot.mean(getBaseTimeUnit()), "avg"); announce(timer, snapshot.max(getBaseTimeUnit()), "max"); }
private List<Meter> convert(Timer timer) { List<Meter> meters = new ArrayList<>(); HistogramSnapshot snapshot = timer.takeSnapshot();