Skip to content

Commit 472c2a8

Browse files
committed
add telemetry provider configuration
1 parent 0f8db44 commit 472c2a8

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1+
public final class aws/smithy/kotlin/runtime/auth/awssigning/DefaultAwsSignerBuilder {
2+
public fun <init> ()V
3+
public final fun build ()Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;
4+
public final fun withTelemetryProvider (Laws/smithy/kotlin/runtime/telemetry/TelemetryProvider;)Laws/smithy/kotlin/runtime/auth/awssigning/DefaultAwsSignerBuilder;
5+
}
6+
17
public final class aws/smithy/kotlin/runtime/auth/awssigning/DefaultAwsSignerKt {
8+
public static final fun defaultAwsSigner (Lkotlin/jvm/functions/Function1;)Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;
29
public static final fun getDefaultAwsSigner ()Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;
310
}
411

runtime/auth/aws-signing-default/common/src/aws/smithy/kotlin/runtime/auth/awssigning/DefaultAwsSigner.kt

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,46 @@
44
*/
55
package aws.smithy.kotlin.runtime.auth.awssigning
66

7+
import aws.smithy.kotlin.runtime.ExperimentalApi
78
import aws.smithy.kotlin.runtime.http.Headers
89
import aws.smithy.kotlin.runtime.http.request.HttpRequest
10+
import aws.smithy.kotlin.runtime.telemetry.TelemetryProvider
911
import aws.smithy.kotlin.runtime.telemetry.logging.logger
1012
import aws.smithy.kotlin.runtime.time.TimestampFormat
1113
import kotlin.coroutines.coroutineContext
1214

1315
/** The default implementation of [AwsSigner] */
1416
public val DefaultAwsSigner: AwsSigner = DefaultAwsSignerImpl()
1517

18+
public fun defaultAwsSigner(block: DefaultAwsSignerBuilder.() -> Unit): AwsSigner = DefaultAwsSignerBuilder().apply(block).build()
19+
20+
/**
21+
* Builder class allows customers to configure telemetry provider for observability when using the signer as a standalone component.
22+
**/
23+
public class DefaultAwsSignerBuilder {
24+
private var telemetryProvider: TelemetryProvider? = null
25+
26+
public fun withTelemetryProvider(provider: TelemetryProvider) : DefaultAwsSignerBuilder = apply {
27+
this.telemetryProvider = provider
28+
}
29+
30+
public fun build(): AwsSigner {
31+
return DefaultAwsSignerImpl(
32+
telemetryProvider = telemetryProvider,
33+
)
34+
}
35+
}
36+
37+
@OptIn(ExperimentalApi::class)
1638
internal class DefaultAwsSignerImpl(
1739
private val canonicalizer: Canonicalizer = Canonicalizer.Default,
1840
private val signatureCalculator: SignatureCalculator = SignatureCalculator.Default,
1941
private val requestMutator: RequestMutator = RequestMutator.Default,
42+
private val telemetryProvider: TelemetryProvider? = null,
2043
) : AwsSigner {
2144
override suspend fun sign(request: HttpRequest, config: AwsSigningConfig): AwsSigningResult<HttpRequest> {
22-
val logger = coroutineContext.logger<DefaultAwsSignerImpl>()
45+
val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger("DefaultAwsSigner")
46+
?: coroutineContext.logger<DefaultAwsSignerImpl>()
2347

2448
// TODO: implement SigV4a
2549
if (config.algorithm != AwsSigningAlgorithm.SIGV4) {
@@ -52,7 +76,8 @@ internal class DefaultAwsSignerImpl(
5276
prevSignature: ByteArray,
5377
config: AwsSigningConfig,
5478
): AwsSigningResult<Unit> {
55-
val logger = coroutineContext.logger<DefaultAwsSignerImpl>()
79+
val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger("DefaultAwsSigner")
80+
?: coroutineContext.logger<DefaultAwsSignerImpl>()
5681

5782
val stringToSign = signatureCalculator.chunkStringToSign(chunkBody, prevSignature, config)
5883
logger.trace { "Chunk string to sign:\n$stringToSign" }
@@ -70,7 +95,8 @@ internal class DefaultAwsSignerImpl(
7095
prevSignature: ByteArray,
7196
config: AwsSigningConfig,
7297
): AwsSigningResult<Unit> {
73-
val logger = coroutineContext.logger<DefaultAwsSignerImpl>()
98+
val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger("DefaultAwsSigner")
99+
?: coroutineContext.logger<DefaultAwsSignerImpl>()
74100

75101
// FIXME - can we share canonicalization code more than we are..., also this reduce is inefficient.
76102
// canonicalize the headers

0 commit comments

Comments
 (0)