summaryrefslogtreecommitdiff
path: root/simulator/opendc-compute/opendc-compute-simulator/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-01-03 20:34:29 +0100
committerGitHub <noreply@github.com>2021-01-03 20:34:29 +0100
commit74a4bff83bfb6366cc193d1fc9c4a07e49649649 (patch)
treee5ce165378b1d70fa4a9b348acbde707e1e1aaea /simulator/opendc-compute/opendc-compute-simulator/src
parent1e1a0fe43d46e9bd578978f85fe3c6b4b1b39577 (diff)
parentc3a0a1711360c866a38b273dcf681f3aab9ae0ae (diff)
Merge pull request #68 from atlarge-research/feat/event-tracer
Add experimental event tracer
Diffstat (limited to 'simulator/opendc-compute/opendc-compute-simulator/src')
-rw-r--r--simulator/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimVirtProvisioningService.kt19
1 files changed, 18 insertions, 1 deletions
diff --git a/simulator/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimVirtProvisioningService.kt b/simulator/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimVirtProvisioningService.kt
index e83370d7..0144fd69 100644
--- a/simulator/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimVirtProvisioningService.kt
+++ b/simulator/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/SimVirtProvisioningService.kt
@@ -38,7 +38,9 @@ import org.opendc.compute.core.virt.driver.InsufficientMemoryOnServerException
import org.opendc.compute.core.virt.driver.VirtDriver
import org.opendc.compute.core.virt.service.VirtProvisioningEvent
import org.opendc.compute.core.virt.service.VirtProvisioningService
+import org.opendc.compute.core.virt.service.events.*
import org.opendc.compute.simulator.allocation.AllocationPolicy
+import org.opendc.trace.core.EventTracer
import org.opendc.utils.flow.EventFlow
import java.time.Clock
import java.util.*
@@ -51,7 +53,8 @@ public class SimVirtProvisioningService(
private val coroutineScope: CoroutineScope,
private val clock: Clock,
private val provisioningService: ProvisioningService,
- public val allocationPolicy: AllocationPolicy
+ public val allocationPolicy: AllocationPolicy,
+ private val tracer: EventTracer
) : VirtProvisioningService {
/**
* The logger instance to use.
@@ -136,6 +139,8 @@ public class SimVirtProvisioningService(
image: Image,
flavor: Flavor
): Server {
+ tracer.commit(VmSubmissionEvent(name, image, flavor))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,
@@ -191,6 +196,8 @@ public class SimVirtProvisioningService(
if (selectedHv == null) {
if (requiredMemory > maxMemory || imageInstance.flavor.cpuCount > maxCores) {
+ tracer.commit(VmSubmissionInvalidEvent(imageInstance.name))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,
@@ -231,6 +238,8 @@ public class SimVirtProvisioningService(
imageInstance.server = server
imageInstance.continuation.resume(server)
+ tracer.commit(VmScheduledEvent(imageInstance.name))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,
@@ -252,6 +261,8 @@ public class SimVirtProvisioningService(
if (event.server.state == ServerState.SHUTOFF) {
logger.info { "[${clock.millis()}] Server ${event.server.uid} ${event.server.name} ${event.server.flavor} finished." }
+ tracer.commit(VmStoppedEvent(event.server.name))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,
@@ -310,6 +321,8 @@ public class SimVirtProvisioningService(
hypervisors[server] = hv
}
+ tracer.commit(HypervisorAvailableEvent(server.uid))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,
@@ -333,6 +346,8 @@ public class SimVirtProvisioningService(
val hv = hypervisors[server] ?: return
availableHypervisors -= hv
+ tracer.commit(HypervisorUnavailableEvent(hv.uid))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,
@@ -359,6 +374,8 @@ public class SimVirtProvisioningService(
hv.driver = hypervisor
availableHypervisors += hv
+ tracer.commit(HypervisorAvailableEvent(hv.uid))
+
eventFlow.emit(
VirtProvisioningEvent.MetricsAvailable(
this@SimVirtProvisioningService,