diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/Counter.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/metric/Counter.scala | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/Counter.scala b/kamon-core/src/main/scala/kamon/metric/Counter.scala new file mode 100644 index 00000000..38d312f0 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/metric/Counter.scala @@ -0,0 +1,32 @@ +package kamon.metric + +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 +} + +class LongAdderCounter(name: String, tags: Map[String, String], val measurementUnit: MeasurementUnit) + extends SnapshotableCounter 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]") + } + + def snapshot(): MetricValue = + MetricValue(name, tags, measurementUnit, adder.sumThenReset()) +} |