From bbd49fd9e94a20d38b3ef95bef4dba15c74ea3be Mon Sep 17 00:00:00 2001 From: Diego Date: Fri, 21 Nov 2014 14:54:50 -0300 Subject: + system-metrics: introduce stolen metric --- kamon-system-metrics/src/main/resources/reference.conf | 4 ++++ .../src/main/scala/kamon/metrics/CPUMetrics.scala | 16 ++++++++++------ .../main/scala/kamon/system/SystemMetricsCollector.scala | 1 + .../src/test/scala/kamon/metrics/SystemMetricsSpec.scala | 7 ++++++- 4 files changed, 21 insertions(+), 7 deletions(-) (limited to 'kamon-system-metrics') diff --git a/kamon-system-metrics/src/main/resources/reference.conf b/kamon-system-metrics/src/main/resources/reference.conf index fbdb3b89..0fab129f 100644 --- a/kamon-system-metrics/src/main/resources/reference.conf +++ b/kamon-system-metrics/src/main/resources/reference.conf @@ -34,6 +34,10 @@ kamon { highest-trackable-value = 999 significant-value-digits = 2 } + stolen ={ + highest-trackable-value = 999 + significant-value-digits = 2 + } } network { diff --git a/kamon-system-metrics/src/main/scala/kamon/metrics/CPUMetrics.scala b/kamon-system-metrics/src/main/scala/kamon/metrics/CPUMetrics.scala index ef7f225c..20789039 100644 --- a/kamon-system-metrics/src/main/scala/kamon/metrics/CPUMetrics.scala +++ b/kamon-system-metrics/src/main/scala/kamon/metrics/CPUMetrics.scala @@ -31,31 +31,33 @@ object CPUMetrics extends MetricGroupCategory { case object System extends MetricIdentity { val name = "system" } case object Wait extends MetricIdentity { val name = "wait" } case object Idle extends MetricIdentity { val name = "idle" } + case object Stolen extends MetricIdentity { val name = "stolen" } - case class CPUMetricRecorder(user: Histogram, system: Histogram, cpuWait: Histogram, idle: Histogram) + case class CPUMetricRecorder(user: Histogram, system: Histogram, cpuWait: Histogram, idle: Histogram, stolen: Histogram) extends MetricGroupRecorder { def collect(context: CollectionContext): MetricGroupSnapshot = { - CPUMetricSnapshot(user.collect(context), system.collect(context), cpuWait.collect(context), idle.collect(context)) + CPUMetricSnapshot(user.collect(context), system.collect(context), cpuWait.collect(context), idle.collect(context), stolen.collect(context)) } def cleanup: Unit = {} } - case class CPUMetricSnapshot(user: Histogram.Snapshot, system: Histogram.Snapshot, cpuWait: Histogram.Snapshot, idle: Histogram.Snapshot) + case class CPUMetricSnapshot(user: Histogram.Snapshot, system: Histogram.Snapshot, cpuWait: Histogram.Snapshot, idle: Histogram.Snapshot, stolen: Histogram.Snapshot) extends MetricGroupSnapshot { type GroupSnapshotType = CPUMetricSnapshot def merge(that: CPUMetricSnapshot, context: CollectionContext): GroupSnapshotType = { - CPUMetricSnapshot(user.merge(that.user, context), system.merge(that.system, context), cpuWait.merge(that.cpuWait, context), idle.merge(that.idle, context)) + CPUMetricSnapshot(user.merge(that.user, context), system.merge(that.system, context), cpuWait.merge(that.cpuWait, context), idle.merge(that.idle, context), stolen.merge(that.stolen, context)) } lazy val metrics: Map[MetricIdentity, MetricSnapshot] = Map( User -> user, System -> system, Wait -> cpuWait, - Idle -> idle) + Idle -> idle, + Stolen -> stolen) } val Factory = CPUMetricGroupFactory @@ -74,11 +76,13 @@ case object CPUMetricGroupFactory extends MetricGroupFactory { val systemConfig = settings.getConfig("system") val cpuWaitConfig = settings.getConfig("wait") val idleConfig = settings.getConfig("idle") + val stolenConfig = settings.getConfig("stolen") new CPUMetricRecorder( Histogram.fromConfig(userConfig), Histogram.fromConfig(systemConfig), Histogram.fromConfig(cpuWaitConfig), - Histogram.fromConfig(idleConfig)) + Histogram.fromConfig(idleConfig), + Histogram.fromConfig(stolenConfig)) } } diff --git a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala index 2fe66a43..b1ebf402 100644 --- a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala +++ b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala @@ -68,6 +68,7 @@ class SystemMetricsCollector(collectInterval: FiniteDuration) extends Actor with cpur.system.record(toLong(cpuPerc.getSys)) cpur.cpuWait.record(toLong(cpuPerc.getWait)) cpur.idle.record(toLong(cpuPerc.getIdle)) + cpur.stolen.record(toLong(cpuPerc.getStolen)) } private def recordProcessCpu(pcpur: ProcessCPUMetricsRecorder) = { diff --git a/kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala b/kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala index 4f7867ed..2d140a28 100644 --- a/kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala +++ b/kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala @@ -64,6 +64,10 @@ class SystemMetricsSpec extends TestKitBase with WordSpecLike with Matchers { | highest-trackable-value = 999999999 | significant-value-digits = 2 | } + | stolen { + | highest-trackable-value = 999999999 + | significant-value-digits = 2 + | } | } | process-cpu { | user { @@ -162,7 +166,7 @@ class SystemMetricsSpec extends TestKitBase with WordSpecLike with Matchers { """.stripMargin)) "the Kamon CPU Metrics" should { - "record user, system, wait, idle metrics" in new CPUMetricsListenerFixture { + "record user, system, wait, idle, stolen metrics" in new CPUMetricsListenerFixture { val metricsListener = subscribeToMetrics() val CPUMetrics = expectCPUMetrics(metricsListener, 3 seconds) @@ -170,6 +174,7 @@ class SystemMetricsSpec extends TestKitBase with WordSpecLike with Matchers { CPUMetrics.system.max should be >= 0L CPUMetrics.cpuWait.max should be >= 0L CPUMetrics.idle.max should be >= 0L + CPUMetrics.stolen.max should be >= 0L } } "the Kamon GC Metrics" should { -- cgit v1.2.3