From 7d2640085293073adf23df0aa268d3c94b7feeb6 Mon Sep 17 00:00:00 2001 From: Diego Date: Fri, 10 Nov 2017 10:34:15 -0300 Subject: Metric::refine with java.util.Map --- .../src/main/scala/kamon/metric/Metric.scala | 27 ++++++++++++++-------- kamon-core/src/main/scala/kamon/metric/Timer.scala | 11 ++++++++- kamon-core/src/main/scala/kamon/package.scala | 1 + 3 files changed, 29 insertions(+), 10 deletions(-) (limited to 'kamon-core') diff --git a/kamon-core/src/main/scala/kamon/metric/Metric.scala b/kamon-core/src/main/scala/kamon/metric/Metric.scala index 90e5ede7..db5ff9c0 100644 --- a/kamon-core/src/main/scala/kamon/metric/Metric.scala +++ b/kamon-core/src/main/scala/kamon/metric/Metric.scala @@ -16,29 +16,29 @@ package kamon package metric +import java.time.Duration import java.util.concurrent.atomic.AtomicReference +import java.util.concurrent.{ScheduledExecutorService, ScheduledFuture, TimeUnit} import kamon.metric.InstrumentFactory.InstrumentType import kamon.metric.InstrumentFactory.InstrumentTypes._ - -import scala.collection.concurrent.TrieMap -import java.time.Duration -import java.util.concurrent.{ScheduledExecutorService, ScheduledFuture, TimeUnit} - import org.slf4j.LoggerFactory +import scala.collection.JavaConverters._ +import scala.collection.concurrent.TrieMap import scala.util.Try - trait Metric[T] { def name: String def unit: MeasurementUnit + def refine(tags: JTags): T def refine(tags: Tags): T def refine(tags: (String, String)*): T def refine(tag: String, value: String): T + def remove(tags: JTags): Boolean def remove(tags: Tags): Boolean def remove(tags: (String, String)*): Boolean def remove(tag: String, value: String): Boolean @@ -55,17 +55,23 @@ private[kamon] abstract sealed class BaseMetric[T, S](val instrumentType: Instru private[kamon] val instruments = TrieMap.empty[Tags, T] protected lazy val baseInstrument: T = instruments.atomicGetOrElseUpdate(Map.empty, createInstrument(Map.empty)) + override def refine(tags: JTags):T = + refine(tags.asScala.toMap) + + override def refine(tags: Map[String, String]): T = + instruments.atomicGetOrElseUpdate(tags, createInstrument(tags)) + override def refine(tag: String, value: String): T = { val instrumentTags = Map(tag -> value) instruments.atomicGetOrElseUpdate(instrumentTags, createInstrument(instrumentTags)) } - override def refine(tags: Map[String, String]): T = - instruments.atomicGetOrElseUpdate(tags, createInstrument(tags)) - override def refine(tags: (String, String)*): T = refine(tags.toMap) + override def remove(tags: JTags):Boolean = + remove(tags.asScala.toMap) + override def remove(tags: Tags): Boolean = if(tags.nonEmpty) instruments.remove(tags).nonEmpty else false @@ -141,6 +147,9 @@ private[kamon] final class MinMaxCounterMetricImpl(val name: String, val unit: M mmCounter } + override def remove(tags: JTags): Boolean = + removeAndStopSampler(tags.asScala.toMap) + override def remove(tags: Tags): Boolean = removeAndStopSampler(tags) diff --git a/kamon-core/src/main/scala/kamon/metric/Timer.scala b/kamon-core/src/main/scala/kamon/metric/Timer.scala index d3ccb840..74d203a9 100644 --- a/kamon-core/src/main/scala/kamon/metric/Timer.scala +++ b/kamon-core/src/main/scala/kamon/metric/Timer.scala @@ -15,7 +15,7 @@ package kamon.metric -import kamon.Tags +import kamon.{JTags, Tags} trait Timer extends Histogram { def start(): StartedTimer @@ -61,6 +61,9 @@ private[kamon] final class TimerImpl(val histogram: Histogram) extends Timer { private[kamon] final class TimerMetricImpl(val underlyingHistogram: HistogramMetric) extends TimerMetric { + import scala.collection.JavaConverters._ + + override def unit: MeasurementUnit = underlyingHistogram.unit @@ -76,6 +79,9 @@ private[kamon] final class TimerMetricImpl(val underlyingHistogram: HistogramMet override def name: String = underlyingHistogram.name + override def refine(tags: JTags): Timer = + refine(tags.asScala.toMap) + override def refine(tags: Tags): Timer = new TimerImpl(underlyingHistogram.refine(tags)) @@ -85,6 +91,9 @@ private[kamon] final class TimerMetricImpl(val underlyingHistogram: HistogramMet override def refine(tag: String, value: String): Timer = new TimerImpl(underlyingHistogram.refine(Map(tag -> value))) + override def remove(tags: JTags): Boolean = + remove(tags.asScala.toMap) + override def remove(tags: Tags): Boolean = underlyingHistogram.remove(tags) diff --git a/kamon-core/src/main/scala/kamon/package.scala b/kamon-core/src/main/scala/kamon/package.scala index 274f43f8..c746efa1 100644 --- a/kamon-core/src/main/scala/kamon/package.scala +++ b/kamon-core/src/main/scala/kamon/package.scala @@ -24,6 +24,7 @@ import scala.collection.concurrent.TrieMap package object kamon { type Tags = Map[String, String] + type JTags = java.util.Map[String, String] /** -- cgit v1.2.3