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-compute/opendc-compute-simulator | |
| 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-compute/opendc-compute-simulator')
3 files changed, 67 insertions, 65 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimHost.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimHost.kt index 908a58e9..95921e8b 100644 --- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimHost.kt +++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimHost.kt @@ -150,15 +150,15 @@ public class SimHost( meter.gaugeBuilder("system.cpu.demand") .setDescription("Amount of CPU resources the guests would use if there were no CPU contention or CPU limits") .setUnit("MHz") - .buildWithCallback { result -> result.observe(hypervisor.cpuDemand) } + .buildWithCallback { result -> result.record(hypervisor.cpuDemand) } meter.gaugeBuilder("system.cpu.usage") .setDescription("Amount of CPU resources used by the host") .setUnit("MHz") - .buildWithCallback { result -> result.observe(hypervisor.cpuUsage) } + .buildWithCallback { result -> result.record(hypervisor.cpuUsage) } meter.gaugeBuilder("system.cpu.utilization") .setDescription("Utilization of the CPU resources of the host") .setUnit("%") - .buildWithCallback { result -> result.observe(hypervisor.cpuUsage / _cpuLimit) } + .buildWithCallback { result -> result.record(hypervisor.cpuUsage / _cpuLimit) } meter.counterBuilder("system.cpu.time") .setDescription("Amount of CPU time spent by the host") .setUnit("s") @@ -166,12 +166,12 @@ public class SimHost( meter.gaugeBuilder("system.power.usage") .setDescription("Power usage of the host ") .setUnit("W") - .buildWithCallback { result -> result.observe(machine.powerUsage) } + .buildWithCallback { result -> result.record(machine.powerUsage) } meter.counterBuilder("system.power.total") .setDescription("Amount of energy used by the CPU") .setUnit("J") .ofDoubles() - .buildWithCallback { result -> result.observe(machine.energyUsage) } + .buildWithCallback { result -> result.record(machine.energyUsage) } meter.counterBuilder("system.time") .setDescription("The uptime of the host") .setUnit("s") @@ -382,10 +382,10 @@ public class SimHost( } } - result.observe(terminated, terminatedState) - result.observe(running, runningState) - result.observe(error, errorState) - result.observe(invalid, invalidState) + result.record(terminated, terminatedState) + result.record(running, runningState) + result.record(error, errorState) + result.record(invalid, invalidState) } private val _cpuLimit = machine.model.cpus.sumOf { it.frequency } @@ -394,7 +394,7 @@ public class SimHost( * Helper function to collect the CPU limits of a machine. */ private fun collectCpuLimit(result: ObservableDoubleMeasurement) { - result.observe(_cpuLimit) + result.record(_cpuLimit) val guests = _guests for (i in guests.indices) { @@ -413,10 +413,10 @@ public class SimHost( private fun collectCpuTime(result: ObservableLongMeasurement) { val counters = hypervisor.counters - result.observe(counters.cpuActiveTime / 1000L, _activeState) - result.observe(counters.cpuIdleTime / 1000L, _idleState) - result.observe(counters.cpuStealTime / 1000L, _stealState) - result.observe(counters.cpuLostTime / 1000L, _lostState) + result.record(counters.cpuActiveTime / 1000L, _activeState) + result.record(counters.cpuIdleTime / 1000L, _idleState) + result.record(counters.cpuStealTime / 1000L, _stealState) + result.record(counters.cpuLostTime / 1000L, _lostState) val guests = _guests for (i in guests.indices) { @@ -458,8 +458,8 @@ public class SimHost( private fun collectUptime(result: ObservableLongMeasurement) { updateUptime() - result.observe(_uptime, _upState) - result.observe(_downtime, _downState) + result.record(_uptime, _upState) + result.record(_downtime, _downState) val guests = _guests for (i in guests.indices) { @@ -474,7 +474,7 @@ public class SimHost( */ private fun collectBootTime(result: ObservableLongMeasurement) { if (_bootTime != Long.MIN_VALUE) { - result.observe(_bootTime) + result.record(_bootTime) } val guests = _guests diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/internal/Guest.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/internal/Guest.kt index 9f3122db..f49c2824 100644 --- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/internal/Guest.kt +++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/internal/Guest.kt @@ -239,8 +239,8 @@ internal class Guest( * Helper function to track the uptime of the guest. */ fun collectUptime(result: ObservableLongMeasurement) { - result.observe(_uptime, _upState) - result.observe(_downtime, _downState) + result.record(_uptime, _upState) + result.record(_downtime, _downState) } private var _bootTime = Long.MIN_VALUE @@ -250,7 +250,7 @@ internal class Guest( */ fun collectBootTime(result: ObservableLongMeasurement) { if (_bootTime != Long.MIN_VALUE) { - result.observe(_bootTime, attributes) + result.record(_bootTime, attributes) } } @@ -273,10 +273,10 @@ internal class Guest( fun collectCpuTime(result: ObservableLongMeasurement) { val counters = machine.counters - result.observe(counters.cpuActiveTime / 1000, _activeState) - result.observe(counters.cpuIdleTime / 1000, _idleState) - result.observe(counters.cpuStealTime / 1000, _stealState) - result.observe(counters.cpuLostTime / 1000, _lostState) + result.record(counters.cpuActiveTime / 1000, _activeState) + result.record(counters.cpuIdleTime / 1000, _idleState) + result.record(counters.cpuStealTime / 1000, _stealState) + result.record(counters.cpuLostTime / 1000, _lostState) } private val _cpuLimit = machine.model.cpus.sumOf { it.frequency } @@ -285,7 +285,7 @@ internal class Guest( * Helper function to collect the CPU limits of a machine. */ fun collectCpuLimit(result: ObservableDoubleMeasurement) { - result.observe(_cpuLimit, attributes) + result.record(_cpuLimit, attributes) } /** diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt index 799a8cf0..dd13b60c 100644 --- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt +++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt @@ -22,9 +22,7 @@ package org.opendc.compute.simulator -import io.opentelemetry.api.metrics.MeterProvider import io.opentelemetry.sdk.metrics.SdkMeterProvider -import io.opentelemetry.sdk.metrics.export.MetricProducer import io.opentelemetry.sdk.resources.Resource import kotlinx.coroutines.* import org.junit.jupiter.api.Assertions.assertEquals @@ -83,10 +81,26 @@ internal class SimHostTest { val hostResource = Resource.builder() .put(HOST_ID, hostId.toString()) .build() - val meterProvider: MeterProvider = SdkMeterProvider + + // Setup metric reader + val duration = 5 * 60L + val reader = CoroutineMetricReader( + this, + object : ComputeMetricExporter() { + override fun record(reader: HostTableReader) { + activeTime += reader.cpuActiveTime + idleTime += reader.cpuIdleTime + stealTime += reader.cpuStealTime + } + }, + exportInterval = Duration.ofSeconds(duration) + ) + + val meterProvider = SdkMeterProvider .builder() .setResource(hostResource) .setClock(clock.toOtelClock()) + .registerMetricReader(reader) .build() val engine = FlowEngine(coroutineContext, clock) @@ -100,7 +114,6 @@ internal class SimHostTest { meterProvider, SimFairShareHypervisorProvider() ) - val duration = 5 * 60L val vmImageA = MockImage( UUID.randomUUID(), "<unnamed>", @@ -136,19 +149,6 @@ internal class SimHostTest { val flavor = MockFlavor(2, 0) - // Setup metric reader - val reader = CoroutineMetricReader( - this, listOf(meterProvider as MetricProducer), - object : ComputeMetricExporter() { - override fun record(reader: HostTableReader) { - activeTime += reader.cpuActiveTime - idleTime += reader.cpuIdleTime - stealTime += reader.cpuStealTime - } - }, - exportInterval = Duration.ofSeconds(duration) - ) - coroutineScope { launch { virtDriver.spawn(MockServer(UUID.randomUUID(), "a", flavor, vmImageA)) } launch { virtDriver.spawn(MockServer(UUID.randomUUID(), "b", flavor, vmImageB)) } @@ -169,7 +169,7 @@ internal class SimHostTest { // Ensure last cycle is collected delay(1000L * duration) virtDriver.close() - reader.close() + meterProvider.close() assertAll( { assertEquals(658, activeTime, "Active time does not match") }, @@ -195,10 +195,32 @@ internal class SimHostTest { val hostResource = Resource.builder() .put(HOST_ID, hostId.toString()) .build() - val meterProvider: MeterProvider = SdkMeterProvider + + // Setup metric reader + val duration = 5 * 60L + val reader = CoroutineMetricReader( + this, + object : ComputeMetricExporter() { + override fun record(reader: HostTableReader) { + activeTime += reader.cpuActiveTime + idleTime += reader.cpuIdleTime + uptime += reader.uptime + downtime += reader.downtime + } + + override fun record(reader: ServerTableReader) { + guestUptime += reader.uptime + guestDowntime += reader.downtime + } + }, + exportInterval = Duration.ofSeconds(duration) + ) + + val meterProvider = SdkMeterProvider .builder() .setResource(hostResource) .setClock(clock.toOtelClock()) + .registerMetricReader(reader) .build() val engine = FlowEngine(coroutineContext, clock) @@ -212,7 +234,6 @@ internal class SimHostTest { meterProvider, SimFairShareHypervisorProvider() ) - val duration = 5 * 60L val image = MockImage( UUID.randomUUID(), "<unnamed>", @@ -232,25 +253,6 @@ internal class SimHostTest { val flavor = MockFlavor(2, 0) val server = MockServer(UUID.randomUUID(), "a", flavor, image) - // Setup metric reader - val reader = CoroutineMetricReader( - this, listOf(meterProvider as MetricProducer), - object : ComputeMetricExporter() { - override fun record(reader: HostTableReader) { - activeTime += reader.cpuActiveTime - idleTime += reader.cpuIdleTime - uptime += reader.uptime - downtime += reader.downtime - } - - override fun record(reader: ServerTableReader) { - guestUptime += reader.uptime - guestDowntime += reader.downtime - } - }, - exportInterval = Duration.ofSeconds(duration) - ) - coroutineScope { host.spawn(server) delay(5000L) @@ -273,7 +275,7 @@ internal class SimHostTest { // Ensure last cycle is collected delay(1000L * duration) - reader.close() + meterProvider.close() assertAll( { assertEquals(1175, idleTime, "Idle time does not match") }, |
