diff --git a/docs/backends/wrappers/opentelemetry.md b/docs/backends/wrappers/opentelemetry.md index 34e679f73..66f78bfb4 100644 --- a/docs/backends/wrappers/opentelemetry.md +++ b/docs/backends/wrappers/opentelemetry.md @@ -45,7 +45,7 @@ OpenTelemetryMetricsBackend( sttpBackend, OpenTelemetryMetricsConfig( openTelemetry, - responseToSuccessCounterMapper = _ => Some(CollectorConfig("my_custom_counter_name")) + responseToSuccessCounterMapper = (_, _) => Some(CollectorConfig("my_custom_counter_name")) ) ) ``` diff --git a/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackend.scala b/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackend.scala index 6f6c807b9..26a6f3594 100644 --- a/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackend.scala +++ b/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackend.scala @@ -95,11 +95,11 @@ private class OpenTelemetryMetricsListener( clock: Clock, requestToLatencyHistogramMapper: GenericRequest[_, _] => Option[HistogramCollectorConfig], requestToInProgressCounterMapper: GenericRequest[_, _] => Option[CollectorConfig], - responseToSuccessCounterMapper: Response[_] => Option[CollectorConfig], - requestToErrorCounterMapper: Response[_] => Option[CollectorConfig], + responseToSuccessCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig], + requestToErrorCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig], requestToFailureCounterMapper: (GenericRequest[_, _], Throwable) => Option[CollectorConfig], requestToSizeHistogramMapper: GenericRequest[_, _] => Option[HistogramCollectorConfig], - responseToSizeHistogramMapper: Response[_] => Option[HistogramCollectorConfig] + responseToSizeHistogramMapper: (GenericRequest[_, _], Response[_]) => Option[HistogramCollectorConfig] ) extends RequestListener[Identity, Option[Long]] { private val counters = new ConcurrentHashMap[String, LongCounter] @@ -124,12 +124,12 @@ private class OpenTelemetryMetricsListener( val combinedAttributes = requestAttributes.toBuilder().putAll(responseAttributes).build() if (response.isSuccess) { - incrementCounter(responseToSuccessCounterMapper(response), combinedAttributes) + incrementCounter(responseToSuccessCounterMapper(request, response), combinedAttributes) } else { - incrementCounter(requestToErrorCounterMapper(response), combinedAttributes) + incrementCounter(requestToErrorCounterMapper(request, response), combinedAttributes) } - recordHistogram(responseToSizeHistogramMapper(response), response.contentLength, combinedAttributes) + recordHistogram(responseToSizeHistogramMapper(request, response), response.contentLength, combinedAttributes) recordHistogram(requestToLatencyHistogramMapper(request), tag.map(clock.millis() - _), combinedAttributes) updateInProgressCounter(request, -1, requestAttributes) } diff --git a/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsConfig.scala b/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsConfig.scala index 1085e7d9f..3499f0519 100644 --- a/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsConfig.scala +++ b/observability/opentelemetry-metrics-backend/src/main/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsConfig.scala @@ -12,11 +12,11 @@ final case class OpenTelemetryMetricsConfig( clock: Clock, requestToLatencyHistogramMapper: GenericRequest[_, _] => Option[HistogramCollectorConfig], requestToInProgressCounterMapper: GenericRequest[_, _] => Option[CollectorConfig], - responseToSuccessCounterMapper: Response[_] => Option[CollectorConfig], - requestToErrorCounterMapper: Response[_] => Option[CollectorConfig], + responseToSuccessCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig], + requestToErrorCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig], requestToFailureCounterMapper: (GenericRequest[_, _], Throwable) => Option[CollectorConfig], requestToSizeHistogramMapper: GenericRequest[_, _] => Option[HistogramCollectorConfig], - responseToSizeHistogramMapper: Response[_] => Option[HistogramCollectorConfig] + responseToSizeHistogramMapper: (GenericRequest[_, _], Response[_]) => Option[HistogramCollectorConfig] ) object OpenTelemetryMetricsConfig { @@ -35,10 +35,10 @@ object OpenTelemetryMetricsConfig { ), requestToInProgressCounterMapper: GenericRequest[_, _] => Option[CollectorConfig] = (_: GenericRequest[_, _]) => Some(CollectorConfig(DefaultRequestsActiveCounterName)), - responseToSuccessCounterMapper: Response[_] => Option[CollectorConfig] = (_: Response[_]) => - Some(CollectorConfig(DefaultSuccessCounterName)), - responseToErrorCounterMapper: Response[_] => Option[CollectorConfig] = (_: Response[_]) => - Some(CollectorConfig(DefaultErrorCounterName)), + responseToSuccessCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig] = + (_: GenericRequest[_, _], _: Response[_]) => Some(CollectorConfig(DefaultSuccessCounterName)), + responseToErrorCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig] = + (_: GenericRequest[_, _], _: Response[_]) => Some(CollectorConfig(DefaultErrorCounterName)), requestToFailureCounterMapper: (GenericRequest[_, _], Throwable) => Option[CollectorConfig] = (_: GenericRequest[_, _], _: Throwable) => Some(CollectorConfig(DefaultFailureCounterName)), requestToSizeHistogramMapper: GenericRequest[_, _] => Option[HistogramCollectorConfig] = @@ -50,14 +50,15 @@ object OpenTelemetryMetricsConfig { unit = HistogramCollectorConfig.Bytes ) ), - responseToSizeHistogramMapper: Response[_] => Option[HistogramCollectorConfig] = (_: Response[_]) => - Some( - HistogramCollectorConfig( - DefaultResponseSizeHistogramName, - buckets = HistogramCollectorConfig.DefaultSizeBuckets, - unit = HistogramCollectorConfig.Bytes + responseToSizeHistogramMapper: (GenericRequest[_, _], Response[_]) => Option[HistogramCollectorConfig] = + (_: GenericRequest[_, _], _: Response[_]) => + Some( + HistogramCollectorConfig( + DefaultResponseSizeHistogramName, + buckets = HistogramCollectorConfig.DefaultSizeBuckets, + unit = HistogramCollectorConfig.Bytes + ) ) - ) ): OpenTelemetryMetricsConfig = usingMeter( openTelemetry.meterBuilder(meterConfig.name).setInstrumentationVersion(meterConfig.version).build(), clock, @@ -84,10 +85,10 @@ object OpenTelemetryMetricsConfig { ), requestToInProgressCounterMapper: GenericRequest[_, _] => Option[CollectorConfig] = (_: GenericRequest[_, _]) => Some(CollectorConfig(DefaultRequestsActiveCounterName)), - responseToSuccessCounterMapper: Response[_] => Option[CollectorConfig] = (_: Response[_]) => - Some(CollectorConfig(DefaultSuccessCounterName)), - responseToErrorCounterMapper: Response[_] => Option[CollectorConfig] = (_: Response[_]) => - Some(CollectorConfig(DefaultErrorCounterName)), + responseToSuccessCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig] = + (_: GenericRequest[_, _], _: Response[_]) => Some(CollectorConfig(DefaultSuccessCounterName)), + responseToErrorCounterMapper: (GenericRequest[_, _], Response[_]) => Option[CollectorConfig] = + (_: GenericRequest[_, _], _: Response[_]) => Some(CollectorConfig(DefaultErrorCounterName)), requestToFailureCounterMapper: (GenericRequest[_, _], Throwable) => Option[CollectorConfig] = (_: GenericRequest[_, _], _: Throwable) => Some(CollectorConfig(DefaultFailureCounterName)), requestToSizeHistogramMapper: GenericRequest[_, _] => Option[HistogramCollectorConfig] = @@ -99,14 +100,15 @@ object OpenTelemetryMetricsConfig { unit = HistogramCollectorConfig.Bytes ) ), - responseToSizeHistogramMapper: Response[_] => Option[HistogramCollectorConfig] = (_: Response[_]) => - Some( - HistogramCollectorConfig( - DefaultResponseSizeHistogramName, - buckets = HistogramCollectorConfig.DefaultSizeBuckets, - unit = HistogramCollectorConfig.Bytes + responseToSizeHistogramMapper: (GenericRequest[_, _], Response[_]) => Option[HistogramCollectorConfig] = + (_: GenericRequest[_, _], _: Response[_]) => + Some( + HistogramCollectorConfig( + DefaultResponseSizeHistogramName, + buckets = HistogramCollectorConfig.DefaultSizeBuckets, + unit = HistogramCollectorConfig.Bytes + ) ) - ) ): OpenTelemetryMetricsConfig = OpenTelemetryMetricsConfig( meter, diff --git a/observability/opentelemetry-metrics-backend/src/test/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackendTest.scala b/observability/opentelemetry-metrics-backend/src/test/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackendTest.scala index 3e612c818..c0f512634 100644 --- a/observability/opentelemetry-metrics-backend/src/test/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackendTest.scala +++ b/observability/opentelemetry-metrics-backend/src/test/scala/sttp/client4/opentelemetry/OpenTelemetryMetricsBackendTest.scala @@ -75,7 +75,7 @@ class OpenTelemetryMetricsBackendTest extends AnyFlatSpec with Matchers with Opt val reader = InMemoryMetricReader.create() val config = OpenTelemetryMetricsConfig( spawnNewOpenTelemetry(reader), - responseToSuccessCounterMapper = _ => Some(CollectorConfig(customSuccessCounterName)) + responseToSuccessCounterMapper = (_, _) => Some(CollectorConfig(customSuccessCounterName)) ) val backend = OpenTelemetryMetricsBackend(stubAlwaysOk, config) val requestsNumber = 5 @@ -97,7 +97,7 @@ class OpenTelemetryMetricsBackendTest extends AnyFlatSpec with Matchers with Opt val config = OpenTelemetryMetricsConfig( spawnNewOpenTelemetry(reader), responseToSuccessCounterMapper = - _ => Some(CollectorConfig(customSuccessCounterName, Some(description), Some(unit))) + (_, _) => Some(CollectorConfig(customSuccessCounterName, Some(description), Some(unit))) ) val backend = OpenTelemetryMetricsBackend(stubAlwaysOk, config) val requestsNumber1 = 5 @@ -117,7 +117,7 @@ class OpenTelemetryMetricsBackendTest extends AnyFlatSpec with Matchers with Opt val reader = InMemoryMetricReader.create() val config = OpenTelemetryMetricsConfig( spawnNewOpenTelemetry(reader), - responseToSuccessCounterMapper = _ => None + responseToSuccessCounterMapper = (_, _) => None ) val backend = OpenTelemetryMetricsBackend(stubAlwaysOk, config) val requestsNumber = 6