Skip to content

Commit 4672748

Browse files
authored
feat: add service protocol benchmarks (#1271)
* add protocol benchmarks * lint
1 parent 875e133 commit 4672748

File tree

5 files changed

+28
-0
lines changed

5 files changed

+28
-0
lines changed

runtime/observability/telemetry-api/api/telemetry-api.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,8 @@ public final class aws/smithy/kotlin/runtime/telemetry/metrics/Histogram$Default
298298
public final class aws/smithy/kotlin/runtime/telemetry/metrics/HistogramKt {
299299
public static final fun measureSeconds (Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;Laws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/telemetry/context/Context;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
300300
public static synthetic fun measureSeconds$default (Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;Laws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/telemetry/context/Context;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Ljava/lang/Object;
301+
public static final fun recordPayloadSize (Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;Ljava/lang/Long;Laws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/telemetry/context/Context;)V
302+
public static synthetic fun recordPayloadSize$default (Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;Ljava/lang/Long;Laws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/telemetry/context/Context;ILjava/lang/Object;)V
301303
public static final fun recordSeconds-dWUq8MI (Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;JLaws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/telemetry/context/Context;)V
302304
public static synthetic fun recordSeconds-dWUq8MI$default (Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;JLaws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/telemetry/context/Context;ILjava/lang/Object;)V
303305
}

runtime/observability/telemetry-api/common/src/aws/smithy/kotlin/runtime/telemetry/metrics/Histogram.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,16 @@ public inline fun <T> DoubleHistogram.measureSeconds(attributes: Attributes = em
6767
recordSeconds(tv.duration, attributes, context)
6868
return tv.value
6969
}
70+
71+
/**
72+
* Records the size of a payload in bytes to this histogram.
73+
*
74+
* @param value The payload size in bytes, or null if no payload
75+
* @param attributes attributes to associate with this measurement
76+
* @param context (Optional) trace context to associate with this measurement
77+
*/
78+
@InternalApi
79+
public fun DoubleHistogram.recordPayloadSize(value: Long?, attributes: Attributes = emptyAttributes(), context: Context? = null) {
80+
val bytes = value?.toDouble() ?: 0.0
81+
record(bytes, attributes, context)
82+
}

runtime/protocol/http-client/api/http-client.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,8 +601,10 @@ public final class aws/smithy/kotlin/runtime/http/operation/OperationMetrics {
601601
public fun <init> (Ljava/lang/String;Laws/smithy/kotlin/runtime/telemetry/TelemetryProvider;)V
602602
public final fun getDeserializationDuration ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
603603
public final fun getProvider ()Laws/smithy/kotlin/runtime/telemetry/TelemetryProvider;
604+
public final fun getRequestPayloadSize ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
604605
public final fun getResolveEndpointDuration ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
605606
public final fun getResolveIdentityDuration ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
607+
public final fun getResponsePayloadSize ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
606608
public final fun getRpcAttemptDuration ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
607609
public final fun getRpcAttemptOverheadDuration ()Laws/smithy/kotlin/runtime/telemetry/metrics/Histogram;
608610
public final fun getRpcAttempts ()Laws/smithy/kotlin/runtime/telemetry/metrics/MonotonicCounter;

runtime/protocol/http-client/common/src/aws/smithy/kotlin/runtime/http/interceptors/OperationTelemetryInterceptor.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import aws.smithy.kotlin.runtime.http.engine.EngineAttributes
1717
import aws.smithy.kotlin.runtime.http.operation.OperationMetrics
1818
import aws.smithy.kotlin.runtime.http.request.HttpRequest
1919
import aws.smithy.kotlin.runtime.http.response.HttpResponse
20+
import aws.smithy.kotlin.runtime.telemetry.metrics.recordPayloadSize
2021
import aws.smithy.kotlin.runtime.telemetry.metrics.recordSeconds
2122
import kotlin.time.TimeMark
2223
import kotlin.time.TimeSource
@@ -105,4 +106,12 @@ internal class OperationTelemetryInterceptor(
105106
override fun readBeforeAttempt(context: ProtocolRequestInterceptorContext<Any, HttpRequest>) {
106107
attemptStart = timeSource.markNow()
107108
}
109+
110+
override fun readBeforeTransmit(context: ProtocolRequestInterceptorContext<Any, HttpRequest>) {
111+
metrics.requestPayloadSize.recordPayloadSize(context.protocolRequest.body.contentLength)
112+
}
113+
114+
override fun readAfterTransmit(context: ProtocolResponseInterceptorContext<Any, HttpRequest, HttpResponse>) {
115+
metrics.responsePayloadSize.recordPayloadSize(context.protocolResponse.body.contentLength)
116+
}
108117
}

runtime/protocol/http-client/common/src/aws/smithy/kotlin/runtime/http/operation/OperationMetrics.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ public class OperationMetrics(
3737
public val resolveEndpointDuration: DoubleHistogram = meter.createDoubleHistogram("smithy.client.call.resolve_endpoint_duration", "s", "The time it takes to resolve an endpoint for a request")
3838
public val resolveIdentityDuration: DoubleHistogram = meter.createDoubleHistogram("smithy.client.call.auth.resolve_identity_duration", "s", "The time it takes to resolve an identity for signing a request")
3939
public val signingDuration: DoubleHistogram = meter.createDoubleHistogram("smithy.client.call.auth.signing_duration", "s", "The time it takes to sign a request")
40+
public val requestPayloadSize: DoubleHistogram = meter.createDoubleHistogram("smithy.client.call.request_payload_size", "bytes", "The payload size of a request")
41+
public val responsePayloadSize: DoubleHistogram = meter.createDoubleHistogram("smithy.client.call.response_payload_size", "bytes", "The payload size of a response")
4042
}

0 commit comments

Comments
 (0)