From c5621743ee7502c379367ff4bccf810f9a8a24d4 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Wed, 14 Jun 2017 13:55:57 +0200 Subject: allow removal of instruments from a metric --- kamon-core/src/main/scala/kamon/metric/Metric.scala | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'kamon-core/src/main/scala/kamon/metric/Metric.scala') diff --git a/kamon-core/src/main/scala/kamon/metric/Metric.scala b/kamon-core/src/main/scala/kamon/metric/Metric.scala index dbac3878..89ebde62 100644 --- a/kamon-core/src/main/scala/kamon/metric/Metric.scala +++ b/kamon-core/src/main/scala/kamon/metric/Metric.scala @@ -34,6 +34,10 @@ trait Metric[T] { def refine(tags: Tags): T def refine(tags: (String, String)*): T def refine(tag: String, value: String): T + + def remove(tags: Tags): Boolean + def remove(tags: (String, String)*): Boolean + def remove(tag: String, value: String): Boolean } trait HistogramMetric extends Metric[Histogram] with Histogram @@ -46,17 +50,26 @@ abstract sealed class BaseMetric[T, S](val instrumentType: InstrumentType) exten private val instruments = TrieMap.empty[Tags, T] protected lazy val baseInstrument: T = instruments.atomicGetOrElseUpdate(Map.empty, createInstrument(Map.empty)) - def refine(tag: String, value: String): T = { + override def refine(tag: String, value: String): T = { val instrumentTags = Map(tag -> value) instruments.atomicGetOrElseUpdate(instrumentTags, createInstrument(instrumentTags)) } - def refine(tags: Map[String, String]): T = + override def refine(tags: Map[String, String]): T = instruments.atomicGetOrElseUpdate(tags, createInstrument(tags)) - def refine(tags: (String, String)*): T = + override def refine(tags: (String, String)*): T = refine(tags.toMap) + override def remove(tags: Tags): Boolean = + if(tags.nonEmpty) instruments.remove(tags).nonEmpty else false + + override def remove(tags: (String, String)*): Boolean = + if(tags.nonEmpty) instruments.remove(tags.toMap).nonEmpty else false + + override def remove(tag: String, value: String): Boolean = + instruments.remove(Map(tag -> value)).nonEmpty + private[kamon] def snapshot(): Seq[S] = instruments.values.map(createSnapshot).toSeq -- cgit v1.2.3