summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2022-10-10 11:15:40 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2022-10-10 15:29:24 +0200
commit3624e37c847f6b4d45ad1abd6437c6e7cdb28dcd (patch)
treed89ec81af2c5ef8474fe95c1ac681d63435f7b2c
parent6c896a4a29147a863d797ac5bd5a210d4a9a78ef (diff)
fix(web/runner): Fix service metric reporting
This change resolves an issue in the web runner where the finished VMs would always be reported as zero.
-rw-r--r--opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/internal/WebComputeMonitor.kt33
-rw-r--r--opendc-web/opendc-web-ui/src/util/available-metrics.js26
2 files changed, 25 insertions, 34 deletions
diff --git a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/internal/WebComputeMonitor.kt b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/internal/WebComputeMonitor.kt
index 4db70d3d..d6722115 100644
--- a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/internal/WebComputeMonitor.kt
+++ b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/internal/WebComputeMonitor.kt
@@ -24,8 +24,9 @@ package org.opendc.web.runner.internal
import org.opendc.experiments.compute.telemetry.ComputeMonitor
import org.opendc.experiments.compute.telemetry.table.HostTableReader
+import org.opendc.experiments.compute.telemetry.table.ServiceData
import org.opendc.experiments.compute.telemetry.table.ServiceTableReader
-import kotlin.math.max
+import org.opendc.experiments.compute.telemetry.table.toServiceData
import kotlin.math.roundToLong
/**
@@ -76,30 +77,20 @@ internal class WebComputeMonitor : ComputeMonitor {
val count: Long
)
- private var serviceMetrics: AggregateServiceMetrics = AggregateServiceMetrics()
+ private lateinit var serviceData: ServiceData
override fun record(reader: ServiceTableReader) {
- serviceMetrics = AggregateServiceMetrics(
- max(reader.attemptsSuccess, serviceMetrics.vmTotalCount),
- max(reader.serversPending, serviceMetrics.vmWaitingCount),
- max(reader.serversActive, serviceMetrics.vmActiveCount),
- max(0, serviceMetrics.vmInactiveCount),
- max(reader.attemptsFailure, serviceMetrics.vmFailedCount)
- )
+ serviceData = reader.toServiceData()
}
- private data class AggregateServiceMetrics(
- val vmTotalCount: Int = 0,
- val vmWaitingCount: Int = 0,
- val vmActiveCount: Int = 0,
- val vmInactiveCount: Int = 0,
- val vmFailedCount: Int = 0
- )
-
/**
* Collect the results of the simulation.
*/
fun collectResults(): Results {
+ val hostAggregateMetrics = hostAggregateMetrics
+ val hostMetrics = hostMetrics
+ val serviceData = serviceData
+
return Results(
hostAggregateMetrics.totalActiveTime,
hostAggregateMetrics.totalIdleTime,
@@ -112,10 +103,10 @@ internal class WebComputeMonitor : ComputeMonitor {
hostAggregateMetrics.totalPowerDraw,
hostAggregateMetrics.totalFailureSlices.roundToLong(),
hostAggregateMetrics.totalFailureVmSlices.roundToLong(),
- serviceMetrics.vmTotalCount,
- serviceMetrics.vmWaitingCount,
- serviceMetrics.vmInactiveCount,
- serviceMetrics.vmFailedCount
+ serviceData.serversTotal,
+ serviceData.serversPending,
+ serviceData.serversTotal - serviceData.serversPending - serviceData.serversActive,
+ serviceData.attemptsError + serviceData.attemptsFailure
)
}
diff --git a/opendc-web/opendc-web-ui/src/util/available-metrics.js b/opendc-web/opendc-web-ui/src/util/available-metrics.js
index b21ab150..e6bb902f 100644
--- a/opendc-web/opendc-web-ui/src/util/available-metrics.js
+++ b/opendc-web/opendc-web-ui/src/util/available-metrics.js
@@ -42,10 +42,10 @@ export const METRIC_NAMES_SHORT = {
mean_num_deployed_images: 'Mean Num. Deployed Images Per Host',
max_num_deployed_images: 'Max. Num. Deployed Images Per Host',
total_failure_vm_slices: 'Total Num. Failed VM Slices',
- total_vms_submitted: 'Total Num. VMs Submitted',
- total_vms_queued: 'Max. Num. VMs Queued',
- total_vms_finished: 'Max. Num. VMs Finished',
- total_vms_failed: 'Max. Num. VMs Failed',
+ total_vms_submitted: 'VMs Submitted',
+ total_vms_queued: 'VMs Queued',
+ total_vms_finished: 'VMs Finished',
+ total_vms_failed: 'VMs Failed',
}
export const METRIC_NAMES = {
@@ -58,11 +58,11 @@ export const METRIC_NAMES = {
mean_cpu_demand: 'Mean Host CPU Demand',
mean_num_deployed_images: 'Mean Number of Deployed Images Per Host',
max_num_deployed_images: 'Maximum Number Deployed Images Per Host',
- total_failure_vm_slices: 'Total Number Failed VM Slices',
- total_vms_submitted: 'Total Number VMs Submitted',
- total_vms_queued: 'Maximum Number VMs Queued',
- total_vms_finished: 'Maximum Number VMs Finished',
- total_vms_failed: 'Maximum Number VMs Failed',
+ total_failure_vm_slices: 'Failed VM Slices',
+ total_vms_submitted: 'VMs Submitted',
+ total_vms_queued: 'VMs Queued',
+ total_vms_finished: 'VMs Finished',
+ total_vms_failed: 'VMs Failed',
}
export const METRIC_UNITS = {
@@ -94,9 +94,9 @@ export const METRIC_DESCRIPTIONS = {
mean_num_deployed_images: 'The average number of virtual machines deployed on a host.',
max_num_deployed_images: 'The maximum number of virtual machines deployed at any time.',
total_failure_vm_slices: 'The total amount of CPU clock cycles lost due to failure.',
- total_vms_submitted: 'The total number of virtual machines scheduled by the compute service.',
+ total_vms_submitted: 'The number of virtual machines scheduled by the compute service.',
total_vms_queued:
- 'The maximum number of virtual machines waiting to be scheduled by the compute service at any point.',
- total_vms_finished: 'The total number of virtual machines that completed successfully.',
- total_vms_failed: 'The total number of virtual machines that failed during execution.',
+ 'The number of virtual machines still waiting to be scheduled by the compute service.',
+ total_vms_finished: 'The number of virtual machines that completed.',
+ total_vms_failed: 'The number of virtual machines that could not be scheduled.',
}