|
Akka/Scala example source code file (MetricsKitOps.scala)
The MetricsKitOps.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.testkit.metrics
import com.codahale.metrics
import com.codahale.metrics._
import java.util
import com.codahale.metrics.jvm
import com.codahale.metrics.jvm.MemoryUsageGaugeSet
/**
* User Land operations provided by the [[MetricsKit]].
*
* Extracted to give easy overview of user-API detached from MetricsKit internals.
*/
private[akka] trait MetricsKitOps extends MetricKeyDSL {
this: MetricsKit ⇒
type MetricKey = MetricKeyDSL#MetricKey
/** Simple thread-safe counter, backed by [[LongAdder]] so can pretty efficiently work even when hit by multiple threads */
def counter(key: MetricKey): Counter = registry.counter(key.toString)
/** Simple averaging Gauge, which exposes an arithmetic mean of the values added to it. */
def averageGauge(key: MetricKey): AveragingGauge = getOrRegister(key.toString, new AveragingGauge)
/**
* Used to measure timing of known number of operations over time.
* While not being the most percise, it allows to measure a coarse op/s without injecting counters to the measured operation (potentially hot-loop).
*
* Do not use for short running pieces of code.
*/
def timedWithKnownOps[T](key: MetricKey, ops: Long)(run: ⇒ T): T = {
val c = getOrRegister(key.toString, new KnownOpsInTimespanTimer(expectedOps = ops))
try run finally c.stop()
}
/**
* Use when measuring for 9x'th percentiles as well as min / max / mean values.
*
* Backed by [[HdrHistogram]].
*
* @param unitString just for human readable output, during console printing
*/
def hdrHistogram(key: MetricKey, highestTrackableValue: Long, numberOfSignificantValueDigits: Int, unitString: String = ""): HdrHistogram =
getOrRegister((key / "hdr-histogram").toString, new HdrHistogram(highestTrackableValue, numberOfSignificantValueDigits, unitString))
/**
* Use when measuring for 9x'th percentiles as well as min / max / mean values.
*
* Backed by [[ExponentiallyDecayingReservoir]].
*/
def histogram(key: MetricKey): Histogram = {
registry.histogram((key / "histogram").toString)
}
/** Yet another delegate to `System.gc()` */
def gc() {
// todo add some form of logging, to differentiate manual gc calls from "normal" ones
System.gc()
}
/**
* Enable memory measurements - will be logged by [[ScheduledReporter]]s if enabled.
* Must not be triggered multiple times - pass around the `MemoryUsageSnapshotting` if you need to measure different points.
*
* Also allows to [[MemoryUsageSnapshotting.getHeapSnapshot]] to obtain memory usage numbers at given point in time.
*/
def measureMemory(key: MetricKey): MemoryUsageGaugeSet with MemoryUsageSnapshotting = {
val gaugeSet = new jvm.MemoryUsageGaugeSet() with MemoryUsageSnapshotting {
val prefix = key / "mem"
}
registry.registerAll(gaugeSet)
gaugeSet
}
/** Enable GC measurements */
def measureGc(key: MetricKey) =
registry.registerAll(new jvm.GarbageCollectorMetricSet() with MetricsPrefix { val prefix = key / "gc" })
/** Enable File Descriptor measurements */
def measureFileDescriptors(key: MetricKey) =
registry.registerAll(new FileDescriptorMetricSet() with MetricsPrefix { val prefix = key / "file-descriptors" })
}
private[metrics] trait MetricsPrefix extends MetricSet {
def prefix: MetricKeyDSL#MetricKey
abstract override def getMetrics: util.Map[String, Metric] = {
// does not have to be fast, is only called once during registering registry
import collection.JavaConverters._
(super.getMetrics.asScala.map { case (k, v) ⇒ (prefix / k).toString -> v }).asJava
}
}
Other Akka source code examplesHere is a short list of links related to this Akka MetricsKitOps.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.