Skip to content

Commit 6c022f0

Browse files
committed
Move credentials business metrics to credentials attributes
1 parent eb32e8f commit 6c022f0

File tree

3 files changed

+57
-25
lines changed

3 files changed

+57
-25
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
package aws.smithy.kotlin.runtime.http.operation
77

88
import aws.smithy.kotlin.runtime.InternalApi
9+
import aws.smithy.kotlin.runtime.businessmetrics.BusinessMetrics
910
import aws.smithy.kotlin.runtime.businessmetrics.SmithyBusinessMetric
1011
import aws.smithy.kotlin.runtime.businessmetrics.emitBusinessMetric
1112
import aws.smithy.kotlin.runtime.client.LogMode
1213
import aws.smithy.kotlin.runtime.client.endpoints.authOptions
1314
import aws.smithy.kotlin.runtime.client.logMode
1415
import aws.smithy.kotlin.runtime.collections.attributesOf
1516
import aws.smithy.kotlin.runtime.collections.emptyAttributes
17+
import aws.smithy.kotlin.runtime.collections.get
1618
import aws.smithy.kotlin.runtime.collections.merge
1719
import aws.smithy.kotlin.runtime.http.*
1820
import aws.smithy.kotlin.runtime.http.auth.SignHttpRequest
@@ -23,9 +25,11 @@ import aws.smithy.kotlin.runtime.http.request.dumpRequest
2325
import aws.smithy.kotlin.runtime.http.request.immutableView
2426
import aws.smithy.kotlin.runtime.http.request.toBuilder
2527
import aws.smithy.kotlin.runtime.http.response.dumpResponse
28+
import aws.smithy.kotlin.runtime.identity.Identity
2629
import aws.smithy.kotlin.runtime.io.Handler
2730
import aws.smithy.kotlin.runtime.io.middleware.Middleware
2831
import aws.smithy.kotlin.runtime.io.middleware.Phase
32+
import aws.smithy.kotlin.runtime.operation.ExecutionContext
2933
import aws.smithy.kotlin.runtime.retries.RetryStrategy
3034
import aws.smithy.kotlin.runtime.retries.StandardRetryStrategy
3135
import aws.smithy.kotlin.runtime.retries.policy.RetryPolicy
@@ -285,6 +289,9 @@ internal class AuthHandler<Input, Output>(
285289
identityProvider.resolve(request.context)
286290
}
287291

292+
// emit identity business metrics
293+
emitIdentityBusinessMetrics(identity, request.context)
294+
288295
val resolveEndpointReq = ResolveEndpointRequest(request.context, request.subject.immutableView(), identity)
289296

290297
if (endpointResolver != null) {
@@ -408,3 +415,16 @@ private class InterceptorTransmitMiddleware<I, O>(
408415
return call
409416
}
410417
}
418+
419+
/**
420+
* Emits an [Identity]'s attributes [BusinessMetrics] into an [ExecutionContext]
421+
*/
422+
private fun emitIdentityBusinessMetrics(identity: Identity, context: ExecutionContext) { // TODO: Add some E2E tests for this !
423+
val identityAttributes = identity.attributes
424+
425+
if (identityAttributes.contains(BusinessMetrics)) {
426+
identityAttributes[BusinessMetrics].forEach { metric ->
427+
context.emitBusinessMetric(metric)
428+
}
429+
}
430+
}

runtime/runtime-core/api/runtime-core.api

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,14 @@ public abstract interface class aws/smithy/kotlin/runtime/businessmetrics/Busine
8282
}
8383

