From e64dca17ecb308f612f3621b0e0e4c6c95e258bc Mon Sep 17 00:00:00 2001 From: Ian Botsford <83236726+ianbotsf@users.noreply.github.com> Date: Mon, 8 Jan 2024 16:59:07 +0000 Subject: [PATCH] feat: surface HTTP connection manager metrics --- .../11a891eb-b51f-4508-9010-f17d35ce96a3.json | 8 ++++++++ aws-crt-kotlin/api/android/aws-crt-kotlin.api | 16 ++++++++++++++++ aws-crt-kotlin/api/jvm/aws-crt-kotlin.api | 16 ++++++++++++++++ .../crt/http/HttpClientConnectionManager.kt | 5 +++++ .../sdk/kotlin/crt/http/HttpManagerMetrics.kt | 11 +++++++++++ .../crt/http/HttpClientConnectionManagerJVM.kt | 10 ++++++++++ .../http/HttpClientConnectionManagerNative.kt | 3 +++ 7 files changed, 69 insertions(+) create mode 100644 .changes/11a891eb-b51f-4508-9010-f17d35ce96a3.json create mode 100644 aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpManagerMetrics.kt diff --git a/.changes/11a891eb-b51f-4508-9010-f17d35ce96a3.json b/.changes/11a891eb-b51f-4508-9010-f17d35ce96a3.json new file mode 100644 index 00000000..cf5bf45f --- /dev/null +++ b/.changes/11a891eb-b51f-4508-9010-f17d35ce96a3.json @@ -0,0 +1,8 @@ +{ + "id": "11a891eb-b51f-4508-9010-f17d35ce96a3", + "type": "feature", + "description": "Surface HTTP connection manager metrics", + "issues": [ + "awslabs/smithy-kotlin#893" + ] +} \ No newline at end of file diff --git a/aws-crt-kotlin/api/android/aws-crt-kotlin.api b/aws-crt-kotlin/api/android/aws-crt-kotlin.api index aaf0b96e..07a56b73 100644 --- a/aws-crt-kotlin/api/android/aws-crt-kotlin.api +++ b/aws-crt-kotlin/api/android/aws-crt-kotlin.api @@ -448,6 +448,7 @@ public final class aws/sdk/kotlin/crt/http/HttpClientConnectionManager : aws/sdk public fun (Laws/sdk/kotlin/crt/http/HttpClientConnectionManagerOptions;)V public final fun acquireConnection (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun close ()V + public final fun getManagerMetrics ()Laws/sdk/kotlin/crt/http/HttpManagerMetrics; public final fun getOptions ()Laws/sdk/kotlin/crt/http/HttpClientConnectionManagerOptions; public final fun releaseConnection (Laws/sdk/kotlin/crt/http/HttpClientConnection;)V public fun waitForShutdown (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -527,6 +528,21 @@ public final class aws/sdk/kotlin/crt/http/HttpHeaderBlock : java/lang/Enum { public static fun values ()[Laws/sdk/kotlin/crt/http/HttpHeaderBlock; } +public final class aws/sdk/kotlin/crt/http/HttpManagerMetrics { + public fun (JJJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun copy (JJJ)Laws/sdk/kotlin/crt/http/HttpManagerMetrics; + public static synthetic fun copy$default (Laws/sdk/kotlin/crt/http/HttpManagerMetrics;JJJILjava/lang/Object;)Laws/sdk/kotlin/crt/http/HttpManagerMetrics; + public fun equals (Ljava/lang/Object;)Z + public final fun getAvailableConcurrency ()J + public final fun getLeasedConcurrency ()J + public final fun getPendingConcurrencyAcquires ()J + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class aws/sdk/kotlin/crt/http/HttpMonitoringOptions { public fun ()V public fun (II)V diff --git a/aws-crt-kotlin/api/jvm/aws-crt-kotlin.api b/aws-crt-kotlin/api/jvm/aws-crt-kotlin.api index aaf0b96e..07a56b73 100644 --- a/aws-crt-kotlin/api/jvm/aws-crt-kotlin.api +++ b/aws-crt-kotlin/api/jvm/aws-crt-kotlin.api @@ -448,6 +448,7 @@ public final class aws/sdk/kotlin/crt/http/HttpClientConnectionManager : aws/sdk public fun (Laws/sdk/kotlin/crt/http/HttpClientConnectionManagerOptions;)V public final fun acquireConnection (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun close ()V + public final fun getManagerMetrics ()Laws/sdk/kotlin/crt/http/HttpManagerMetrics; public final fun getOptions ()Laws/sdk/kotlin/crt/http/HttpClientConnectionManagerOptions; public final fun releaseConnection (Laws/sdk/kotlin/crt/http/HttpClientConnection;)V public fun waitForShutdown (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -527,6 +528,21 @@ public final class aws/sdk/kotlin/crt/http/HttpHeaderBlock : java/lang/Enum { public static fun values ()[Laws/sdk/kotlin/crt/http/HttpHeaderBlock; } +public final class aws/sdk/kotlin/crt/http/HttpManagerMetrics { + public fun (JJJ)V + public final fun component1 ()J + public final fun component2 ()J + public final fun component3 ()J + public final fun copy (JJJ)Laws/sdk/kotlin/crt/http/HttpManagerMetrics; + public static synthetic fun copy$default (Laws/sdk/kotlin/crt/http/HttpManagerMetrics;JJJILjava/lang/Object;)Laws/sdk/kotlin/crt/http/HttpManagerMetrics; + public fun equals (Ljava/lang/Object;)Z + public final fun getAvailableConcurrency ()J + public final fun getLeasedConcurrency ()J + public final fun getPendingConcurrencyAcquires ()J + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class aws/sdk/kotlin/crt/http/HttpMonitoringOptions { public fun ()V public fun (II)V diff --git a/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManager.kt b/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManager.kt index d3b66a92..59576a7f 100644 --- a/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManager.kt +++ b/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManager.kt @@ -14,6 +14,11 @@ import aws.sdk.kotlin.crt.Closeable public expect class HttpClientConnectionManager(options: HttpClientConnectionManagerOptions) : Closeable, AsyncShutdown { + /** + * The active metrics for this connection manager + */ + public val managerMetrics: HttpManagerMetrics + /** * The options this manager was configured with */ diff --git a/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpManagerMetrics.kt b/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpManagerMetrics.kt new file mode 100644 index 00000000..d106cb55 --- /dev/null +++ b/aws-crt-kotlin/common/src/aws/sdk/kotlin/crt/http/HttpManagerMetrics.kt @@ -0,0 +1,11 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +package aws.sdk.kotlin.crt.http + +public data class HttpManagerMetrics( + public val availableConcurrency: Long, + public val pendingConcurrencyAcquires: Long, + public val leasedConcurrency: Long, +) diff --git a/aws-crt-kotlin/jvm/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerJVM.kt b/aws-crt-kotlin/jvm/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerJVM.kt index a7e45627..ca12819d 100644 --- a/aws-crt-kotlin/jvm/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerJVM.kt +++ b/aws-crt-kotlin/jvm/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerJVM.kt @@ -24,6 +24,16 @@ public actual class HttpClientConnectionManager actual constructor( private val jniManager = HttpClientConnectionManagerJni.create(options.into()) + public actual val managerMetrics: HttpManagerMetrics + get() { + val jniMetrics = jniManager.managerMetrics + return HttpManagerMetrics( + availableConcurrency = jniMetrics.availableConcurrency, + pendingConcurrencyAcquires = jniMetrics.pendingConcurrencyAcquires, + leasedConcurrency = jniMetrics.leasedConcurrency, + ) + } + /** * Request an HttpClientConnection from the pool */ diff --git a/aws-crt-kotlin/native/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerNative.kt b/aws-crt-kotlin/native/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerNative.kt index ffee0ab4..242b780f 100644 --- a/aws-crt-kotlin/native/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerNative.kt +++ b/aws-crt-kotlin/native/src/aws/sdk/kotlin/crt/http/HttpClientConnectionManagerNative.kt @@ -11,6 +11,9 @@ import aws.sdk.kotlin.crt.Closeable public actual class HttpClientConnectionManager actual constructor( public actual val options: HttpClientConnectionManagerOptions, ) : Closeable, AsyncShutdown { + public actual val managerMetrics: HttpManagerMetrics + get() = TODO("Not yet implemented") + /** * Request an HttpClientConnection from the pool */