diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/Gauge.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/metric/Gauge.scala | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/Gauge.scala b/kamon-core/src/main/scala/kamon/metric/Gauge.scala new file mode 100644 index 00000000..11876e99 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/metric/Gauge.scala @@ -0,0 +1,40 @@ +package kamon.metric + +import java.util.concurrent.atomic.AtomicLong + +import kamon.util.MeasurementUnit + +trait Gauge { + def measurementUnit: MeasurementUnit + + def increment(): Unit + def increment(times: Long): Unit + def decrement(): Unit + def decrement(times: Long): Unit + def set(value: Long): Unit +} + + +class AtomicLongGauge(name: String, tags: Map[String, String], val measurementUnit: MeasurementUnit) + extends SnapshotableGauge { + + 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(): MetricValue = + MetricValue(name, tags, measurementUnit, currentValue.get()) +} |