/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package org.springside.modules.metrics.reporter; import java.io.PrintStream; import java.util.Date; import java.util.Map; import java.util.Map.Entry; import org.springside.modules.metrics.MetricRegistry; import org.springside.modules.metrics.Reporter; import org.springside.modules.metrics.metric.Counter; import org.springside.modules.metrics.metric.CounterMetric; import org.springside.modules.metrics.metric.Gauge; import org.springside.modules.metrics.metric.Histogram; import org.springside.modules.metrics.metric.HistogramMetric; import org.springside.modules.metrics.metric.Timer; import org.springside.modules.metrics.metric.TimerMetric; /** * 将Metrics打印到Console. */ public class ConsoleReporter implements Reporter { private static final int CONSOLE_WIDTH = 80; private PrintStream output = System.out; @Override public void report(Map<String, Gauge> gauges, Map<String, Counter> counters, Map<String, Histogram> histograms, Map<String, Timer> timers) { printWithBanner(new Date().toString(), '='); output.println(); if (!gauges.isEmpty()) { printWithBanner("-- Gaugues", '-'); for (Map.Entry<String, Gauge> entry : MetricRegistry.getSortedMetrics(gauges).entrySet()) { output.println(entry.getKey()); printGauge(entry.getValue()); } output.println(); } if (!counters.isEmpty()) { printWithBanner("-- Counters", '-'); for (Map.Entry<String, Counter> entry : MetricRegistry.getSortedMetrics(counters).entrySet()) { output.println(entry.getKey()); printCounter(entry.getValue().latestMetric); } output.println(); } if (!histograms.isEmpty()) { printWithBanner("-- Histograms", '-'); for (Map.Entry<String, Histogram> entry : MetricRegistry.getSortedMetrics(histograms).entrySet()) { output.println(entry.getKey()); printHistogram(entry.getValue().latestMetric); } output.println(); } if (!timers.isEmpty()) { printWithBanner("-- Timers", '-'); for (Map.Entry<String, Timer> entry : MetricRegistry.getSortedMetrics(timers).entrySet()) { output.println(entry.getKey()); printTimer(entry.getValue().latestMetric); } output.println(); } } private void printWithBanner(String s, char c) { output.print(s); output.print(' '); for (int i = 0; i < (CONSOLE_WIDTH - s.length() - 1); i++) { output.print(c); } output.println(); } private void printGauge(Gauge gauge) { output.printf(" value = %s%n", gauge.latestMetric); } private void printCounter(CounterMetric counter) { output.printf(" latest count = %d%n", counter.latestCount); output.printf(" total count = %d%n", counter.totalCount); output.printf(" latest rate = %d%n", counter.latestRate); output.printf(" avg rate = %d%n", counter.avgRate); } private void printHistogram(HistogramMetric histogram) { output.printf(" min = %d%n", histogram.min); output.printf(" max = %d%n", histogram.max); output.printf(" avg = %2.2f%n", histogram.avg); for (Entry<Double, Long> pct : histogram.pcts.entrySet()) { output.printf(" %2.2f%% <= %d %n", pct.getKey(), pct.getValue()); } } private void printTimer(TimerMetric timer) { output.printf(" latest count = %d%n", timer.counterMetric.latestCount); output.printf(" total count = %d%n", timer.counterMetric.totalCount); output.printf(" latest rate = %d%n", timer.counterMetric.latestRate); output.printf(" avg rate = %d%n", timer.counterMetric.avgRate); output.printf(" min latency = %d ms%n", timer.histogramMetric.min); output.printf(" max latency = %d ms%n", timer.histogramMetric.max); output.printf(" avg latency = %2.2f ms%n", timer.histogramMetric.avg); for (Entry<Double, Long> pct : timer.histogramMetric.pcts.entrySet()) { output.printf(" %2.2f%% latency <= %d ms%n", pct.getKey(), pct.getValue()); } } }