Skip to content

Commit

Permalink
Add request to the functions which calculate OTEL metrics (#2401)
Browse files Browse the repository at this point in the history
  • Loading branch information
adamw authored Jan 15, 2025
1 parent a03dfb9 commit 89ad940
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 35 deletions.
2 changes: 1 addition & 1 deletion docs/backends/wrappers/opentelemetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ OpenTelemetryMetricsBackend(
sttpBackend,
OpenTelemetryMetricsConfig(
openTelemetry,
responseToSuccessCounterMapper = _ => Some(CollectorConfig("my_custom_counter_name"))
responseToSuccessCounterMapper = (_, _) => Some(CollectorConfig("my_custom_counter_name"))
)
)
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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] =
Expand All @@ -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,
Expand All @@ -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] =
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 89ad940

Please sign in to comment.