diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-10-10 15:57:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-10 15:57:05 +0200 |
| commit | a832ea376e360f3029036a9570c244fb9080e91f (patch) | |
| tree | a54e3f9d3a44a0248ef1b17430eed9b5d47ff5de /opendc-experiments | |
| parent | 7ba3b953300c46b4e3afcde17cd3dd14b1af8406 (diff) | |
| parent | 4ebe2f28ba940aabdaa1f57653fbe86a91582ebd (diff) | |
merge: Add support for accounting of user simulation time (#108)
This pull request adds support for tracking and limiting the simulation time consumed per user.
These changes allow users to consume 60 minutes of shared compute resources for simulations
in OpenDC per month.
Closes #103
## Implementation Notes :hammer_and_pick:
* Limit exception mapper to WebApplicationException
* Add support for accounting simulation time
* Add API for querying user accounting data
* Show monthly simulation budget in UI
## External Dependencies :four_leaf_clover:
* N/A
## Breaking API Changes :warning:
* The web runner now also sends the runtime of the simulation job to the server, in order to
update the consumed simulation time in the database.
Diffstat (limited to 'opendc-experiments')
4 files changed, 13 insertions, 1 deletions
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 7e89eab1..ac058171 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 @@ -138,6 +138,10 @@ public class ComputeMetricReader( get() = _hostsDown private var _hostsDown = 0 + override val serversTotal: Int + get() = _serversTotal + private var _serversTotal = 0 + override val serversPending: Int get() = _serversPending private var _serversPending = 0 @@ -167,6 +171,7 @@ public class ComputeMetricReader( val stats = service.getSchedulerStats() _hostsUp = stats.hostsAvailable _hostsDown = stats.hostsUnavailable + _serversTotal = stats.serversTotal _serversPending = stats.serversPending _serversActive = stats.serversActive _attemptsSuccess = stats.attemptsSuccess.toInt() diff --git a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceData.kt b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceData.kt index 394c6bd6..5b6960a3 100644 --- a/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceData.kt +++ b/opendc-experiments/opendc-experiments-compute/src/main/kotlin/org/opendc/experiments/compute/telemetry/table/ServiceData.kt @@ -31,6 +31,7 @@ public data class ServiceData( val timestamp: Instant, val hostsUp: Int, val hostsDown: Int, + val serversTotal: Int, val serversPending: Int, val serversActive: Int, val attemptsSuccess: Int, @@ -42,5 +43,5 @@ public data class ServiceData( * Convert a [ServiceTableReader] into a persistent object. */ public fun ServiceTableReader.toServiceData(): ServiceData { - return ServiceData(timestamp, hostsUp, hostsDown, serversPending, serversActive, attemptsSuccess, attemptsFailure, attemptsError) + return ServiceData(timestamp, hostsUp, hostsDown, serversTotal, serversPending, serversActive, attemptsSuccess, attemptsFailure, attemptsError) } 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 0155a879..bb926298 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 @@ -44,6 +44,11 @@ public interface ServiceTableReader { public val hostsDown: Int /** + * The number of servers that are registered with the compute service.. + */ + public val serversTotal: Int + + /** * The number of servers that are pending to be scheduled. */ public val serversPending: Int diff --git a/opendc-experiments/opendc-experiments-compute/src/test/kotlin/org/opendc/experiments/compute/export/parquet/ServiceDataWriterTest.kt b/opendc-experiments/opendc-experiments-compute/src/test/kotlin/org/opendc/experiments/compute/export/parquet/ServiceDataWriterTest.kt index 20301185..978cc9d4 100644 --- a/opendc-experiments/opendc-experiments-compute/src/test/kotlin/org/opendc/experiments/compute/export/parquet/ServiceDataWriterTest.kt +++ b/opendc-experiments/opendc-experiments-compute/src/test/kotlin/org/opendc/experiments/compute/export/parquet/ServiceDataWriterTest.kt @@ -56,6 +56,7 @@ class ServiceDataWriterTest { override val timestamp: Instant = Instant.now() override val hostsUp: Int = 1 override val hostsDown: Int = 0 + override val serversTotal: Int = 1 override val serversPending: Int = 1 override val serversActive: Int = 1 override val attemptsSuccess: Int = 1 |
