diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-10-09 16:10:00 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-02-15 18:08:37 +0100 |
| commit | 02c215ad57e1e4d56c54d22be58e1845bdeebf25 (patch) | |
| tree | 7794b53ca3bb6fa197a118cee92114135be15def /opendc-telemetry/opendc-telemetry-sdk | |
| parent | 48c04fb74ee170f58f292b077c62b4da237f507e (diff) | |
refactor: Update OpenTelemetry to version 1.11
This change updates the OpenDC codebase to use OpenTelemetry v1.11,
which stabilizes the metrics API. This stabilization brings quite a few
breaking changes, so significant changes are necessary inside the OpenDC
codebase.
Diffstat (limited to 'opendc-telemetry/opendc-telemetry-sdk')
| -rw-r--r-- | opendc-telemetry/opendc-telemetry-sdk/src/main/kotlin/org/opendc/telemetry/sdk/metrics/export/CoroutineMetricReader.kt | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/opendc-telemetry/opendc-telemetry-sdk/src/main/kotlin/org/opendc/telemetry/sdk/metrics/export/CoroutineMetricReader.kt b/opendc-telemetry/opendc-telemetry-sdk/src/main/kotlin/org/opendc/telemetry/sdk/metrics/export/CoroutineMetricReader.kt index 1de235e7..a9290c47 100644 --- a/opendc-telemetry/opendc-telemetry-sdk/src/main/kotlin/org/opendc/telemetry/sdk/metrics/export/CoroutineMetricReader.kt +++ b/opendc-telemetry/opendc-telemetry-sdk/src/main/kotlin/org/opendc/telemetry/sdk/metrics/export/CoroutineMetricReader.kt @@ -22,11 +22,16 @@ package org.opendc.telemetry.sdk.metrics.export +import io.opentelemetry.sdk.common.CompletableResultCode +import io.opentelemetry.sdk.metrics.data.AggregationTemporality import io.opentelemetry.sdk.metrics.export.MetricExporter import io.opentelemetry.sdk.metrics.export.MetricProducer +import io.opentelemetry.sdk.metrics.export.MetricReader +import io.opentelemetry.sdk.metrics.export.MetricReaderFactory import kotlinx.coroutines.* import mu.KotlinLogging import java.time.Duration +import java.util.* /** * A helper class to read the metrics from a list of [MetricProducer]s and automatically export the metrics every @@ -35,16 +40,16 @@ import java.time.Duration * The reader runs in a [CoroutineScope] which enables collection of metrics in environments with a custom clock. * * @param scope The [CoroutineScope] to run the reader in. - * @param producers The metric producers to gather metrics from. + * @param producer The metric producer to gather metrics from. * @param exporter The export to export the metrics to. * @param exportInterval The export interval. */ -public class CoroutineMetricReader( +public class CoroutineMetricReader private constructor( scope: CoroutineScope, - private val producers: List<MetricProducer>, + private val producer: MetricProducer, private val exporter: MetricExporter, - private val exportInterval: Duration = Duration.ofMinutes(5) -) : AutoCloseable { + private val exportInterval: Duration +) : MetricReader { private val logger = KotlinLogging.logger {} /** @@ -57,9 +62,8 @@ public class CoroutineMetricReader( while (isActive) { delay(intervalMs) - val metrics = producers.flatMap(MetricProducer::collectAllMetrics) - try { + val metrics = producer.collectAllMetrics() val result = exporter.export(metrics) result.whenComplete { if (!result.isSuccess) { @@ -75,7 +79,29 @@ public class CoroutineMetricReader( } } - override fun close() { + override fun getPreferredTemporality(): AggregationTemporality = AggregationTemporality.CUMULATIVE + + override fun flush(): CompletableResultCode { + return exporter.flush() + } + + override fun shutdown(): CompletableResultCode { job.cancel() + return CompletableResultCode.ofSuccess() + } + + public companion object { + /** + * Construct a [MetricReaderFactory] for this metric reader. + */ + public operator fun invoke( + scope: CoroutineScope, + exporter: MetricExporter, + exportInterval: Duration = Duration.ofMinutes(5) + ): MetricReaderFactory { + return MetricReaderFactory { producer -> + CoroutineMetricReader(scope, producer, exporter, exportInterval) + } + } } } |
