diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-04-27 23:48:39 +0200 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-04-27 23:48:39 +0200 |
commit | f5e70695ad0124cd5cd648d186d5174c7b121266 (patch) | |
tree | 0f0f86af677653ce45435c127c545656f45e81df /kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala | |
parent | 0fe9e267c7cec7a176fc8b0a43e73e12b6606b9f (diff) | |
download | Kamon-f5e70695ad0124cd5cd648d186d5174c7b121266.tar.gz Kamon-f5e70695ad0124cd5cd648d186d5174c7b121266.tar.bz2 Kamon-f5e70695ad0124cd5cd648d186d5174c7b121266.zip |
implement HdrHistogram and Distribution snapshots
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/metric/instrument/Counter.scala | 31 |
1 files changed, 27 insertions, 4 deletions
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()) } |