8484
public final class aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsKt {
85-
public static final fun containsBusinessMetric (Laws/smithy/kotlin/runtime/operation/ExecutionContext;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)Z
86-
public static final fun emitBusinessMetric (Laws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
87-
public static final fun emitBusinessMetric (Laws/smithy/kotlin/runtime/operation/ExecutionContext;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
85+
public static final fun containsBusinessMetric (Laws/smithy/kotlin/runtime/collections/Attributes;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)Z
86+
public static final fun emitBusinessMetric (Laws/smithy/kotlin/runtime/collections/MutableAttributes;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
87+
public static final fun emitBusinessMetric (Laws/smithy/kotlin/runtime/collections/MutableAttributes;Ljava/lang/String;)V
88+
public static final fun emitBusinessMetrics (Laws/smithy/kotlin/runtime/collections/MutableAttributes;Ljava/util/Set;)V
8889
public static final fun getAccountIdBasedEndpointAccountId ()Laws/smithy/kotlin/runtime/collections/AttributeKey;
8990
public static final fun getBusinessMetrics ()Laws/smithy/kotlin/runtime/collections/AttributeKey;
9091
public static final fun getServiceEndpointOverride ()Laws/smithy/kotlin/runtime/collections/AttributeKey;
91-
public static final fun removeBusinessMetric (Laws/smithy/kotlin/runtime/operation/ExecutionContext;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
92+
public static final fun removeBusinessMetric (Laws/smithy/kotlin/runtime/collections/MutableAttributes;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;)V
9293
}
9394

9495
public final class aws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric : java/lang/Enum, aws/smithy/kotlin/runtime/businessmetrics/BusinessMetric {
@@ -2049,6 +2050,10 @@ public final class aws/smithy/kotlin/runtime/smoketests/SmokeTestsFunctionsJVMKt
20492050
public static final fun exitProcess (I)Ljava/lang/Void;
20502051
}
20512052

2053+
public final class aws/smithy/kotlin/runtime/smoketests/SmokeTestsFunctionsKt {
2054+
public static final fun printExceptionStackTrace (Ljava/lang/Exception;)V
2055+
}
2056+
20522057
public final class aws/smithy/kotlin/runtime/text/Scanner {
20532058
public fun <init> (Ljava/lang/String;)V
20542059
public final fun getText ()Ljava/lang/String;

runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package aws.smithy.kotlin.runtime.businessmetrics
66

77
import aws.smithy.kotlin.runtime.InternalApi
88
import aws.smithy.kotlin.runtime.collections.*
9-
import aws.smithy.kotlin.runtime.operation.ExecutionContext
109

1110
/**
1211
* Keeps track of all business metrics along an operations execution
@@ -27,33 +26,49 @@ public val AccountIdBasedEndpointAccountId: AttributeKey<String> = AttributeKey(
2726
public val ServiceEndpointOverride: AttributeKey<Boolean> = AttributeKey("aws.smithy.kotlin#ServiceEndpointOverride")
2827

2928
/**
30-
* Emit a business metric to the execution context attributes
29+
* Emits a business metric into [MutableAttributes]
30+
* @param identifier The identifier of the [BusinessMetric] to be emitted.
3131
*/
3232
@InternalApi
33-
public fun ExecutionContext.emitBusinessMetric(metric: BusinessMetric) {
34-
if (this.attributes.contains(BusinessMetrics)) {
35-
this.attributes[BusinessMetrics].add(metric.identifier)
33+
public fun MutableAttributes.emitBusinessMetric(identifier: String) {
34+
if (this.contains(BusinessMetrics)) {
35+
this[BusinessMetrics].add(identifier)
3636
} else {
37-
this.attributes[BusinessMetrics] = mutableSetOf(metric.identifier)
37+
this[BusinessMetrics] = mutableSetOf(identifier)
3838
}
3939
}
4040

4141
/**
42-
* Removes a business metric from the execution context attributes
42+
* Emits a business metric into [MutableAttributes]
43+
* @param metric The [BusinessMetric] to be emitted.
4344
*/
4445
@InternalApi
45-
public fun ExecutionContext.removeBusinessMetric(metric: BusinessMetric) {
46-
if (this.attributes.contains(BusinessMetrics)) {
47-
this.attributes[BusinessMetrics].remove(metric.identifier)
46+
public fun MutableAttributes.emitBusinessMetric(metric: BusinessMetric): Unit = this.emitBusinessMetric(metric.identifier)
47+
48+
/**
49+
* Emits business metrics into [MutableAttributes]
50+
* @param metrics The [BusinessMetric]s to be emitted.
51+
*/
52+
@InternalApi
53+
public fun MutableAttributes.emitBusinessMetrics(metrics: Set<BusinessMetric>): Unit =
54+
metrics.forEach { emitBusinessMetric(it) }
55+
56+
/**
57+
* Removes a business metric from the [MutableAttributes]
58+
*/
59+
@InternalApi
60+
public fun MutableAttributes.removeBusinessMetric(metric: BusinessMetric) {
61+
if (this.contains(BusinessMetrics)) {
62+
this[BusinessMetrics].remove(metric.identifier)
4863
}
4964
}
5065

5166
/**
52-
* Checks if a business metric exists in the execution context attributes
67+
* Checks if a business metric exists in the [Attributes]
5368
*/
5469
@InternalApi
55-
public fun ExecutionContext.containsBusinessMetric(metric: BusinessMetric): Boolean =
56-
(this.attributes.contains(BusinessMetrics)) && this.attributes[BusinessMetrics].contains(metric.identifier)
70+
public fun Attributes.containsBusinessMetric(metric: BusinessMetric): Boolean =
71+
(this.contains(BusinessMetrics)) && this[BusinessMetrics].contains(metric.identifier)
5772

5873
/**
5974
* Valid business metrics
@@ -77,11 +92,3 @@ public enum class SmithyBusinessMetric(public override val identifier: String) :
7792
ACCOUNT_ID_BASED_ENDPOINT("O"),
7893
SIGV4A_SIGNING("S"),
7994
}
80-
81-
/**
82-
* Emits a business metric if the current [Attributes] instance is of type [ExecutionContext].
83-
*/
84-
@InternalApi
85-
public fun Attributes.emitBusinessMetric(metric: BusinessMetric) {
86-
if (this is ExecutionContext) this.emitBusinessMetric(metric)
87-
}

0 commit comments

Comments
 (0)