Skip to content

Commit ad639f2

Browse files
authored
kn: observability (#1234)
1 parent 7067459 commit ad639f2

File tree

11 files changed

+130
-5
lines changed

11 files changed

+130
-5
lines changed

runtime/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ subprojects {
6262
}
6363
}
6464

65-
named("jvmTest") {
65+
findByName("jvmTest")?.run {
6666
dependencies {
6767
implementation(libraries.kotlinx.coroutines.debug)
6868
implementation(libraries.kotest.assertions.core.jvm)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
description = "Logging provider based on CRT"
6+
extra["displayName"] = "Smithy :: Kotlin :: Observability :: CRT"
7+
extra["moduleName"] = "aws.smithy.kotlin.runtime.telemetry.logging.crt"
8+
9+
kotlin {
10+
sourceSets {
11+
nativeMain {
12+
dependencies {
13+
api(project(":runtime:observability:telemetry-api"))
14+
api(libs.crt.kotlin)
15+
}
16+
}
17+
}
18+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package aws.smithy.kotlin.runtime.telemetry.logging.crt
7+
8+
import aws.smithy.kotlin.runtime.telemetry.logging.LogLevel
9+
import aws.smithy.kotlin.runtime.telemetry.logging.LogRecordBuilder
10+
import aws.smithy.kotlin.runtime.telemetry.logging.MessageSupplier
11+
12+
public class CrtLogRecordBuilder(
13+
private val delegate: CrtLogger,
14+
private val level: LogLevel,
15+
) : LogRecordBuilder {
16+
private var cause: Throwable? = null
17+
private var msg: (() -> String)? = null
18+
19+
override fun setCause(ex: Throwable) {
20+
cause = ex
21+
}
22+
23+
override fun setMessage(message: String) {
24+
msg = { message }
25+
}
26+
27+
override fun setMessage(message: MessageSupplier) {
28+
msg = message
29+
}
30+
31+
// CRT logger does not support setting key-value pairs
32+
override fun setKeyValuePair(key: String, value: Any) { }
33+
34+
override fun emit() {
35+
val message = requireNotNull(msg) { "no message provided to LogRecordBuilder" }
36+
37+
val logMethod = when (level) {
38+
LogLevel.Trace -> delegate::trace
39+
LogLevel.Debug -> delegate::debug
40+
LogLevel.Info -> delegate::info
41+
LogLevel.Warning -> delegate::warn
42+
LogLevel.Error -> delegate::error
43+
}
44+
45+
logMethod(cause, message)
46+
}
47+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package aws.smithy.kotlin.runtime.telemetry.logging.crt
7+
8+
import aws.sdk.kotlin.crt.WithCrt
9+
import aws.sdk.kotlin.crt.log
10+
import aws.smithy.kotlin.runtime.telemetry.logging.LogLevel
11+
import aws.smithy.kotlin.runtime.telemetry.logging.LogRecordBuilder
12+
import aws.smithy.kotlin.runtime.telemetry.logging.Logger
13+
import aws.smithy.kotlin.runtime.telemetry.logging.MessageSupplier
14+
import aws.sdk.kotlin.crt.Config as CrtConfig
15+
import aws.sdk.kotlin.crt.LogLevel as CrtLogLevel
16+
17+
public class CrtLogger(public val name: String, public val config: CrtConfig) :
18+
WithCrt(),
19+
Logger {
20+
override fun trace(t: Throwable?, msg: MessageSupplier): Unit = log(CrtLogLevel.Trace, msg())
21+
override fun debug(t: Throwable?, msg: MessageSupplier): Unit = log(CrtLogLevel.Debug, msg())
22+
override fun info(t: Throwable?, msg: MessageSupplier): Unit = log(CrtLogLevel.Info, msg())
23+
override fun warn(t: Throwable?, msg: MessageSupplier): Unit = log(CrtLogLevel.Warn, msg())
24+
override fun error(t: Throwable?, msg: MessageSupplier): Unit = log(CrtLogLevel.Error, msg())
25+
override fun isEnabledFor(level: LogLevel): Boolean = config.logLevel.ordinal >= level.ordinal
26+
override fun atLevel(level: LogLevel): LogRecordBuilder = CrtLogRecordBuilder(this, level)
27+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package aws.smithy.kotlin.runtime.telemetry.logging.crt
7+
8+
import aws.smithy.kotlin.runtime.telemetry.logging.*
9+
import aws.sdk.kotlin.crt.Config as CrtConfig
10+
11+
public class CrtLoggerProvider : LoggerProvider {
12+
override fun getOrCreateLogger(name: String): Logger = CrtLogger(name, CrtConfig())
13+
public fun getOrCreateLogger(name: String, config: CrtConfig): Logger = CrtLogger(name, config)
14+
}

runtime/observability/logging-slf4j2/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
description = "Logging provider based on SLF4J"
66
extra["displayName"] = "Smithy :: Kotlin :: Observability :: SLF4J binding"
7-
extra["moduleName"] = "aws.smithy.kotlin.runtime.telemetry"
7+
extra["moduleName"] = "aws.smithy.kotlin.runtime.telemetry.slf4j"
88

99
kotlin {
1010
sourceSets {

runtime/observability/telemetry-defaults/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ kotlin {
2424
}
2525
}
2626

27+
nativeMain {
28+
dependencies {
29+
implementation(project(":runtime:observability:logging-crt"))
30+
}
31+
}
32+
2733
all {
2834
languageSettings.optIn("aws.smithy.kotlin.runtime.InternalApi")
2935
}

runtime/observability/telemetry-defaults/native/src/aws/smithy/kotlin/runtime/telemetry/logging/DefaultLoggerProviderNative.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@
55

66
package aws.smithy.kotlin.runtime.telemetry.logging
77

8-
internal actual val DefaultLoggerProvider: LoggerProvider = TODO("Not yet implemented")
8+
import aws.smithy.kotlin.runtime.telemetry.logging.crt.CrtLoggerProvider
9+
10+
internal actual val DefaultLoggerProvider: LoggerProvider = CrtLoggerProvider()

runtime/protocol/http-client-engines/http-client-engine-default/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,28 @@ kotlin {
1616
implementation(project(":runtime:runtime-core"))
1717
}
1818
}
19+
1920
jvmMain {
2021
dependencies {
2122
// okhttp works on both JVM and Android
2223
implementation(project(":runtime:protocol:http-client-engines:http-client-engine-okhttp"))
2324
}
2425
}
26+
2527
jvmTest {
2628
dependencies {
2729
implementation(project(":runtime:protocol:http-client-engines:http-client-engine-crt"))
2830
}
2931
}
32+
3033
all {
3134
languageSettings.optIn("aws.smithy.kotlin.runtime.InternalApi")
3235
}
36+
37+
nativeMain {
38+
dependencies {
39+
implementation(project(":runtime:protocol:http-client-engines:http-client-engine-crt"))
40+
}
41+
}
3342
}
3443
}

runtime/protocol/http-client-engines/http-client-engine-default/native/src/aws/smithy/kotlin/runtime/http/engine/DefaultHttpEngineNative.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55

66
package aws.smithy.kotlin.runtime.http.engine
77

8-
internal actual fun newDefaultHttpEngine(block: (HttpClientEngineConfig.Builder.() -> Unit)?): CloseableHttpClientEngine =
9-
TODO("Not yet implemented")
8+
import aws.smithy.kotlin.runtime.http.engine.crt.CrtHttpEngine
9+
10+
internal actual fun newDefaultHttpEngine(block: (HttpClientEngineConfig.Builder.() -> Unit)?): CloseableHttpClientEngine = CrtHttpEngine()

0 commit comments

Comments
 (0)