From f24c1a7a4b96dcfb2609c6f512f34dd6d54de439 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Fri, 28 Apr 2017 14:56:02 +0200 Subject: implement MinMaxCounter and Gauge, include them in the InstrumentFactory --- .../main/scala/kamon/metric/instrument/Gauge.scala | 27 ++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'kamon-core/src/main/scala/kamon/metric/instrument/Gauge.scala') diff --git a/kamon-core/src/main/scala/kamon/metric/instrument/Gauge.scala b/kamon-core/src/main/scala/kamon/metric/instrument/Gauge.scala index bb31e30a..5263d258 100644 --- a/kamon-core/src/main/scala/kamon/metric/instrument/Gauge.scala +++ b/kamon-core/src/main/scala/kamon/metric/instrument/Gauge.scala @@ -1,5 +1,7 @@ package kamon.metric.instrument +import java.util.concurrent.atomic.AtomicLong + import kamon.metric.Entity import kamon.util.MeasurementUnit @@ -13,6 +15,27 @@ trait Gauge { def set(value: Long): Unit } -object Gauge { - def apply(entity: Entity, name: String): Gauge = ??? + +class AtomicLongGauge(entity: Entity, name: String, val measurementUnit: MeasurementUnit) + extends Gauge with SingleValueSnapshotInstrument { + + private val currentValue = new AtomicLong(0L) + + def increment(): Unit = + currentValue.incrementAndGet() + + def increment(times: Long): Unit = + currentValue.addAndGet(times) + + def decrement(): Unit = + currentValue.decrementAndGet() + + def decrement(times: Long): Unit = + currentValue.addAndGet(-times) + + def set(value: Long): Unit = + currentValue.set(value) + + def snapshot(): SingleValueSnapshot = + SingleValueSnapshot(name, measurementUnit, currentValue.get()) } -- cgit v1.2.3