@@ -5,6 +5,7 @@ import cats.effect._
55import cats .implicits ._
66import io .prometheus .metrics .core .datapoints .DistributionDataPoint
77import io .prometheus .metrics .core .metrics .{Histogram => JHistogram }
8+ import io .prometheus .metrics .model .snapshots .Labels
89
910import scala .annotation .tailrec
1011import scala .concurrent .duration ._
@@ -24,6 +25,11 @@ sealed abstract class Histogram[F[_]] {
2425 */
2526 def observe (d : Double ): F [Unit ]
2627
28+ def observeWithExemplar (d : Double , exemplarLabels : Map [String , String ]): F [Unit ]
29+
30+ def observeWithExemplar (d : Double , exemplarLabels : (String , String )* ): F [Unit ] =
31+ observeWithExemplar(d, exemplarLabels.toMap)
32+
2733 def mapK [G [_]](fk : F ~> G ): Histogram [G ] =
2834 new Histogram .MapKHistogram [F , G ](this , fk)
2935
@@ -257,6 +263,12 @@ object Histogram {
257263 ) extends Histogram [F ] {
258264 def observe (d : Double ): F [Unit ] = Sync [F ].delay(underlying.observe(d))
259265
266+ def observeWithExemplar (d : Double , exemplarLabels : Map [String , String ]): F [Unit ] = {
267+ val labels = exemplarLabels.toList.flatMap { case (k, v) => List (k, v) }
268+ val jLabels = Labels .of(labels:_* )
269+ Sync [F ].delay(underlying.observeWithExemplar(d, jLabels))
270+ }
271+
260272 override private [epimetheus] def asJava : F [JHistogram ] = underlying.pure[F ]
261273 }
262274
@@ -265,6 +277,12 @@ object Histogram {
265277 ) extends Histogram [F ] {
266278 def observe (d : Double ): F [Unit ] = Sync [F ].delay(underlying.observe(d))
267279
280+ def observeWithExemplar (d : Double , exemplarLabels : Map [String , String ]): F [Unit ] = {
281+ val labels = exemplarLabels.toList.flatMap { case (k, v) => List (k, v) }
282+ val jLabels = Labels .of(labels:_* )
283+ Sync [F ].delay(underlying.observeWithExemplar(d, jLabels))
284+ }
285+
268286 override private [epimetheus] def asJava : F [JHistogram ] =
269287 ApplicativeThrow [F ].raiseError(
270288 new IllegalArgumentException (
@@ -277,8 +295,12 @@ object Histogram {
277295 private [Histogram ] val base : Histogram [F ],
278296 fk : F ~> G
279297 ) extends Histogram [G ] {
298+
280299 def observe (d : Double ): G [Unit ] = fk(base.observe(d))
281300
301+ override def observeWithExemplar (d : Double , exemplarLabels : Map [String ,String ]): G [Unit ] =
302+ fk(base.observeWithExemplar(d, exemplarLabels))
303+
282304 override private [epimetheus] def asJava : G [JHistogram ] = fk(base.asJava)
283305 }
284306
0 commit comments