aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala18
1 files changed, 17 insertions, 1 deletions
diff --git a/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala b/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala
index 4bac3519..11e3ebfc 100644
--- a/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala
+++ b/kamon-core/src/main/scala/kamon/metrics/MetricsExtension.scala
@@ -17,12 +17,16 @@
package kamon.metrics
import scala.collection.concurrent.TrieMap
-import akka.actor.{ ExtensionIdProvider, ExtensionId, ExtendedActorSystem }
+import akka.actor._
import com.typesafe.config.Config
import kamon.util.GlobPathFilter
import kamon.Kamon
import akka.actor
import kamon.metrics.Metrics.MetricGroupFilter
+import kamon.metrics.MetricGroupIdentity.Category
+import kamon.metrics.Metrics.MetricGroupFilter
+import scala.Some
+import kamon.metrics.Subscriptions.Subscribe
case class MetricGroupIdentity(name: String, category: MetricGroupIdentity.Category)
@@ -59,6 +63,11 @@ object MetricGroupIdentity {
trait Category {
def name: String
}
+
+ val AnyCategory = new Category {
+ def name: String = "match-all"
+ override def equals(that: Any): Boolean = that.isInstanceOf[Category]
+ }
}
trait MetricGroupFactory {
@@ -66,10 +75,13 @@ trait MetricGroupFactory {
def create(config: Config): Group
}
+
+
class MetricsExtension(val system: ExtendedActorSystem) extends Kamon.Extension {
val config = system.settings.config
val storage = TrieMap[MetricGroupIdentity, MetricGroupRecorder]()
val filters = loadFilters(config)
+ lazy val subscriptions = system.actorOf(Props[Subscriptions], "kamon-metrics-subscriptions")
def register(name: String, category: MetricGroupIdentity.Category with MetricGroupFactory): Option[category.Group] = {
if (shouldTrack(name, category))
@@ -82,6 +94,10 @@ class MetricsExtension(val system: ExtendedActorSystem) extends Kamon.Extension
storage.remove(MetricGroupIdentity(name, category))
}
+ def subscribe(category: Category, selection: String, receiver: ActorRef, permanently: Boolean = false): Unit = {
+ subscriptions.tell(Subscribe(category, selection, permanently), receiver)
+ }
+
def collect: Map[MetricGroupIdentity, MetricGroupSnapshot] = {
(for ((identity, recorder) ← storage) yield (identity, recorder.collect)).toMap
}