Skip to content

Commit c87c6d2

Browse files
author
Jan Kolena
committed
Blocker for all Micrometer modules
1 parent 9f6a029 commit c87c6d2

File tree

5 files changed

+19
-14
lines changed

5 files changed

+19
-14
lines changed

example/src/main/scala/com/avast/sst/example/Main.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ object Main extends ZioServerApp {
4242
)
4343
meterRegistry <- MicrometerJmxModule.make[Task](configuration.jmx)
4444
_ <- Resource.eval(MicrometerJvmModule.make[Task](meterRegistry))
45-
serverMetricsModule <- Resource.eval(MicrometerHttp4sServerMetricsModule.make[Task](meterRegistry, clock))
45+
serverMetricsModule <- Resource.eval(MicrometerHttp4sServerMetricsModule.make[Task](meterRegistry, executorModule.blocker, clock))
4646
boundedConnectExecutionContext <-
4747
executorModule
4848
.makeThreadPoolExecutor(

http4s-server-micrometer/src/main/scala/com/avast/sst/http4s/server/micrometer/MicrometerHttp4sMetricsOpsModule.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.avast.sst.http4s.server.micrometer
22

3-
import cats.effect.Effect
43
import cats.effect.concurrent.Ref
4+
import cats.effect.{Blocker, ContextShift, Effect, IO}
55
import cats.syntax.functor._
66
import io.micrometer.core.instrument.MeterRegistry
77
import org.http4s.metrics.{MetricsOps, TerminationType}
@@ -12,9 +12,11 @@ import java.util.concurrent.TimeUnit
1212
object MicrometerHttp4sMetricsOpsModule {
1313

1414
/** Makes [[org.http4s.metrics.MetricsOps]] to record the usual HTTP server metrics. */
15-
def make[F[_]: Effect](meterRegistry: MeterRegistry): F[MetricsOps[F]] = {
15+
def make[F[_]: Effect](meterRegistry: MeterRegistry, blocker: Blocker): F[MetricsOps[F]] = {
1616
val F = Effect[F]
1717

18+
implicit val iocs: ContextShift[IO] = IO.contextShift(blocker.blockingContext)
19+
1820
for {
1921
activeRequests <- Ref.of[F, Long](0L)
2022
} yield new MetricsOps[F] {
@@ -25,7 +27,7 @@ object MicrometerHttp4sMetricsOpsModule {
2527
meterRegistry.gauge(
2628
s"$prefix.active-requests",
2729
activeRequests,
28-
(_: Ref[F, Long]) => Effect[F].toIO(activeRequests.get).unsafeRunSync().toDouble
30+
(_: Ref[F, Long]) => blocker.blockOn(Effect[F].toIO(activeRequests.get)).unsafeRunSync().toDouble
2931
)
3032

3133
override def increaseActiveRequests(classifier: Option[String]): F[Unit] = activeRequests.update(_ + 1)

http4s-server-micrometer/src/main/scala/com/avast/sst/http4s/server/micrometer/MicrometerHttp4sServerMetricsModule.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.avast.sst.http4s.server.micrometer
22

3-
import cats.effect.{Clock, Effect, Sync}
3+
import cats.effect.{Blocker, Clock, Effect, Sync}
44
import cats.syntax.flatMap._
55
import cats.syntax.functor._
66
import io.micrometer.core.instrument.MeterRegistry
@@ -14,11 +14,11 @@ object MicrometerHttp4sServerMetricsModule {
1414
/** Makes [[com.avast.sst.http4s.server.micrometer.MicrometerHttp4sServerMetricsModule]] that can be used to setup monitoring
1515
* of the whole HTTP server and individual routes.
1616
*/
17-
def make[F[_]: Effect](meterRegistry: MeterRegistry, clock: Clock[F]): F[MicrometerHttp4sServerMetricsModule[F]] = {
17+
def make[F[_]: Effect](meterRegistry: MeterRegistry, blocker: Blocker, clock: Clock[F]): F[MicrometerHttp4sServerMetricsModule[F]] = {
1818
implicit val c: Clock[F] = clock
1919

2020
for {
21-
metricsOps <- MicrometerHttp4sMetricsOpsModule.make[F](meterRegistry)
21+
metricsOps <- MicrometerHttp4sMetricsOpsModule.make[F](meterRegistry, blocker)
2222
routeMetrics <- Sync[F].delay(new RouteMetrics[F](meterRegistry))
2323
} yield new MicrometerHttp4sServerMetricsModule[F](Metrics(metricsOps), routeMetrics)
2424
}

http4s-server-micrometer/src/test/scala/com/avast/sst/http4s/server/micrometer/MicrometerHttp4sMetricsOpsModuleTest.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package com.avast.sst.http4s.server.micrometer
22

3-
import cats.effect.IO
3+
import cats.effect.{Blocker, IO}
44
import io.micrometer.core.instrument.simple.SimpleMeterRegistry
55
import org.http4s.{Method, Status}
66
import org.scalatest.funsuite.AnyFunSuite
77

8-
import java.util.concurrent.TimeUnit
8+
import java.util.concurrent.{Executors, TimeUnit}
9+
import scala.concurrent.ExecutionContext
910

1011
class MicrometerHttp4sMetricsOpsModuleTest extends AnyFunSuite {
1112

1213
test("http4s MetricsOps for Micrometer") {
1314
val registry = new SimpleMeterRegistry()
14-
val metricsOps = MicrometerHttp4sMetricsOpsModule.make[IO](registry).unsafeRunSync()
15+
val blocker = Blocker.liftExecutionContext(ExecutionContext.fromExecutor(Executors.newCachedThreadPool()))
16+
val metricsOps = MicrometerHttp4sMetricsOpsModule.make[IO](registry, blocker).unsafeRunSync()
1517

1618
metricsOps.increaseActiveRequests(None).unsafeRunSync()
1719
metricsOps.recordTotalTime(Method.GET, Status.Ok, 2500, None).unsafeRunSync()

micrometer-statsd/src/main/scala/com/avast/sst/micrometer/statsd/MicrometerStatsDModule.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
package com.avast.sst.micrometer.statsd
22

3-
import cats.effect.{Resource, Sync}
3+
import cats.effect.{Blocker, ContextShift, Resource, Sync}
44
import com.avast.sst.micrometer.PrefixMeterFilter
55
import io.micrometer.core.instrument.Clock
66
import io.micrometer.core.instrument.config.{MeterFilter, NamingConvention}
77
import io.micrometer.core.instrument.util.HierarchicalNameMapper
8-
import io.micrometer.statsd.{StatsdConfig, StatsdFlavor, StatsdMeterRegistry, StatsdProtocol}
8+
import io.micrometer.statsd._
99

1010
import java.time.Duration
1111

1212
object MicrometerStatsDModule {
1313

1414
/** Makes configured [[io.micrometer.statsd.StatsdMeterRegistry]]. */
15-
def make[F[_]: Sync](
15+
def make[F[_]: Sync: ContextShift](
1616
config: MicrometerStatsDConfig,
17+
blocker: Blocker,
1718
clock: Clock = Clock.SYSTEM,
1819
nameMapper: HierarchicalNameMapper = HierarchicalNameMapper.DEFAULT,
1920
namingConvention: Option[NamingConvention] = None,
@@ -43,7 +44,7 @@ object MicrometerStatsDModule {
4344

4445
registry
4546
}
46-
}(registry => Sync[F].delay(registry.close()))
47+
}(registry => blocker.delay(registry.close()))
4748
}
4849

4950
private class CustomStatsdConfig(c: MicrometerStatsDConfig) extends StatsdConfig {

0 commit comments

Comments
 (0)