diff options
author | Ivan Topolnak <itopolnak@despegar.com> | 2014-03-07 18:08:01 -0300 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2014-03-11 21:14:53 -0300 |
commit | b6af84ab6b60b4ca6c0389c8c3622db3d3c27915 (patch) | |
tree | 1f89896820e36d59daadef7699b434de1051be42 /kamon-core/src/main/scala/kamon/metrics/instruments/ContinuousHdrRecorder.scala | |
parent | ccbcc55282251b5e6d4f41384730232a8f0e7d05 (diff) | |
download | Kamon-b6af84ab6b60b4ca6c0389c8c3622db3d3c27915.tar.gz Kamon-b6af84ab6b60b4ca6c0389c8c3622db3d3c27915.tar.bz2 Kamon-b6af84ab6b60b4ca6c0389c8c3622db3d3c27915.zip |
multiple fixes to the custom metrics collection facilities
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metrics/instruments/ContinuousHdrRecorder.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/metrics/instruments/ContinuousHdrRecorder.scala | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/metrics/instruments/ContinuousHdrRecorder.scala b/kamon-core/src/main/scala/kamon/metrics/instruments/ContinuousHdrRecorder.scala new file mode 100644 index 00000000..3a39ec69 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/metrics/instruments/ContinuousHdrRecorder.scala @@ -0,0 +1,52 @@ +/* + * ========================================================================================= + * Copyright © 2013 the kamon project <http://kamon.io/> + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + * ========================================================================================= + */ + +package kamon.metrics.instruments + +import org.HdrHistogram.HdrRecorder +import kamon.metrics.{ Scale, MetricSnapshotLike } + +/** + * This recorder keeps track of the last value recoded and automatically adds it after collecting a snapshot. This is + * useful in cases where the absence of recordings does not necessarily mean the absence of values. For example, if this + * recorder is used for recording the mailbox size of an actor, and it only gets updated upon message enqueue o dequeue, + * the absence of recordings during 1 second means that the size hasn't change (example: the actor being blocked doing + * some work) and it should keep its last known value, instead of dropping to zero and then going back to the real value + * after a new event is processed. + * + */ +class ContinuousHdrRecorder(highestTrackableValue: Long, significantValueDigits: Int, scale: Scale) + extends HdrRecorder(highestTrackableValue, significantValueDigits, scale) { + + @volatile private var lastRecordedValue: Long = 0 + + override def record(value: Long): Unit = { + lastRecordedValue = value + super.record(value) + } + + override def collect(): MetricSnapshotLike = { + val snapshot = super.collect() + super.record(lastRecordedValue) + + snapshot + } +} + +object ContinuousHdrRecorder { + def apply(highestTrackableValue: Long, significantValueDigits: Int, scale: Scale) = + new ContinuousHdrRecorder(highestTrackableValue, significantValueDigits, scale) +}
\ No newline at end of file |