Skip to content

Commit 4b7fda1

Browse files
committed
emit business metrics
1 parent 939d273 commit 4b7fda1

File tree

5 files changed

+44
-0
lines changed

5 files changed

+44
-0
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: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
*/
55
package aws.sdk.kotlin.runtime.config.endpoints
66

7+
import aws.smithy.kotlin.runtime.businessmetrics.BusinessMetric
8+
import aws.smithy.kotlin.runtime.businessmetrics.SmithyBusinessMetric
9+
710
/**
811
* Controls how the account ID endpoint parameter is bound for services that support routing
912
* endpoints based on it.
@@ -25,3 +28,10 @@ public enum class AccountIdEndpointMode {
2528
*/
2629
REQUIRED,
2730
}
31+
32+
public fun AccountIdEndpointMode.toBusinessMetric(): BusinessMetric = when (this) {
33+
AccountIdEndpointMode.PREFERRED -> SmithyBusinessMetric.ACCOUNT_ID_MODE_PREFERRED
34+
AccountIdEndpointMode.DISABLED -> SmithyBusinessMetric.ACCOUNT_ID_MODE_DISABLED
35+
AccountIdEndpointMode.REQUIRED -> SmithyBusinessMetric.ACCOUNT_ID_MODE_REQUIRED
36+
else -> throw IllegalStateException("Unexpected AccountIdEndpointMode value: ${this::class.simpleName}")
37+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ object AwsRuntimeTypes {
1717
val AwsServiceException = symbol("AwsServiceException")
1818
val ClientException = symbol("ClientException")
1919

20+
// FUTURE MERGE CONFLICG: This package will be removed when region provider PR merges: https://github.com/awslabs/aws-sdk-kotlin/pull/1488
21+
// Prepare for merge conflicts
2022
object Client : RuntimeTypePackage(AwsKotlinDependency.AWS_CORE, "client") {
2123
val AwsSdkClientConfig = symbol("AwsSdkClientConfig")
24+
val AwsClientOption = symbol("AwsClientOption")
2225
}
2326
}
2427

@@ -41,6 +44,7 @@ object AwsRuntimeTypes {
4144
val resolveEndpointUrl = symbol("resolveEndpointUrl")
4245
val resolveAccountId = symbol("resolveAccountId")
4346
val resolveAccountIdEndpointMode = symbol("resolveAccountIdEndpointMode")
47+
val toBusinessMetric = symbol("toBusinessMetric")
4448
}
4549

4650
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
}

0 commit comments

Comments
 (0)