From f5e70695ad0124cd5cd648d186d5174c7b121266 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Thu, 27 Apr 2017 23:48:39 +0200 Subject: implement HdrHistogram and Distribution snapshots --- .../scala/kamon/metric/instrument/Counter.scala | 31 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala') diff --git a/kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala b/kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala index 4a9edd77..10b9c3a6 100644 --- a/kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala +++ b/kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala @@ -1,11 +1,34 @@ -package kamon.metric.instrument +package kamon +package metric +package instrument -import kamon.metric.Entity +import java.util.concurrent.atomic.LongAdder + +import com.typesafe.scalalogging.StrictLogging +import kamon.util.MeasurementUnit trait Counter { + def measurementUnit: MeasurementUnit + def increment(): Unit + def increment(times: Long): Unit } -object Counter { - def apply(entity: Entity, name: String): Counter = ??? +class LongAdderCounter(entity: Entity, name: String, val measurementUnit: MeasurementUnit) + extends Counter with SingleValueSnapshotInstrument with StrictLogging { + + private val adder = new LongAdder() + + def increment(): Unit = + adder.increment() + + def increment(times: Long): Unit = { + if (times >= 0) + adder.add(times) + else + logger.warn(s"Ignored attempt to decrement counter [$name] on entity [$entity]") + } + + def snapshot(): SingleValueSnapshot = + SingleValueSnapshot(name, measurementUnit, adder.sumThenReset()) } -- cgit v1.2.3