Skip to content

Commit

Permalink
Polish observableCounter API
Browse files Browse the repository at this point in the history
  • Loading branch information
grouzen committed Dec 24, 2023
1 parent cb6b183 commit c86e15e
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import zio.telemetry.opentelemetry.baggage.Baggage
import zio.telemetry.opentelemetry.context.ContextStorage
import zio.telemetry.opentelemetry.OpenTelemetry
import zio.telemetry.opentelemetry.example.otel.OtelSdk
import zio.telemetry.opentelemetry.metrics.Meter

object BackendApp extends ZIOAppDefault {

Expand All @@ -17,6 +18,13 @@ object BackendApp extends ZIOAppDefault {
private val instrumentationScopeName = "zio.telemetry.opentelemetry.example.BackendApp"
private val resourceName = "opentelemetry-example-backend"

val observableCounterLayer =
ZLayer.suspend(
ZLayer.service[Meter].flatMap { env =>
env.get.observableCounter("foo")(_.record(1L)).unit
}
)

override def run: ZIO[Scope, Any, ExitCode] =
ZIO
.serviceWithZIO[BackendHttpServer](_.start.exitCode)
Expand All @@ -27,6 +35,8 @@ object BackendApp extends ZIOAppDefault {
OtelSdk.custom(resourceName),
OpenTelemetry.tracing(instrumentationScopeName),
OpenTelemetry.logging(instrumentationScopeName),
OpenTelemetry.meter(instrumentationScopeName),
observableCounterLayer,
Baggage.live(),
ContextStorage.fiberRef
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ import zio.telemetry.opentelemetry.context.IncomingContextCarrier
import zio.telemetry.opentelemetry.example.http.{Status => ServiceStatus}
import zio.telemetry.opentelemetry.tracing.Tracing
import zio.telemetry.opentelemetry.tracing.propagation.TraceContextPropagator
import zio.telemetry.opentelemetry.metrics.Meter

case class BackendHttpApp(tracing: Tracing, baggage: Baggage) {
case class BackendHttpApp(tracing: Tracing, meter: Meter, baggage: Baggage) {

import tracing.aspects._

Expand Down Expand Up @@ -43,13 +44,14 @@ case class BackendHttpApp(tracing: Tracing, baggage: Baggage) {
response <- ZIO.succeed(Response.json(ServiceStatus.up("backend").toJson))
_ <- tracing.addEvent("event from backend after response")
_ <- ZIO.logInfo("status processing finished on backend")
_ <- meter.counter("status_requests_count").flatMap(_.inc).orDie
} yield response

}

object BackendHttpApp {

val live: URLayer[Tracing with Baggage, BackendHttpApp] =
val live: URLayer[Tracing with Meter with Baggage, BackendHttpApp] =
ZLayer.fromFunction(BackendHttpApp.apply _)

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ trait Meter {
name: String,
unit: Option[String] = None,
description: Option[String] = None
)(cb: ObservableMeasurement[Long] => Task[Unit]): TaskLayer[api.metrics.ObservableLongCounter]
)(callback: ObservableMeasurement[Long] => Task[Unit]): TaskLayer[api.metrics.ObservableLongCounter]

}

Expand Down Expand Up @@ -50,7 +50,7 @@ object Meter {
name: String,
unit: Option[String] = None,
description: Option[String] = None
)(cb: ObservableMeasurement[Long] => Task[Unit]): TaskLayer[api.metrics.ObservableLongCounter] =
)(callback: ObservableMeasurement[Long] => Task[Unit]): TaskLayer[api.metrics.ObservableLongCounter] =
ZLayer.scoped(
ZIO.fromAutoCloseable(
ZIO.attempt {
Expand All @@ -61,7 +61,7 @@ object Meter {

builder.buildWithCallback { om =>
Unsafe.unsafe { implicit unsafe =>
unsafeRuntime.run(cb(ObservableMeasurement.long(om))).getOrThrowFiberFailure()
unsafeRuntime.run(callback(ObservableMeasurement.long(om))).getOrThrowFiberFailure()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import scala.jdk.CollectionConverters._

object MeterTest extends ZIOSpecDefault {

val inMemoryMetricReaderLayer: ZLayer[Any,Nothing,InMemoryMetricReader] =
val inMemoryMetricReaderLayer: ZLayer[Any, Nothing, InMemoryMetricReader] =
ZLayer(ZIO.succeed(InMemoryMetricReader.create()))

val meterLayer = {
Expand All @@ -35,7 +35,7 @@ object MeterTest extends ZIOSpecDefault {
_ <- meter
.observableCounter("obs")(_.record(1L))
.launch
.forkDaemon
.fork
_ <- TestClock.adjust(1.millisecond)
metrics = reader.collectAllMetrics().asScala.toList
} yield assertTrue(metrics.nonEmpty)
Expand Down

0 comments on commit c86e15e

Please sign in to comment.