Skip to content

Commit 74c782c

Browse files
authored
feat: provide abstract telemetry classes (#1078)
1 parent 3f22859 commit 74c782c

37 files changed

+547
-154
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "0523c42d-d3a6-4789-800b-b613e6589170",
3+
"type": "feature",
4+
"description": "Provide new abstract versions of telemetry classes to simplify the creation of custom telemetry providers"
5+
}

runtime/observability/telemetry-api/api/telemetry-api.api

Lines changed: 151 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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
7+
8+
import aws.smithy.kotlin.runtime.ExperimentalApi
9+
import aws.smithy.kotlin.runtime.telemetry.context.ContextManager
10+
import aws.smithy.kotlin.runtime.telemetry.logging.LoggerProvider
11+
import aws.smithy.kotlin.runtime.telemetry.metrics.MeterProvider
12+
import aws.smithy.kotlin.runtime.telemetry.trace.TracerProvider
13+
14+
/**
15+
* An abstract implementation of a telemetry provider. By default, this class uses no-op implementations for all members
16+
* unless overridden in a subclass.
17+
*/
18+
public abstract class AbstractTelemetryProvider : TelemetryProvider {
19+
@ExperimentalApi
20+
override val meterProvider: MeterProvider = MeterProvider.None
21+
22+
@ExperimentalApi
23+
override val tracerProvider: TracerProvider = TracerProvider.None
24+
25+
@ExperimentalApi
26+
override val loggerProvider: LoggerProvider = LoggerProvider.None
27+
28+
@ExperimentalApi
29+
override val contextManager: ContextManager = ContextManager.None
30+
}

runtime/observability/telemetry-api/common/src/aws/smithy/kotlin/runtime/telemetry/TelemetryProvider.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public interface TelemetryProvider {
2020
/**
2121
* Default (no-op) telemetry provider
2222
*/
23-
public val None: TelemetryProvider = NoOpTelemetryProvider
23+
public val None: TelemetryProvider = object : AbstractTelemetryProvider() { }
2424
}
2525

2626
/**
@@ -47,11 +47,3 @@ public interface TelemetryProvider {
4747
@ExperimentalApi
4848
public val contextManager: ContextManager
4949
}
50-
51-
@OptIn(ExperimentalApi::class)
52-
private object NoOpTelemetryProvider : TelemetryProvider {
53-
override val meterProvider: MeterProvider = MeterProvider.None
54-
override val tracerProvider: TracerProvider = TracerProvider.None
55-
override val loggerProvider: LoggerProvider = LoggerProvider.None
56-
override val contextManager: ContextManager = ContextManager.None
57-
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
package aws.smithy.kotlin.runtime.telemetry.context
6+
7+
/**
8+
* An abstract implementation of telemetry provider context. By default, this class uses no-op implementations for all
9+
* members unless overridden in a subclass.
10+
*/
11+
public abstract class AbstractContext : Context {
12+
override fun makeCurrent(): Scope = Scope.None
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
package aws.smithy.kotlin.runtime.telemetry.context
6+
7+
/**
8+
* An abstract implementation of a context manager. By default, this class uses no-op implementations for all members
9+
* unless overridden in a subclass.
10+
*/
11+
public abstract class AbstractContextManager : ContextManager {
12+
override fun current(): Context = Context.None
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
package aws.smithy.kotlin.runtime.telemetry.context
6+
7+
/**
8+
* An abstract implementation of a scope. By default, this class uses no-op implementations for all members unless
9+
* overridden in a subclass.
10+
*/
11+
public abstract class AbstractScope : Scope {
12+
override fun close() { }
13+
}

runtime/observability/telemetry-api/common/src/aws/smithy/kotlin/runtime/telemetry/context/Context.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public interface Context {
1414
/**
1515
* A no-op [Context]
1616
*/
17-
public val None: Context = NoOpContext
17+
public val None: Context = object : AbstractContext() { }
1818
}
1919

2020
/**
@@ -25,11 +25,3 @@ public interface Context {
2525
*/
2626
public fun makeCurrent(): Scope
2727
}
28-
29-
private object NoOpContext : Context {
30-
override fun makeCurrent(): Scope = NoOpScope
31-
}
32-
33-
private object NoOpScope : Scope {
34-
override fun close() {}
35-
}

runtime/observability/telemetry-api/common/src/aws/smithy/kotlin/runtime/telemetry/context/ContextManager.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ package aws.smithy.kotlin.runtime.telemetry.context
1111
*/
1212
public interface ContextManager {
1313
public companion object {
14-
public val None: ContextManager = NoOpContextManager
14+
/**
15+
* A [ContextManager] that does nothing
16+
*/
17+
public val None: ContextManager = object : AbstractContextManager() { }
1518
}
1619

1720
/**
1821
* Return the current [Context]
1922
*/
2023
public fun current(): Context
2124
}
22-
23-
private object NoOpContextManager : ContextManager {
24-
override fun current(): Context = Context.None
25-
}

runtime/observability/telemetry-api/common/src/aws/smithy/kotlin/runtime/telemetry/context/Scope.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,11 @@ import aws.smithy.kotlin.runtime.io.Closeable
1010
/**
1111
* Delineates a logical scope that has a beginning and end (e.g. a function)
1212
*/
13-
public interface Scope : Closeable
13+
public interface Scope : Closeable {
14+
public companion object {
15+
/**
16+
* A [Scope] that does nothing
17+
*/
18+
public val None: Scope = object : AbstractScope() { }
19+
}
20+
}

0 commit comments

Comments
 (0)