aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/metric/instrument
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/instrument')
-rw-r--r--kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala16
-rw-r--r--kamon-core/src/main/scala/kamon/metric/instrument/UnitOfMeasurement.scala28
2 files changed, 26 insertions, 18 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala b/kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala
index 59b4b443..089dbeec 100644
--- a/kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala
+++ b/kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala
@@ -33,14 +33,6 @@ trait InstrumentSnapshot {
def merge(that: InstrumentSnapshot, context: CollectionContext): InstrumentSnapshot
}
-class InstrumentType private[kamon] (val id: Int) extends AnyVal
-object InstrumentTypes {
- val Histogram = new InstrumentType(1)
- val MinMaxCounter = new InstrumentType(2)
- val Gauge = new InstrumentType(3)
- val Counter = new InstrumentType(4)
-}
-
trait CollectionContext {
def buffer: LongBuffer
}
@@ -51,3 +43,11 @@ object CollectionContext {
}
}
+sealed trait InstrumentType
+
+object InstrumentTypes {
+ case object Histogram extends InstrumentType
+ case object MinMaxCounter extends InstrumentType
+ case object Gauge extends InstrumentType
+ case object Counter extends InstrumentType
+}
diff --git a/kamon-core/src/main/scala/kamon/metric/instrument/UnitOfMeasurement.scala b/kamon-core/src/main/scala/kamon/metric/instrument/UnitOfMeasurement.scala
index f2a061d1..c5a1b81a 100644
--- a/kamon-core/src/main/scala/kamon/metric/instrument/UnitOfMeasurement.scala
+++ b/kamon-core/src/main/scala/kamon/metric/instrument/UnitOfMeasurement.scala
@@ -16,17 +16,20 @@
package kamon.metric.instrument
+/**
+ * A UnitOfMeasurement implementation describes the magnitude of a quantity being measured, such as Time and computer
+ * Memory space. Kamon uses UnitOfMeasurement implementations just as a informative companion to metrics inside entity
+ * recorders and might be used to scale certain kinds of measurements in metric backends.
+ */
trait UnitOfMeasurement {
def name: String
def label: String
- def factor: Double
}
object UnitOfMeasurement {
case object Unknown extends UnitOfMeasurement {
val name = "unknown"
val label = "unknown"
- val factor = 1D
}
def isUnknown(uom: UnitOfMeasurement): Boolean =
@@ -35,19 +38,18 @@ object UnitOfMeasurement {
def isTime(uom: UnitOfMeasurement): Boolean =
uom.isInstanceOf[Time]
+ def isMemory(uom: UnitOfMeasurement): Boolean =
+ uom.isInstanceOf[Memory]
+
}
+/**
+ * UnitOfMeasurement representing time.
+ */
case class Time(factor: Double, label: String) extends UnitOfMeasurement {
val name = "time"
- /**
- * Scale a value from this scale factor to a different scale factor.
- *
- * @param toUnit Time unit of the expected result.
- * @param value Value to scale.
- * @return Equivalent of value on the target time unit.
- */
- def scale(toUnit: Time)(value: Long): Double =
+ def scale(toUnit: Time)(value: Double): Double =
(value * factor) / toUnit.factor
}
@@ -58,8 +60,14 @@ object Time {
val Seconds = Time(1, "s")
}
+/**
+ * UnitOfMeasurement representing computer memory space.
+ */
case class Memory(factor: Double, label: String) extends UnitOfMeasurement {
val name = "bytes"
+
+ def scale(toUnit: Memory)(value: Double): Double =
+ (value * factor) / toUnit.factor
}
object Memory {