aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2015-01-29 03:42:27 +0100
committerIvan Topolnjak <ivantopo@gmail.com>2015-01-29 03:42:27 +0100
commita80034229b12d42b420a9b2cc10bf23f8c5f613b (patch)
tree812d3756ffb1dd74f014a07959c79fd2e651f943 /kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala
parent1f873f6f28b92db54d97ce82c967866de41008d1 (diff)
parentedceb598dd986c7a0b22f2f89e8dc9f8c0da19e8 (diff)
downloadKamon-a80034229b12d42b420a9b2cc10bf23f8c5f613b.tar.gz
Kamon-a80034229b12d42b420a9b2cc10bf23f8c5f613b.tar.bz2
Kamon-a80034229b12d42b420a9b2cc10bf23f8c5f613b.zip
Merge branch 'wip/improve-metric-recorders-infrastructure'
Conflicts: kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala56
1 files changed, 56 insertions, 0 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
new file mode 100644
index 00000000..8cacc767
--- /dev/null
+++ b/kamon-core/src/main/scala/kamon/metric/instrument/Instrument.scala
@@ -0,0 +1,56 @@
+package kamon.metric.instrument
+
+import java.nio.LongBuffer
+
+import akka.actor.{ Scheduler, Cancellable }
+import akka.dispatch.MessageDispatcher
+import scala.concurrent.duration.FiniteDuration
+
+private[kamon] trait Instrument {
+ type SnapshotType <: InstrumentSnapshot
+
+ def collect(context: CollectionContext): SnapshotType
+ def cleanup: Unit
+}
+
+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
+}
+
+object CollectionContext {
+ def apply(longBufferSize: Int): CollectionContext = new CollectionContext {
+ val buffer: LongBuffer = LongBuffer.allocate(longBufferSize)
+ }
+}
+
+trait RefreshScheduler {
+ def schedule(interval: FiniteDuration, refresh: () ⇒ Unit): Cancellable
+}
+
+object RefreshScheduler {
+ val NoopScheduler = new RefreshScheduler {
+ def schedule(interval: FiniteDuration, refresh: () ⇒ Unit): Cancellable = new Cancellable {
+ override def isCancelled: Boolean = true
+ override def cancel(): Boolean = true
+ }
+ }
+
+ def apply(scheduler: Scheduler, dispatcher: MessageDispatcher): RefreshScheduler = new RefreshScheduler {
+ def schedule(interval: FiniteDuration, refresh: () ⇒ Unit): Cancellable =
+ scheduler.schedule(interval, interval)(refresh.apply())(dispatcher)
+ }
+
+ def create(scheduler: Scheduler, dispatcher: MessageDispatcher): RefreshScheduler = apply(scheduler, dispatcher)
+} \ No newline at end of file