diff --git a/modules/core/src/main/scala/pillars/Observability.scala b/modules/core/src/main/scala/pillars/Observability.scala index 2fa3cfe3..7ca99d67 100644 --- a/modules/core/src/main/scala/pillars/Observability.scala +++ b/modules/core/src/main/scala/pillars/Observability.scala @@ -45,7 +45,7 @@ object Observability: Observability(Tracer.noop[F], Meter.noop[F], EndpointInterceptor.noop[F]).pure[F] def init[F[_]: LiftIO: Async: Parallel: Console](appInfo: AppInfo, config: Config): Resource[F, Observability[F]] = - if config.enabled then + if config.isEnabled then for otel4s <- OpenTelemetrySdk.autoConfigured[F]: builder => builder @@ -60,8 +60,12 @@ object Observability: ) resource.mergeUnsafe(configured) sdk = otel4s.sdk - tracer <- sdk.tracerProvider.get(config.traces.name.getOrElse(config.serviceName)).toResource - meter <- sdk.meterProvider.get(config.metrics.name.getOrElse(config.serviceName)).toResource + tracer <- (if config.traces.enabled then + sdk.tracerProvider.get(config.traces.name.getOrElse(config.serviceName)) + else Tracer.noop[F].pure[F]).toResource + meter <- (if config.metrics.enabled then + sdk.meterProvider.get(config.metrics.name.getOrElse(config.serviceName)) + else Meter.noop[F].pure[F]).toResource tapirMetrics <- Metrics.init[F](meter).toResource yield Observability(tracer, meter, tapirMetrics.metricsInterceptor()) else @@ -71,7 +75,9 @@ object Observability: metrics: Config.Metrics = Config.Metrics(), traces: Config.Traces = Config.Traces(), serviceName: ServiceName = ServiceName("pillars") - ) extends pillars.Config + ) extends pillars.Config: + def isEnabled: Boolean = enabled && (metrics.enabled || traces.enabled) + end Config object Config: given Configuration = Configuration.default.withKebabCaseMemberNames.withKebabCaseConstructorNames.withDefaults