aboutsummaryrefslogtreecommitdiff
path: root/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala')
-rw-r--r--kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala30
1 files changed, 24 insertions, 6 deletions
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 bb7fa105..8094cac4 100644
--- a/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
+++ b/kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
@@ -158,16 +158,34 @@ class SystemMetricsCollector(collectInterval: FiniteDuration) extends Actor with
rcs.global.record(contextSwitches)
}
+ def verifiedSigarInstance: SigarProxy = {
+ val sigar = new Sigar()
+ printBanner(sigar)
+ sigar
+ }
+
+ def provisionSigarLibrary: Unit = {
+ val folder = context.system.settings.config.getString("kamon.sigar.folder")
+ SigarProvisioner.provision(new File(folder))
+ }
+
def createSigarInstance: SigarProxy = {
- val tempFolder = new File(System.getProperty("java.io.tmpdir"))
+ // 1) Assume that library is already provisioned.
+ try {
+ return verifiedSigarInstance
+ } catch {
+ // Not using [[Try]] - any error is non-fatal in this case.
+ case e: Throwable ⇒ log.info(s"Sigar is not yet provisioned: ${e}")
+ }
+
+ // 2) Attempt to provision library via sigar-loader.
try {
- SigarProvisioner.provision(tempFolder)
- val sigar = new Sigar()
- printBanner(sigar)
- sigar
+ provisionSigarLibrary
+ return verifiedSigarInstance
} catch {
- case NonFatal(t) ⇒ throw new UnexpectedSigarException("Failed to load sigar")
+ // Not using [[Try]] - any error is non-fatal in this case.
+ case e: Throwable ⇒ throw new UnexpectedSigarException(s"Failed to load Sigar: ${e}")
}
}
}