From a02215f4327fc11ed8e5066ada22c1d5938d849e Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Wed, 17 Jan 2018 02:14:27 +0100 Subject: allow metric filtering when adding a metrics reporter --- .../test/scala/kamon/ReporterRegistrySpec.scala | 114 +++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 kamon-core-tests/src/test/scala/kamon/ReporterRegistrySpec.scala (limited to 'kamon-core-tests') diff --git a/kamon-core-tests/src/test/scala/kamon/ReporterRegistrySpec.scala b/kamon-core-tests/src/test/scala/kamon/ReporterRegistrySpec.scala new file mode 100644 index 00000000..d17c0f09 --- /dev/null +++ b/kamon-core-tests/src/test/scala/kamon/ReporterRegistrySpec.scala @@ -0,0 +1,114 @@ +package kamon + +import com.typesafe.config.Config +import kamon.metric.PeriodSnapshot +import kamon.testkit.Reconfigure +import org.scalatest.concurrent.Eventually +import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} + +class ReporterRegistrySpec extends WordSpec with Matchers with Reconfigure with Eventually with BeforeAndAfterAll { + "The ReporterRegistry" when { + "working with metrics reporters" should { + "report all metrics if no filters are applied" in { + Kamon.counter("test.hello").increment() + Kamon.counter("test.world").increment() + Kamon.counter("other.hello").increment() + + val reporter = new SeenMetricsReporter() + val subscription = Kamon.addReporter(reporter, "reporter-registry-spec") + + eventually { + reporter.snapshotCount() should be >= 1 + reporter.metrics() should contain allOf( + "test.hello", + "test.world", + "other.hello" + ) + } + + subscription.cancel() + } + + "default to deny all metrics if a provided filter name doesn't exist" in { + Kamon.counter("test.hello").increment() + Kamon.counter("test.world").increment() + Kamon.counter("other.hello").increment() + + val reporter = new SeenMetricsReporter() + val subscription = Kamon.addReporter(reporter, "reporter-registry-spec", "does-not-exist") + + eventually { + reporter.snapshotCount() should be >= 1 + reporter.metrics() shouldBe empty + } + + subscription.cancel() + } + + "apply existent filters" in { + Kamon.counter("test.hello").increment() + Kamon.counter("test.world").increment() + Kamon.counter("other.hello").increment() + + val reporter = new SeenMetricsReporter() + val subscription = Kamon.addReporter(reporter, "reporter-registry-spec", "real-filter") + + eventually { + reporter.snapshotCount() should be >= 1 + reporter.metrics() should contain allOf( + "test.hello", + "test.world" + ) + } + + subscription.cancel() + } + } + } + + + override protected def beforeAll(): Unit = { + applyConfig( + """ + |kamon { + | metric.tick-interval = 10 millis + | + | util.filters { + | real-filter { + | includes = [ "test**" ] + | } + | } + |} + | + """.stripMargin + ) + } + + + override protected def afterAll(): Unit = { + resetConfig() + } + + abstract class DummyReporter extends MetricReporter { + override def start(): Unit = {} + override def stop(): Unit = {} + override def reconfigure(config: Config): Unit = {} + } + + class SeenMetricsReporter extends DummyReporter { + @volatile private var count = 0 + @volatile private var seenMetrics = Seq.empty[String] + + override def reportPeriodSnapshot(snapshot: PeriodSnapshot): Unit = { + import snapshot.metrics._ + count += 1 + seenMetrics = counters.map(_.name) ++ histograms.map(_.name) ++ gauges.map(_.name) ++ rangeSamplers.map(_.name) + } + + def metrics(): Seq[String] = + seenMetrics + + def snapshotCount(): Int = + count + } +} -- cgit v1.2.3