Skip to content

Commit f9611ca

Browse files
authored
Merge pull request #1160 from avast/http4s-prometheus-conflict
Http4s prometheus conflict
2 parents 1dc5993 + fe24cbb commit f9611ca

File tree

5 files changed

+56
-6
lines changed

5 files changed

+56
-6
lines changed

build.sbt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,12 @@ lazy val micrometerPrometheus = project
513513
.settings(BuildSettings.common)
514514
.settings(
515515
name := "sst-micrometer-prometheus",
516-
libraryDependencies += Dependencies.micrometerPrometheus
516+
libraryDependencies ++= Seq(
517+
Dependencies.micrometerPrometheus,
518+
Dependencies.monixEval % Test,
519+
Dependencies.monixExecution % Test,
520+
Dependencies.http4sPrometheus % Test
521+
)
517522
)
518523

519524
lazy val micrometerPrometheusPureConfig = project
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.avast.sst.micrometer.prometheus
22

3+
import io.micrometer.prometheus.HistogramFlavor
4+
35
import java.util.concurrent.TimeUnit
46
import scala.concurrent.duration.Duration
57

68
final case class MicrometerPrometheusConfig(
79
step: Duration = Duration(1, TimeUnit.MINUTES),
810
prefix: String = "",
911
descriptions: Boolean = true,
12+
histogramFlavor: HistogramFlavor = HistogramFlavor.Prometheus,
1013
commonTags: Map[String, String] = Map.empty
1114
)

micrometer-prometheus/src/main/scala/com/avast/sst/micrometer/prometheus/MicrometerPrometheusModule.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.avast.sst.micrometer.prometheus
33
import cats.effect.{Blocker, ContextShift, Resource, Sync}
44
import com.avast.sst.micrometer.PrefixMeterFilter
55
import io.micrometer.core.instrument.config.{MeterFilter, NamingConvention}
6-
import io.micrometer.prometheusmetrics.{PrometheusConfig, PrometheusMeterRegistry}
6+
import io.micrometer.prometheus.{HistogramFlavor, PrometheusConfig, PrometheusMeterRegistry}
77

88
import java.time.Duration
99

@@ -44,6 +44,7 @@ object MicrometerPrometheusModule {
4444
override val step: Duration = java.time.Duration.ofMillis(c.step.toMillis)
4545
override val prefix: String = c.prefix
4646
override val descriptions: Boolean = c.descriptions
47+
override val histogramFlavor: HistogramFlavor = c.histogramFlavor
4748

4849
// the method is @Nullable and we don't need to implement it here
4950
@SuppressWarnings(Array("scalafix:DisableSyntax.null"))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.avast.sst.micrometer.prometheus
2+
3+
import cats.effect.*
4+
import monix.eval.Task
5+
import monix.eval.instances.CatsConcurrentEffectForTask
6+
import monix.execution.Scheduler
7+
import org.http4s.metrics.prometheus.PrometheusExportService
8+
import org.scalatest.funsuite.AnyFunSuite
9+
10+
import java.util.concurrent.{SynchronousQueue, ThreadPoolExecutor, TimeUnit}
11+
import scala.concurrent.ExecutionContext
12+
13+
class Http4sPrometheusCompatibilityTest extends AnyFunSuite {
14+
15+
implicit def scheduler: Scheduler = Scheduler.global
16+
17+
protected def options: Task.Options = Task.defaultOptions.withSchedulerFeatures(scheduler)
18+
19+
protected implicit lazy val catsEffect: ConcurrentEffect[Task] =
20+
new CatsConcurrentEffectForTask()(scheduler, options)
21+
22+
test("Http4s Prometheus compatibility test") {
23+
24+
val config = MicrometerPrometheusConfig()
25+
26+
val blockingExecutor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.SECONDS, new SynchronousQueue())
27+
val blocker = Blocker.liftExecutionContext(ExecutionContext.fromExecutor(blockingExecutor))
28+
29+
val test = for {
30+
31+
prometheusMeterRegistry <- MicrometerPrometheusModule.make(config, blocker)
32+
_ = PrometheusExportService(prometheusMeterRegistry.getPrometheusRegistry)
33+
_ <- PrometheusExportService.addDefaults(prometheusMeterRegistry.getPrometheusRegistry)
34+
} yield ()
35+
36+
test.use(_ => Task.unit).runSyncUnsafe()
37+
38+
}
39+
}

project/Dependencies.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ object Dependencies {
1717
val http4sEmberServer = "org.http4s" %% "http4s-ember-server" % Versions.http4s
1818
val http4sClient = "org.http4s" %% "http4s-client" % Versions.http4s
1919
val http4sDsl = "org.http4s" %% "http4s-dsl" % Versions.http4s
20+
val http4sPrometheus = "org.http4s" %% "http4s-prometheus-metrics" % Versions.http4s
2021
val http4sServer = "org.http4s" %% "http4s-server" % Versions.http4s
2122
val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % "2.17.1"
2223
val jetbrainsAnnotations = "org.jetbrains" % "annotations" % "24.1.0"
@@ -30,6 +31,7 @@ object Dependencies {
3031
val micrometerPrometheus = "io.micrometer" % "micrometer-registry-prometheus" % Versions.micrometerPrometheus
3132
val monixCatnap = "io.monix" %% "monix-catnap" % Versions.monix
3233
val monixEval = "io.monix" %% "monix-eval" % Versions.monix
34+
val monixExecution = "io.monix" %% "monix-execution" % Versions.monix
3335
val postgresql = "org.postgresql" % "postgresql" % "42.7.3"
3436
val pureConfigCore = "com.github.pureconfig" %% "pureconfig-core" % Versions.pureConfig
3537
val pureConfigGeneric = "com.github.pureconfig" %% "pureconfig-generic" % Versions.pureConfig
@@ -51,10 +53,10 @@ object Dependencies {
5153
val doobie = "0.13.4"
5254
val grpc = "1.64.0"
5355
val http4s = "0.22.15"
54-
val micrometerCore = "1.13.1"
55-
val micrometerJmx = "1.13.1"
56-
val micrometerStatsD = "1.13.1"
57-
val micrometerPrometheus = "1.13.1"
56+
val micrometerCore = "1.12.7"
57+
val micrometerJmx = "1.12.7"
58+
val micrometerStatsD = "1.12.7"
59+
val micrometerPrometheus = "1.12.7"
5860
val monix = "3.4.1"
5961
val pureConfig = "0.17.1"
6062

0 commit comments

Comments
 (0)