diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metrics')
-rw-r--r-- | kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala | 17 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/metrics/instruments/CounterRecorder.scala | 36 |
2 files changed, 46 insertions, 7 deletions
diff --git a/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala b/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala index bd0d628b..c703d589 100644 --- a/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala +++ b/kamon-core/src/main/scala/kamon/metrics/ActorMetrics.scala @@ -1,6 +1,6 @@ /* * ========================================================================================= - * Copyright © 2013 the kamon project <http://kamon.io/> + * Copyright © 2013-2014 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 @@ -17,7 +17,7 @@ package kamon.metrics import com.typesafe.config.Config -import kamon.metrics.instruments.ContinuousHdrRecorder +import kamon.metrics.instruments.{ CounterRecorder, ContinuousHdrRecorder } import org.HdrHistogram.HdrRecorder case class ActorMetrics(name: String) extends MetricGroupIdentity { @@ -30,22 +30,24 @@ object ActorMetrics extends MetricGroupCategory { case object ProcessingTime extends MetricIdentity { val name, tag = "processing-time" } case object MailboxSize extends MetricIdentity { val name, tag = "mailbox-size" } case object TimeInMailbox extends MetricIdentity { val name, tag = "time-in-mailbox" } + case object ErrorCounter extends MetricIdentity { val name, tag = "errors" } - case class ActorMetricRecorder(processingTime: MetricRecorder, mailboxSize: MetricRecorder, timeInMailbox: MetricRecorder) + case class ActorMetricRecorder(processingTime: MetricRecorder, mailboxSize: MetricRecorder, timeInMailbox: MetricRecorder, errorCounter: MetricRecorder) extends MetricGroupRecorder { def collect: MetricGroupSnapshot = { - ActorMetricSnapshot(processingTime.collect(), mailboxSize.collect(), timeInMailbox.collect()) + ActorMetricSnapshot(processingTime.collect(), mailboxSize.collect(), timeInMailbox.collect(), errorCounter.collect()) } } - case class ActorMetricSnapshot(processingTime: MetricSnapshotLike, mailboxSize: MetricSnapshotLike, timeInMailbox: MetricSnapshotLike) + case class ActorMetricSnapshot(processingTime: MetricSnapshotLike, mailboxSize: MetricSnapshotLike, timeInMailbox: MetricSnapshotLike, errorCounter: MetricSnapshotLike) extends MetricGroupSnapshot { val metrics: Map[MetricIdentity, MetricSnapshotLike] = Map( (ProcessingTime -> processingTime), (MailboxSize -> mailboxSize), - (TimeInMailbox -> timeInMailbox)) + (TimeInMailbox -> timeInMailbox), + (ErrorCounter -> errorCounter)) } val Factory = new MetricGroupFactory { @@ -61,7 +63,8 @@ object ActorMetrics extends MetricGroupCategory { new ActorMetricRecorder( HdrRecorder(processingTimeConfig.highestTrackableValue, processingTimeConfig.significantValueDigits, Scale.Nano), ContinuousHdrRecorder(mailboxSizeConfig.highestTrackableValue, mailboxSizeConfig.significantValueDigits, Scale.Unit), - HdrRecorder(timeInMailboxConfig.highestTrackableValue, timeInMailboxConfig.significantValueDigits, Scale.Nano)) + HdrRecorder(timeInMailboxConfig.highestTrackableValue, timeInMailboxConfig.significantValueDigits, Scale.Nano), + CounterRecorder()) } } } diff --git a/kamon-core/src/main/scala/kamon/metrics/instruments/CounterRecorder.scala b/kamon-core/src/main/scala/kamon/metrics/instruments/CounterRecorder.scala new file mode 100644 index 00000000..1ab743d2 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/metrics/instruments/CounterRecorder.scala @@ -0,0 +1,36 @@ +package kamon.metrics.instruments +/* + * ========================================================================================= + * Copyright © 2013-2014 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. + * ========================================================================================= + */ + +import kamon.metrics._ +import kamon.metrics.MetricSnapshot.Measurement + +import jsr166e.LongAdder + +class CounterRecorder extends MetricRecorder { + private val counter = new LongAdder + + def record(value: Long): Unit = counter.add(value) + + def collect(): MetricSnapshotLike = { + val sum = counter.sumThenReset() + MetricSnapshot(InstrumentTypes.Counter, sum, Scale.Unit, Vector(Measurement(1, sum))) + } +} + +object CounterRecorder { + def apply() = new CounterRecorder +}
\ No newline at end of file |