aboutsummaryrefslogtreecommitdiff
path: root/kamon-core
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2014-07-08 23:06:42 -0300
committerIvan Topolnjak <ivantopo@gmail.com>2014-07-08 23:06:42 -0300
commit2a90bdaaec12a3d2157909a2ab8840d81de3c984 (patch)
treeee909debddb869c0ce5b32865ca7d4cbde8ebeac /kamon-core
parent53e9dc6e7211db5538efc0b915ec6f1881da59ad (diff)
downloadKamon-2a90bdaaec12a3d2157909a2ab8840d81de3c984.tar.gz
Kamon-2a90bdaaec12a3d2157909a2ab8840d81de3c984.tar.bz2
Kamon-2a90bdaaec12a3d2157909a2ab8840d81de3c984.zip
+ core: create the new KamonStandalone helper, closes #47
Diffstat (limited to 'kamon-core')
-rw-r--r--kamon-core/src/main/scala/kamon/metric/UserMetrics.scala24
-rw-r--r--kamon-core/src/main/scala/kamon/standalone/KamonStandalone.scala54
-rw-r--r--kamon-core/src/test/scala/kamon/metric/UserMetricsSpec.scala23
3 files changed, 99 insertions, 2 deletions
diff --git a/kamon-core/src/main/scala/kamon/metric/UserMetrics.scala b/kamon-core/src/main/scala/kamon/metric/UserMetrics.scala
index dea03968..f3803d37 100644
--- a/kamon-core/src/main/scala/kamon/metric/UserMetrics.scala
+++ b/kamon-core/src/main/scala/kamon/metric/UserMetrics.scala
@@ -35,6 +35,18 @@ class UserMetricsExtension(system: ExtendedActorSystem) extends Kamon.Extension
def registerGauge(name: String, precision: Histogram.Precision, highestTrackableValue: Long,
refreshInterval: FiniteDuration)(currentValueCollector: Gauge.CurrentValueCollector): Gauge =
userMetricsRecorder.buildGauge(name, precision, highestTrackableValue, refreshInterval, currentValueCollector)
+
+ def removeHistogram(name: String): Unit =
+ userMetricsRecorder.removeHistogram(name)
+
+ def removeCounter(name: String): Unit =
+ userMetricsRecorder.removeCounter(name)
+
+ def removeMinMaxCounter(name: String): Unit =
+ userMetricsRecorder.removeMinMaxCounter(name)
+
+ def removeGauge(name: String): Unit =
+ userMetricsRecorder.removeGauge(name)
}
object UserMetrics extends ExtensionId[UserMetricsExtension] with ExtensionIdProvider with MetricGroupIdentity {
@@ -86,6 +98,18 @@ object UserMetrics extends ExtensionId[UserMetricsExtension] with ExtensionIdPro
def buildGauge(name: String)(currentValueCollector: Gauge.CurrentValueCollector): Gauge =
gauges.getOrElseUpdate(name, Gauge.fromConfig(defaultGaugePrecisionConfig, system)(currentValueCollector))
+ def removeHistogram(name: String): Unit =
+ histograms.remove(name)
+
+ def removeCounter(name: String): Unit =
+ counters.remove(name)
+
+ def removeMinMaxCounter(name: String): Unit =
+ minMaxCounters.remove(name).map(_.cleanup)
+
+ def removeGauge(name: String): Unit =
+ gauges.remove(name).map(_.cleanup)
+
def collect(context: CollectionContext): UserMetricsSnapshot = {
val histogramSnapshots = histograms.map {
case (name, histogram) ⇒
diff --git a/kamon-core/src/main/scala/kamon/standalone/KamonStandalone.scala b/kamon-core/src/main/scala/kamon/standalone/KamonStandalone.scala
index 258cc1b2..490bc127 100644
--- a/kamon-core/src/main/scala/kamon/standalone/KamonStandalone.scala
+++ b/kamon-core/src/main/scala/kamon/standalone/KamonStandalone.scala
@@ -1,11 +1,61 @@
package kamon.standalone
import akka.actor.ActorSystem
+import com.typesafe.config.Config
+import kamon.Kamon
+import kamon.metric.UserMetrics
+import kamon.metric.instrument.{ Gauge, MinMaxCounter, Counter, Histogram }
+
+import scala.concurrent.duration.FiniteDuration
+
+trait KamonStandalone {
+ private[kamon] def system: ActorSystem
+
+ def registerHistogram(name: String, precision: Histogram.Precision, highestTrackableValue: Long): Histogram =
+ Kamon(UserMetrics)(system).registerHistogram(name, precision, highestTrackableValue)
+
+ def registerHistogram(name: String): Histogram =
+ Kamon(UserMetrics)(system).registerHistogram(name)
+
+ def registerCounter(name: String): Counter =
+ Kamon(UserMetrics)(system).registerCounter(name)
+
+ def registerMinMaxCounter(name: String, precision: Histogram.Precision, highestTrackableValue: Long,
+ refreshInterval: FiniteDuration): MinMaxCounter =
+ Kamon(UserMetrics)(system).registerMinMaxCounter(name, precision, highestTrackableValue, refreshInterval)
+
+ def registerMinMaxCounter(name: String): MinMaxCounter =
+ Kamon(UserMetrics)(system).registerMinMaxCounter(name)
+
+ def registerGauge(name: String)(currentValueCollector: Gauge.CurrentValueCollector): Gauge =
+ Kamon(UserMetrics)(system).registerGauge(name)(currentValueCollector)
+
+ def registerGauge(name: String, precision: Histogram.Precision, highestTrackableValue: Long,
+ refreshInterval: FiniteDuration)(currentValueCollector: Gauge.CurrentValueCollector): Gauge =
+ Kamon(UserMetrics)(system).registerGauge(name, precision, highestTrackableValue, refreshInterval)(currentValueCollector)
+
+ def removeHistogram(name: String): Unit =
+ Kamon(UserMetrics)(system).removeHistogram(name)
+
+ def removeCounter(name: String): Unit =
+ Kamon(UserMetrics)(system).removeCounter(name)
+
+ def removeMinMaxCounter(name: String): Unit =
+ Kamon(UserMetrics)(system).removeMinMaxCounter(name)
+
+ def removeGauge(name: String): Unit =
+ Kamon(UserMetrics)(system).removeGauge(name)
+}
object KamonStandalone {
- private lazy val system = ActorSystem("kamon-standalone")
- def registerHistogram(name: String) = {
+ def buildFromConfig(config: Config): KamonStandalone = buildFromConfig(config, "kamon-standalone")
+ def buildFromConfig(config: Config, actorSystemName: String): KamonStandalone = new KamonStandalone {
+ val system: ActorSystem = ActorSystem(actorSystemName, config)
}
}
+
+object EmbeddedKamonStandalone extends KamonStandalone {
+ private[kamon] lazy val system = ActorSystem("kamon-standalone")
+} \ No newline at end of file
diff --git a/kamon-core/src/test/scala/kamon/metric/UserMetricsSpec.scala b/kamon-core/src/test/scala/kamon/metric/UserMetricsSpec.scala
index 1790dc51..385c8404 100644
--- a/kamon-core/src/test/scala/kamon/metric/UserMetricsSpec.scala
+++ b/kamon-core/src/test/scala/kamon/metric/UserMetricsSpec.scala
@@ -112,6 +112,29 @@ class UserMetricsSpec extends TestKitBase with WordSpecLike with Matchers with I
}
}
+ "allow unregistering metrics from the extension" in {
+ val userMetricsRecorder = Kamon(Metrics).register(UserMetrics, UserMetrics.Factory).get
+ val counter = Kamon(UserMetrics).registerCounter("counter-for-remove")
+ val histogram = Kamon(UserMetrics).registerHistogram("histogram-for-remove")
+ val minMaxCounter = Kamon(UserMetrics).registerMinMaxCounter("min-max-counter-for-remove")
+ val gauge = Kamon(UserMetrics).registerGauge("gauge-for-remove") { () ⇒ 2L }
+
+ userMetricsRecorder.counters.keys should contain("counter-for-remove")
+ userMetricsRecorder.histograms.keys should contain("histogram-for-remove")
+ userMetricsRecorder.minMaxCounters.keys should contain("min-max-counter-for-remove")
+ userMetricsRecorder.gauges.keys should contain("gauge-for-remove")
+
+ Kamon(UserMetrics).removeCounter("counter-for-remove")
+ Kamon(UserMetrics).removeHistogram("histogram-for-remove")
+ Kamon(UserMetrics).removeMinMaxCounter("min-max-counter-for-remove")
+ Kamon(UserMetrics).removeGauge("gauge-for-remove")
+
+ userMetricsRecorder.counters.keys should not contain ("counter-for-remove")
+ userMetricsRecorder.histograms.keys should not contain ("histogram-for-remove")
+ userMetricsRecorder.minMaxCounters.keys should not contain ("min-max-counter-for-remove")
+ userMetricsRecorder.gauges.keys should not contain ("gauge-for-remove")
+ }
+
"generate a snapshot containing all the registered user metrics and reset all instruments" in {
val context = Kamon(Metrics).buildDefaultCollectionContext
val userMetricsRecorder = Kamon(Metrics).register(UserMetrics, UserMetrics.Factory).get