aboutsummaryrefslogtreecommitdiff
path: root/kamon-system-metrics
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2015-11-15 19:42:59 -0300
committerDiego <diegolparra@gmail.com>2015-11-15 19:42:59 -0300
commit159f43381b2f4fd3c8039af8cc7e3272e2f9d936 (patch)
treef06391f9a7f3f1e6b207ded3c06f280294f07f51 /kamon-system-metrics
parent539b54c3b43c68ad418ca77032f557a4da3e3a59 (diff)
parentecf051478e80ba4ce6e7c8a169feefa771cc8e17 (diff)
downloadKamon-159f43381b2f4fd3c8039af8cc7e3272e2f9d936.tar.gz
Kamon-159f43381b2f4fd3c8039af8cc7e3272e2f9d936.tar.bz2
Kamon-159f43381b2f4fd3c8039af8cc7e3272e2f9d936.zip
wip: merge from master and fix some test
Diffstat (limited to 'kamon-system-metrics')
-rw-r--r--kamon-system-metrics/src/main/scala/kamon/system/jmx/MemoryUsageMetrics.scala16
-rw-r--r--kamon-system-metrics/src/main/scala/kamon/system/sigar/SigarMetricsUpdater.scala3
-rw-r--r--kamon-system-metrics/src/main/scala/kamon/system/sigar/ULimitMetrics.scala20
-rw-r--r--kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala14
4 files changed, 44 insertions, 9 deletions
diff --git a/kamon-system-metrics/src/main/scala/kamon/system/jmx/MemoryUsageMetrics.scala b/kamon-system-metrics/src/main/scala/kamon/system/jmx/MemoryUsageMetrics.scala
index ef9d47a6..41681459 100644
--- a/kamon-system-metrics/src/main/scala/kamon/system/jmx/MemoryUsageMetrics.scala
+++ b/kamon-system-metrics/src/main/scala/kamon/system/jmx/MemoryUsageMetrics.scala
@@ -32,13 +32,13 @@ import scala.collection.convert.WrapAsScala
class MemoryUsageMetrics(instrumentFactory: InstrumentFactory,
beansWithNames: Iterable[MemoryUsageWithMetricName]) extends GenericEntityRecorder(instrumentFactory) {
beansWithNames.foreach {
- case MemoryUsageWithMetricName(name, bean) ⇒
+ case MemoryUsageWithMetricName(name, beanFun) ⇒
gauge(name + "-used", Memory.Bytes, () ⇒ {
- bean.getUsed
+ beanFun().getUsed
})
gauge(name + "-max", Memory.Bytes, () ⇒ {
- val max = bean.getMax
+ val max = beanFun().getMax
// .getMax can return -1 if the max is not defined.
if (max >= 0) max
@@ -46,7 +46,7 @@ class MemoryUsageMetrics(instrumentFactory: InstrumentFactory,
})
gauge(name + "-committed", Memory.Bytes, () ⇒ {
- bean.getCommitted
+ beanFun().getCommitted
})
}
}
@@ -54,9 +54,9 @@ class MemoryUsageMetrics(instrumentFactory: InstrumentFactory,
/**
* Objects of this kind may be passed to instances of [[MemoryUsageMetrics]] for data collection.
* @param metricName The sanitized name for a metric.
- * @param bean The data source for metrics.
+ * @param beanFun Function returning the data source for metrics.
*/
-private[jmx] final case class MemoryUsageWithMetricName(metricName: String, bean: MemoryUsage)
+private[jmx] final case class MemoryUsageWithMetricName(metricName: String, beanFun: () ⇒ MemoryUsage)
/**
* Memory Pool metrics, as reported by JMX:
@@ -79,7 +79,7 @@ object MemoryUsageMetrics extends JmxSystemMetricRecorderCompanion("jmx-memory")
def apply(instrumentFactory: InstrumentFactory): MemoryUsageMetrics =
new MemoryUsageMetrics(instrumentFactory,
- MemoryUsageWithMetricName("non-heap", memoryMXBean.getNonHeapMemoryUsage) ::
- MemoryUsageWithMetricName("heap", memoryMXBean.getHeapMemoryUsage) ::
+ MemoryUsageWithMetricName("non-heap", () ⇒ memoryMXBean.getNonHeapMemoryUsage) ::
+ MemoryUsageWithMetricName("heap", () ⇒ memoryMXBean.getHeapMemoryUsage) ::
usagesWithNames)
}
diff --git a/kamon-system-metrics/src/main/scala/kamon/system/sigar/SigarMetricsUpdater.scala b/kamon-system-metrics/src/main/scala/kamon/system/sigar/SigarMetricsUpdater.scala
index 69bc00ec..c0da6dc1 100644
--- a/kamon-system-metrics/src/main/scala/kamon/system/sigar/SigarMetricsUpdater.scala
+++ b/kamon-system-metrics/src/main/scala/kamon/system/sigar/SigarMetricsUpdater.scala
@@ -37,7 +37,8 @@ class SigarMetricsUpdater(refreshInterval: FiniteDuration) extends Actor {
LoadAverageMetrics.register(sigar, metricsExtension, logger),
MemoryMetrics.register(sigar, metricsExtension, logger),
NetworkMetrics.register(sigar, metricsExtension, logger),
- ProcessCpuMetrics.register(sigar, metricsExtension, logger))
+ ProcessCpuMetrics.register(sigar, metricsExtension, logger),
+ ULimitMetrics.register(sigar, metricsExtension, logger))
val refreshSchedule = context.system.scheduler.schedule(refreshInterval, refreshInterval, self, UpdateSigarMetrics)(context.dispatcher)
diff --git a/kamon-system-metrics/src/main/scala/kamon/system/sigar/ULimitMetrics.scala b/kamon-system-metrics/src/main/scala/kamon/system/sigar/ULimitMetrics.scala
new file mode 100644
index 00000000..314c8450
--- /dev/null
+++ b/kamon-system-metrics/src/main/scala/kamon/system/sigar/ULimitMetrics.scala
@@ -0,0 +1,20 @@
+package kamon.system.sigar
+
+import akka.event.LoggingAdapter
+import kamon.metric.GenericEntityRecorder
+import kamon.metric.instrument.InstrumentFactory
+import org.hyperic.sigar.Sigar
+
+class ULimitMetrics(sigar: Sigar, instrumentFactory: InstrumentFactory, logger: LoggingAdapter) extends GenericEntityRecorder(instrumentFactory) with SigarMetric {
+ val pid = sigar.getPid
+ val openFiles = histogram("open-files")
+
+ def update(): Unit = {
+ openFiles.record(sigar.getProcFd(pid).getTotal)
+ }
+}
+
+object ULimitMetrics extends SigarMetricRecorderCompanion("ulimit") {
+ def apply(sigar: Sigar, instrumentFactory: InstrumentFactory, logger: LoggingAdapter): ULimitMetrics =
+ new ULimitMetrics(sigar, instrumentFactory, logger)
+} \ No newline at end of file
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 7af704d5..452ee0c7 100644
--- a/kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala
+++ b/kamon-system-metrics/src/test/scala/kamon/metrics/SystemMetricsSpec.scala
@@ -74,6 +74,20 @@ class SystemMetricsSpec extends BaseKamonSpec("system-metrics-spec") with Redire
memoryMetrics.gauge("non-heap-committed").get.numberOfMeasurements should be > 0L
}
+ "record correctly updatable values for heap metrics" in {
+ Thread.sleep(3000)
+
+ val data = new Array[Byte](20 * 1024 * 1024) // 20 Mb of data
+
+ Thread.sleep(3000)
+
+ val memoryMetrics = takeSnapshotOf("jmx-memory", "system-metric")
+ val heapUsed = memoryMetrics.gauge("heap-used").get
+
+ heapUsed.max should be > heapUsed.min
+ data.size should be > 0 // Just for data usage
+ }
+
"record daemon, count and peak jvm threads metrics" in {
val threadsMetrics = takeSnapshotOf("threads", "system-metric")