From 1513efe07605975cd2f86f0b739bd490e4fc9970 Mon Sep 17 00:00:00 2001 From: Dante Niewenhuis Date: Wed, 15 Nov 2023 15:27:18 +0100 Subject: fixed a problem with the Loggers by copying the data --- .../org/opendc/experiments/compute/ComputeSteps.kt | 2 +- .../compute/telemetry/ComputeMetricReader.kt | 39 +++++++++++++++++----- .../compute/telemetry/table/ServiceTableReader.kt | 5 +++ 3 files changed, 36 insertions(+), 10 deletions(-) (limited to 'opendc-experiments/opendc-experiments-compute/src/main') diff --git a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/ComputeSteps.kt b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/ComputeSteps.kt index c79d9b37..690156e2 100644 --- a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/ComputeSteps.kt +++ b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/ComputeSteps.kt @@ -59,7 +59,7 @@ public fun setupComputeService( public fun registerComputeMonitor( serviceDomain: String, monitor: ComputeMonitor, - exportInterval: Duration = Duration.ofMinutes(1) + exportInterval: Duration = Duration.ofMinutes(5) ): ProvisioningStep { return ComputeMonitorProvisioningStep(serviceDomain, monitor, exportInterval) } diff --git a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/ComputeMetricReader.kt b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/ComputeMetricReader.kt index ff3bfb8e..e8cd3a55 100644 --- a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/ComputeMetricReader.kt +++ b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/ComputeMetricReader.kt @@ -87,7 +87,7 @@ public class ComputeMetricReader( } } finally { - loggState() +// loggState() if (monitor is AutoCloseable) { monitor.close() @@ -109,12 +109,12 @@ public class ComputeMetricReader( for (server in this.service.servers) { val reader = this.serverTableReaders.computeIfAbsent(server) { ServerTableReaderImpl(service, it) } reader.record(now) - this.monitor.record(reader) + this.monitor.record(reader.copy()) reader.reset() } this.serviceTableReader.record(now) - monitor.record(this.serviceTableReader) + monitor.record(this.serviceTableReader.copy()) } catch (cause: Throwable) { this.logger.warn(cause) { "Exporter threw an Exception" } } @@ -128,6 +128,27 @@ public class ComputeMetricReader( * An aggregator for service metrics before they are reported. */ private class ServiceTableReaderImpl(private val service: ComputeService) : ServiceTableReader { + + override fun copy(): ServiceTableReader { + val newServiceTable = ServiceTableReaderImpl(service) + newServiceTable.setValues(this) + + return newServiceTable + } + + override fun setValues(table: ServiceTableReader) { + _timestamp = table.timestamp + + _hostsUp = table.hostsUp + _hostsDown = table.hostsDown + _serversTotal = table.serversTotal + _serversPending = table.serversPending + _serversActive = table.serversActive + _attemptsSuccess = table.attemptsSuccess + _attemptsFailure = table.attemptsFailure + _attemptsError = table.attemptsError + } + private var _timestamp: Instant = Instant.MIN override val timestamp: Instant get() = _timestamp @@ -363,18 +384,18 @@ public class ComputeMetricReader( } override fun setValues(table: ServerTableReader) { + host = table.host + _timestamp = table.timestamp - _uptime = table.uptime - _downtime = table.downtime - _provisionTime = table.provisionTime - _bootTime = table.bootTime _cpuLimit = table.cpuLimit _cpuActiveTime = table.cpuActiveTime _cpuIdleTime = table.cpuIdleTime _cpuStealTime = table.cpuStealTime _cpuLostTime = table.cpuLostTime - - host = table.host + _uptime = table.uptime + _downtime = table.downtime + _provisionTime = table.provisionTime + _bootTime = table.bootTime } private val _server = server diff --git a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceTableReader.kt b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceTableReader.kt index bb926298..a077a476 100644 --- a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceTableReader.kt +++ b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceTableReader.kt @@ -28,6 +28,11 @@ import java.time.Instant * An interface that is used to read a row of a service trace entry. */ public interface ServiceTableReader { + + public fun copy(): ServiceTableReader + + public fun setValues(table: ServiceTableReader) + /** * The timestamp of the current entry of the reader. */ -- cgit v1.2.3