Skip to content

Commit 9adc647

Browse files
authored
feat: emit accountId metrics (#1551)
* emit business metrics * smithy kotlin version bump * pr feedback & smithy version bump * pr feedback * bump smithy version
1 parent 52ed6d5 commit 9adc647

File tree

6 files changed

+46
-2
lines changed

6 files changed

+46
-2
lines changed

aws-runtime/aws-config/api/aws-config.api

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@ public final class aws/sdk/kotlin/runtime/config/endpoints/AccountIdEndpointMode
307307
public static fun values ()[Laws/sdk/kotlin/runtime/config/endpoints/AccountIdEndpointMode;
308308
}
309309

310+
public final class aws/sdk/kotlin/runtime/config/endpoints/AccountIdEndpointModeKt {
311+
public static final fun toBusinessMetric (Laws/sdk/kotlin/runtime/config/endpoints/AccountIdEndpointMode;)Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;
312+
}
313+
310314
public final class aws/sdk/kotlin/runtime/config/endpoints/ResolversKt {
311315
public static final fun resolveAccountId (Laws/sdk/kotlin/runtime/config/endpoints/AccountIdEndpointMode;Laws/smithy/kotlin/runtime/collections/Attributes;)Ljava/lang/String;
312316
public static final fun resolveAccountIdEndpointMode (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/endpoints/AccountIdEndpointMode.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
*/
55
package aws.sdk.kotlin.runtime.config.endpoints
66

7+
import aws.smithy.kotlin.runtime.InternalApi
8+
import aws.smithy.kotlin.runtime.businessmetrics.BusinessMetric
9+
import aws.smithy.kotlin.runtime.businessmetrics.SmithyBusinessMetric
10+
711
/**
812
* Controls how the account ID endpoint parameter is bound for services that support routing
913
* endpoints based on it.
@@ -25,3 +29,11 @@ public enum class AccountIdEndpointMode {
2529
*/
2630
REQUIRED,
2731
}
32+
33+
@InternalApi
34+
public fun AccountIdEndpointMode.toBusinessMetric(): BusinessMetric = when (this) {
35+
AccountIdEndpointMode.PREFERRED -> SmithyBusinessMetric.ACCOUNT_ID_MODE_PREFERRED
36+
AccountIdEndpointMode.DISABLED -> SmithyBusinessMetric.ACCOUNT_ID_MODE_DISABLED
37+
AccountIdEndpointMode.REQUIRED -> SmithyBusinessMetric.ACCOUNT_ID_MODE_REQUIRED
38+
else -> throw IllegalStateException("Unexpected AccountIdEndpointMode value: ${this::class.simpleName}")
39+
}

codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/AwsRuntimeTypes.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ object AwsRuntimeTypes {
1919

2020
object Client : RuntimeTypePackage(AwsKotlinDependency.AWS_CORE, "client") {
2121
val AwsSdkClientConfig = symbol("AwsSdkClientConfig")
22+
val AwsClientOption = symbol("AwsClientOption")
2223
}
2324
}
2425

@@ -41,6 +42,7 @@ object AwsRuntimeTypes {
4142
val resolveEndpointUrl = symbol("resolveEndpointUrl")
4243
val resolveAccountId = symbol("resolveAccountId")
4344
val resolveAccountIdEndpointMode = symbol("resolveAccountIdEndpointMode")
45+
val toBusinessMetric = symbol("toBusinessMetric")
4446
}
4547

4648
object Profile : RuntimeTypePackage(AwsKotlinDependency.AWS_CONFIG, "config.profile") {

codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/businessmetrics/EndpointBusinessMetricsIntegration.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class EndpointBusinessMetricsIntegration : KotlinIntegration {
3838
RuntimeTypes.Core.BusinessMetrics.emitBusinessMetric,
3939
AwsRuntimeTypes.Http.Interceptors.BusinessMetrics.AwsBusinessMetric,
4040
)
41+
writer.write(
42+
"if (request.identity.attributes.contains(#T.AccountId)) request.context.#T(#T.RESOLVED_ACCOUNT_ID)",
43+
AwsRuntimeTypes.Core.Client.AwsClientOption,
44+
RuntimeTypes.Core.BusinessMetrics.emitBusinessMetric,
45+
RuntimeTypes.Core.BusinessMetrics.SmithyBusinessMetric,
46+
)
4147
writer.write("")
4248
}
4349
}

codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/customization/AccountIdEndpointBuiltinCustomization.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@ import aws.sdk.kotlin.codegen.ServiceClientCompanionObjectWriter
99
import aws.sdk.kotlin.codegen.endpoints.AwsBuiltins
1010
import software.amazon.smithy.kotlin.codegen.KotlinSettings
1111
import software.amazon.smithy.kotlin.codegen.core.CodegenContext
12+
import software.amazon.smithy.kotlin.codegen.core.KotlinWriter
1213
import software.amazon.smithy.kotlin.codegen.integration.AppendingSectionWriter
1314
import software.amazon.smithy.kotlin.codegen.integration.KotlinIntegration
1415
import software.amazon.smithy.kotlin.codegen.integration.SectionWriterBinding
1516
import software.amazon.smithy.kotlin.codegen.model.expectShape
1617
import software.amazon.smithy.kotlin.codegen.model.getEndpointRules
18+
import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolGenerator
19+
import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolMiddleware
1720
import software.amazon.smithy.kotlin.codegen.rendering.util.ConfigProperty
1821
import software.amazon.smithy.kotlin.codegen.rendering.util.ConfigPropertyType
1922
import software.amazon.smithy.model.Model
23+
import software.amazon.smithy.model.shapes.OperationShape
2024
import software.amazon.smithy.model.shapes.ServiceShape
2125

2226
/**
@@ -59,4 +63,20 @@ class AccountIdEndpointBuiltinCustomization : KotlinIntegration {
5963

6064
override fun additionalServiceConfigProps(ctx: CodegenContext): List<ConfigProperty> =
6165
listOf(AccountIdEndpointModeProp)
66+
67+
override fun customizeMiddleware(
68+
ctx: ProtocolGenerator.GenerationContext,
69+
resolved: List<ProtocolMiddleware>,
70+
): List<ProtocolMiddleware> = resolved + listOf(emitAccountIdEndpointModeMiddleware)
71+
}
72+
73+
private val emitAccountIdEndpointModeMiddleware = object : ProtocolMiddleware {
74+
override val name: String = "EmitAccountIdEndpointModeMiddleware"
75+
76+
override fun render(ctx: ProtocolGenerator.GenerationContext, op: OperationShape, writer: KotlinWriter) {
77+
writer.write(
78+
"op.context.emitBusinessMetric(config.accountIdEndpointMode.#T())",
79+
AwsRuntimeTypes.Config.Endpoints.toBusinessMetric,
80+
)
81+
}
6282
}

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ atomicfu-version = "0.25.0"
1212
binary-compatibility-validator-version = "0.16.3"
1313

1414
# smithy-kotlin codegen and runtime are versioned separately
15-
smithy-kotlin-runtime-version = "1.4.9"
16-
smithy-kotlin-codegen-version = "0.34.9"
15+
smithy-kotlin-runtime-version = "1.4.11"
16+
smithy-kotlin-codegen-version = "0.34.11"
1717

1818
# codegen
1919
smithy-version = "1.53.0"

0 commit comments

Comments
 (0)