|
Akka/Scala example source code file (AkkaConsoleReporter.scala)
The AkkaConsoleReporter.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.testkit.metrics.reporter
import java.io.PrintStream
import java.util
import java.util.concurrent.TimeUnit
import com.codahale.metrics._
import akka.testkit.metrics._
import scala.reflect.ClassTag
/**
* Used to report [[Metric]] types that the original [[ConsoleReporter]] is unaware of (cannot re-use directly because of private constructor).
*/
class AkkaConsoleReporter(
registry: AkkaMetricRegistry,
verbose: Boolean,
output: PrintStream = System.out)
extends ScheduledReporter(registry.asInstanceOf[MetricRegistry], "akka-console-reporter", MetricFilter.ALL, TimeUnit.SECONDS, TimeUnit.NANOSECONDS) {
private final val ConsoleWidth = 80
override def report(gauges: util.SortedMap[String, Gauge[_]], counters: util.SortedMap[String, Counter], histograms: util.SortedMap[String, Histogram], meters: util.SortedMap[String, Meter], timers: util.SortedMap[String, Timer]) {
import collection.JavaConverters._
// default Metrics types
printMetrics(gauges.asScala, printGauge)
printMetrics(counters.asScala, printCounter)
printMetrics(histograms.asScala, printHistogram)
printMetrics(meters.asScala, printMeter)
printMetrics(timers.asScala, printTimer)
// custom Akka types
printMetrics(registry.getKnownOpsInTimespanCounters, printKnownOpsInTimespanCounter)
printMetrics(registry.getHdrHistograms, printHdrHistogram)
printMetrics(registry.getAveragingGauges, printAveragingGauge)
output.println()
output.flush()
}
def printMetrics[T <: Metric](metrics: Iterable[(String, T)], printer: T ⇒ Unit)(implicit clazz: ClassTag[T]) {
if (!metrics.isEmpty) {
printWithBanner(s"-- ${simpleName(metrics.head._2.getClass)}", '-')
for ((key, metric) ← metrics) {
output.println(" " + key)
printer(metric)
}
output.println()
}
}
private def printMeter(meter: Meter) {
output.print(" count = %d%n".format(meter.getCount))
output.print(" mean rate = %2.2f events/%s%n".format(convertRate(meter.getMeanRate), getRateUnit))
output.print(" 1-minute rate = %2.2f events/%s%n".format(convertRate(meter.getOneMinuteRate), getRateUnit))
output.print(" 5-minute rate = %2.2f events/%s%n".format(convertRate(meter.getFiveMinuteRate), getRateUnit))
output.print(" 15-minute rate = %2.2f events/%s%n".format(convertRate(meter.getFifteenMinuteRate), getRateUnit))
}
private def printCounter(entry: Counter) {
output.print(" count = %d%n".format(entry.getCount))
}
private def printGauge(entry: Gauge[_]) {
output.print(" value = %s%n".format(entry.getValue))
}
private def printHistogram(histogram: Histogram) {
val snapshot = histogram.getSnapshot
output.print(" count = %d%n".format(histogram.getCount))
output.print(" min = %d%n".format(snapshot.getMin))
output.print(" max = %d%n".format(snapshot.getMax))
output.print(" mean = %2.2f%n".format(snapshot.getMean))
output.print(" stddev = %2.2f%n".format(snapshot.getStdDev))
output.print(" median = %2.2f%n".format(snapshot.getMedian))
output.print(" 75%% <= %2.2f%n".format(snapshot.get75thPercentile))
output.print(" 95%% <= %2.2f%n".format(snapshot.get95thPercentile))
output.print(" 98%% <= %2.2f%n".format(snapshot.get98thPercentile))
output.print(" 99%% <= %2.2f%n".format(snapshot.get99thPercentile))
output.print(" 99.9%% <= %2.2f%n".format(snapshot.get999thPercentile))
}
private def printTimer(timer: Timer) {
val snapshot = timer.getSnapshot
output.print(" count = %d%n".format(timer.getCount))
output.print(" mean rate = %2.2f calls/%s%n".format(convertRate(timer.getMeanRate), getRateUnit))
output.print(" 1-minute rate = %2.2f calls/%s%n".format(convertRate(timer.getOneMinuteRate), getRateUnit))
output.print(" 5-minute rate = %2.2f calls/%s%n".format(convertRate(timer.getFiveMinuteRate), getRateUnit))
output.print(" 15-minute rate = %2.2f calls/%s%n".format(convertRate(timer.getFifteenMinuteRate), getRateUnit))
output.print(" min = %2.2f %s%n".format(convertDuration(snapshot.getMin), getDurationUnit))
output.print(" max = %2.2f %s%n".format(convertDuration(snapshot.getMax), getDurationUnit))
output.print(" mean = %2.2f %s%n".format(convertDuration(snapshot.getMean), getDurationUnit))
output.print(" stddev = %2.2f %s%n".format(convertDuration(snapshot.getStdDev), getDurationUnit))
output.print(" median = %2.2f %s%n".format(convertDuration(snapshot.getMedian), getDurationUnit))
output.print(" 75%% <= %2.2f %s%n".format(convertDuration(snapshot.get75thPercentile), getDurationUnit))
output.print(" 95%% <= %2.2f %s%n".format(convertDuration(snapshot.get95thPercentile), getDurationUnit))
output.print(" 98%% <= %2.2f %s%n".format(convertDuration(snapshot.get98thPercentile), getDurationUnit))
output.print(" 99%% <= %2.2f %s%n".format(convertDuration(snapshot.get99thPercentile), getDurationUnit))
output.print(" 99.9%% <= %2.2f %s%n".format(convertDuration(snapshot.get999thPercentile), getDurationUnit))
}
private def printKnownOpsInTimespanCounter(counter: KnownOpsInTimespanTimer) {
import concurrent.duration._
import PrettyDuration._
output.print(" ops = %d%n".format(counter.getCount))
output.print(" time = %s%n".format(counter.elapsedTime.nanos.pretty))
output.print(" ops/s = %2.2f%n".format(counter.opsPerSecond))
output.print(" avg = %s%n".format(counter.avgDuration.nanos.pretty))
}
private def printHdrHistogram(hist: HdrHistogram) {
val data = hist.getData
val unit = hist.unit
output.print(" min = %d %s%n".format(data.getMinValue, unit))
output.print(" max = %d %s%n".format(data.getMaxValue, unit))
output.print(" mean = %2.2f %s%n".format(data.getMean, unit))
output.print(" stddev = %2.2f%n".format(data.getStdDeviation))
output.print(" 75%% <= %d %s%n".format(data.getValueAtPercentile(75.0), unit))
output.print(" 95%% <= %d %s%n".format(data.getValueAtPercentile(95.0), unit))
output.print(" 98%% <= %d %s%n".format(data.getValueAtPercentile(98.0), unit))
output.print(" 99%% <= %d %s%n".format(data.getValueAtPercentile(99.0), unit))
output.print(" 99.9%% <= %d %s%n".format(data.getValueAtPercentile(99.9), unit))
if (verbose)
data.outputPercentileDistribution(output, 1)
}
private def printAveragingGauge(gauge: AveragingGauge) {
output.print(" avg = %2.2f%n".format(gauge.getValue))
}
private def printWithBanner(s: String, c: Char) {
output.print(s)
output.print(' ')
var i: Int = 0
while (i < (ConsoleWidth - s.length - 1)) {
output.print(c)
i += 1
}
output.println()
}
/** Required for getting simple names of refined instances */
private def simpleName(clazz: Class[_]): String = {
val n = clazz.getName
val i = n.lastIndexOf('.')
n.substring(i + 1)
}
}
Other Akka source code examplesHere is a short list of links related to this Akka AkkaConsoleReporter.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.