Skip to content

Commit e6357f9

Browse files
authored
misc: add telemetry configuration to DefaultAwsSigner (#1226)
* add telemetry provider configuration * lint * address pr reviews * add changelog
1 parent b7e50e3 commit e6357f9

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "d3ce7511-6fb2-4435-8f46-db724551b384",
3+
"type": "misc",
4+
"description": "Add telemetry provider configuration to `DefaultAwsSigner`"
5+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
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 getTelemetryProvider ()Laws/smithy/kotlin/runtime/telemetry/TelemetryProvider;
5+
public final fun setTelemetryProvider (Laws/smithy/kotlin/runtime/telemetry/TelemetryProvider;)V
6+
}
7+
18
public final class aws/smithy/kotlin/runtime/auth/awssigning/DefaultAwsSignerKt {
9+
public static final fun DefaultAwsSigner (Lkotlin/jvm/functions/Function1;)Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;
210
public static final fun getDefaultAwsSigner ()Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;
311
}
412

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,41 @@
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+
/** Creates a customized instance of [AwsSigner] */
19+
@Suppress("ktlint:standard:function-naming")
20+
public fun DefaultAwsSigner(block: DefaultAwsSignerBuilder.() -> Unit): AwsSigner =
21+
DefaultAwsSignerBuilder().apply(block).build()
22+
23+
/** A builder class for creating instances of [AwsSigner] using the default implementation */
24+
public class DefaultAwsSignerBuilder {
25+
public var telemetryProvider: TelemetryProvider? = null
26+
27+
public fun build(): AwsSigner = DefaultAwsSignerImpl(
28+
telemetryProvider = telemetryProvider,
29+
)
30+
}
31+
32+
@OptIn(ExperimentalApi::class)
1633
internal class DefaultAwsSignerImpl(
1734
private val canonicalizer: Canonicalizer = Canonicalizer.Default,
1835
private val signatureCalculator: SignatureCalculator = SignatureCalculator.Default,
1936
private val requestMutator: RequestMutator = RequestMutator.Default,
37+
private val telemetryProvider: TelemetryProvider? = null,
2038
) : AwsSigner {
2139
override suspend fun sign(request: HttpRequest, config: AwsSigningConfig): AwsSigningResult<HttpRequest> {
22-
val logger = coroutineContext.logger<DefaultAwsSignerImpl>()
40+
val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger("DefaultAwsSigner")
41+
?: coroutineContext.logger<DefaultAwsSignerImpl>()
2342

2443
// TODO: implement SigV4a
2544
if (config.algorithm != AwsSigningAlgorithm.SIGV4) {
@@ -52,7 +71,8 @@ internal class DefaultAwsSignerImpl(
5271
prevSignature: ByteArray,
5372
config: AwsSigningConfig,
5473
): AwsSigningResult<Unit> {
55-
val logger = coroutineContext.logger<DefaultAwsSignerImpl>()
74+
val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger("DefaultAwsSigner")
75+
?: coroutineContext.logger<DefaultAwsSignerImpl>()
5676

5777
val stringToSign = signatureCalculator.chunkStringToSign(chunkBody, prevSignature, config)
5878
logger.trace { "Chunk string to sign:\n$stringToSign" }
@@ -70,7 +90,8 @@ internal class DefaultAwsSignerImpl(
7090
prevSignature: ByteArray,
7191
config: AwsSigningConfig,
7292
): AwsSigningResult<Unit> {
73-
val logger = coroutineContext.logger<DefaultAwsSignerImpl>()
93+
val logger = telemetryProvider?.loggerProvider?.getOrCreateLogger("DefaultAwsSigner")
94+
?: coroutineContext.logger<DefaultAwsSignerImpl>()
7495

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

0 commit comments

Comments
 (0)