From 0a8cf25a114d27250e1ebd68db70407a9ef73cc5 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Wed, 28 Jan 2015 05:08:23 +0100 Subject: = sysmetrics: protect file system and network metrics from sigar exceptions. --- .../src/main/scala/kamon/system/sigar/FileSystemMetrics.scala | 6 ++++-- .../src/main/scala/kamon/system/sigar/NetworkMetrics.scala | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'kamon-system-metrics') diff --git a/kamon-system-metrics/src/main/scala/kamon/system/sigar/FileSystemMetrics.scala b/kamon-system-metrics/src/main/scala/kamon/system/sigar/FileSystemMetrics.scala index dffebf5a..d34b6415 100644 --- a/kamon-system-metrics/src/main/scala/kamon/system/sigar/FileSystemMetrics.scala +++ b/kamon-system-metrics/src/main/scala/kamon/system/sigar/FileSystemMetrics.scala @@ -3,15 +3,17 @@ package kamon.system.sigar import kamon.metric.GenericEntityRecorder import kamon.metric.instrument.{ Memory, InstrumentFactory } import org.hyperic.sigar.{ DiskUsage, FileSystem, Sigar } +import scala.util.Try class FileSystemMetrics(instrumentFactory: InstrumentFactory) extends GenericEntityRecorder(instrumentFactory) with SigarMetric { val reads = DiffRecordingHistogram(histogram("file-system-reads", Memory.Bytes)) val writes = DiffRecordingHistogram(histogram("file-system-writes", Memory.Bytes)) - def sumOfAllFileSystems(sigar: Sigar, thunk: DiskUsage ⇒ Long): Long = { + def sumOfAllFileSystems(sigar: Sigar, thunk: DiskUsage ⇒ Long): Long = Try { val fileSystems = sigar.getFileSystemList.filter(_.getType == FileSystem.TYPE_LOCAL_DISK).map(_.getDevName).toSet fileSystems.map(i ⇒ thunk(sigar.getDiskUsage(i))).fold(0L)(_ + _) - } + + } getOrElse (0L) def update(sigar: Sigar): Unit = { reads.record(sumOfAllFileSystems(sigar, _.getReadBytes)) diff --git a/kamon-system-metrics/src/main/scala/kamon/system/sigar/NetworkMetrics.scala b/kamon-system-metrics/src/main/scala/kamon/system/sigar/NetworkMetrics.scala index fb33b7e4..abdae99f 100644 --- a/kamon-system-metrics/src/main/scala/kamon/system/sigar/NetworkMetrics.scala +++ b/kamon-system-metrics/src/main/scala/kamon/system/sigar/NetworkMetrics.scala @@ -3,6 +3,7 @@ package kamon.system.sigar import kamon.metric.GenericEntityRecorder import kamon.metric.instrument._ import org.hyperic.sigar.{ NetInterfaceStat, Sigar } +import scala.util.Try class NetworkMetrics(instrumentFactory: InstrumentFactory) extends GenericEntityRecorder(instrumentFactory) with SigarMetric { val receivedBytes = DiffRecordingHistogram(histogram("rx-bytes", Memory.Bytes)) @@ -12,10 +13,11 @@ class NetworkMetrics(instrumentFactory: InstrumentFactory) extends GenericEntity val receiveDrops = DiffRecordingHistogram(histogram("rx-dropped")) val transmitDrops = DiffRecordingHistogram(histogram("tx-dropped")) - def sumOfAllInterfaces(sigar: Sigar, thunk: NetInterfaceStat ⇒ Long): Long = { + def sumOfAllInterfaces(sigar: Sigar, thunk: NetInterfaceStat ⇒ Long): Long = Try { val interfaces = sigar.getNetInterfaceList.toList.filter(_ != "lo") interfaces.map(i ⇒ thunk(sigar.getNetInterfaceStat(i))).fold(0L)(_ + _) - } + + } getOrElse (0L) def update(sigar: Sigar): Unit = { receivedBytes.record(sumOfAllInterfaces(sigar, _.getRxBytes)) -- cgit v1.2.3