summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-proto/src
diff options
context:
space:
mode:
authorvincent van beek <vincent@vlogic.nl>2026-03-26 14:02:54 +0100
committerGitHub <noreply@github.com>2026-03-26 13:02:54 +0000
commit0ffde21b0337c606e2d0ece5bd5434a930a87dcd (patch)
tree4fd071728a8da6dcf3e6fc9fe9dca5a492100d34 /opendc-web/opendc-web-proto/src
parent8bb98c773bc982a0dab9cf9fb20d62f60a36a5d7 (diff)
Use Quarkus Quinoa for serving web UI (#391)
* refactor(web): Migrate to Quarkus 3 This commit updates the OpenDC web server to use Quarkus 3, which changes annotations to use the Jakarta namespace for annotations. * refactor(web): Configure runtime variables for web UI This commit updates the web UI to propagate runtime variables via the next-runtime-env package. Before, we would need to replace the variables in the generated sources by Next.js, next-runtime-env works by loading a JavaScript file when opening the OpenDC web UI which contains the configuration of the web app. * refactor(web): Migrate to Quarkus Quinoa This commit updates the OpenDC web server to make use of Quarkus Quinoa for serving the web UI. This allows us to deprecate the complex Quarkus extension for serving the web UI. * refactor(web): Move web UI into Quarkus web app This commit moves the web UI into the Quarkus web server module to ensure we follow Quarkus Quinoa's conventions. * refactor(web): Merge Quarkus extension into single module This commit merges the existing Quarkus extensions into a single module to prevent build complexity. * refactor(web): Migrate web proto to Java This commit migrates the web protocol to Java and removes the dependency on Jandex Gradle. * refactor(web): Migrate to Quarkus 3 This commit updates the OpenDC web server to use Quarkus 3, which changes annotations to use the Jakarta namespace for annotations. * enable DB schema migration on DEV server * webui is not needed anymore * remove MAINTAINERS is depricated * fix quarkus.quinoa properties * revert properties change, install npm in docker image to allow building the frontend * pin postgres version, this is a best practice. Fix some properties the old ones are depricated. Added properties for local testing * fix build error * :opendc-web:opendc-web-proto:spotlessApply * fix database schema --------- Co-authored-by: Fabian Mastenbroek <mail.fabianm@gmail.com>
Diffstat (limited to 'opendc-web/opendc-web-proto/src')
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/JobState.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/JobState.kt)8
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/OperationalPhenomena.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/OperationalPhenomena.kt)9
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/ProtocolError.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/ProtocolError.kt)6
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Targets.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Targets.kt)13
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Trace.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Trace.kt)10
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Workload.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Workload.kt)21
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Job.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Job.kt)36
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/JobService.java60
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Portfolio.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Portfolio.kt)18
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Scenario.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Scenario.kt)31
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Topology.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Topology.kt)20
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Machine.java38
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/MemoryUnit.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/MemoryUnit.kt)12
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/ProcessingUnit.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/ProcessingUnit.kt)13
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Rack.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Rack.kt)14
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Room.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Room.kt)13
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/RoomTile.java28
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Job.java34
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Portfolio.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Portfolio.kt)34
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Project.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Project.kt)22
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/ProjectRole.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/ProjectRole.kt)6
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Scenario.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Scenario.kt)71
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Topology.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Topology.kt)40
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/User.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/User.kt)9
-rw-r--r--opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/UserAccounting.java (renamed from opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/UserAccounting.kt)12
-rw-r--r--opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/RoomTile.kt34
-rw-r--r--opendc-web/opendc-web-proto/src/main/resources/META-INF/beans.xml0
27 files changed, 324 insertions, 288 deletions
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/JobState.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/JobState.java
index a8e67ec5..14a0faba 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/JobState.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/JobState.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,12 +20,12 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto;
/**
* State of a scenario for the simulator runner.
*/
-public enum class JobState {
+public enum JobState {
/**
* The job is pending to be claimed by a runner.
*/
@@ -49,5 +49,5 @@ public enum class JobState {
/**
* The job has failed.
*/
- FAILED,
+ FAILED
}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/OperationalPhenomena.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/OperationalPhenomena.java
index 28006d27..cf492e38 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/OperationalPhenomena.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/OperationalPhenomena.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,12 +20,9 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto;
/**
* Object describing the enabled operational phenomena for a scenario.
*/
-public data class OperationalPhenomena(
- val failures: Boolean,
- val interference: Boolean,
-)
+public record OperationalPhenomena(boolean failures, boolean interference) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/ProtocolError.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/ProtocolError.java
index e7fe2702..cb9324ea 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/ProtocolError.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/ProtocolError.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,9 +20,9 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto;
/**
* Container for reporting errors.
*/
-public data class ProtocolError(val code: Int, val message: String)
+public record ProtocolError(int code, String message) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Targets.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Targets.java
index 25516ff0..4823bb66 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Targets.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Targets.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,9 +20,10 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto;
-import jakarta.validation.constraints.Min
+import jakarta.validation.constraints.Min;
+import java.util.Set;
/**
* The targets of a portfolio.
@@ -30,8 +31,4 @@ import jakarta.validation.constraints.Min
* @param metrics The selected metrics to track during simulation.
* @param repeats The number of repetitions per scenario.
*/
-public data class Targets(
- val metrics: Set<String>,
- @field:Min(1)
- val repeats: Int = 1,
-)
+public record Targets(Set<String> metrics, @Min(1) int repeats) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Trace.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Trace.java
index 2952a273..adf916d3 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Trace.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Trace.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,7 +20,7 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto;
/**
* A workload trace available for simulation.
@@ -29,8 +29,4 @@ package org.opendc.web.proto
* @param name The name of the trace.
* @param type The type of trace.
*/
-public data class Trace(
- val id: String,
- val name: String,
- val type: String,
-)
+public record Trace(String id, String name, String type) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Workload.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Workload.java
index 58daf817..e8f552d6 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Workload.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/Workload.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,25 +20,24 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto;
-import jakarta.validation.constraints.DecimalMax
-import jakarta.validation.constraints.DecimalMin
+import jakarta.validation.constraints.DecimalMax;
+import jakarta.validation.constraints.DecimalMin;
/**
* The workload to simulate for a scenario.
*/
-public data class Workload(val trace: Trace, val samplingFraction: Double) {
+public record Workload(Trace trace, double samplingFraction) {
/**
* Specification for a workload.
*
* @param trace The unique identifier of the trace.
* @param samplingFraction The fraction of the workload to sample.
*/
- public data class Spec(
- val trace: String,
- @DecimalMin(value = "0.001", message = "Sampling fraction must be non-zero")
- @DecimalMax(value = "1", message = "Sampling fraction cannot exceed one")
- val samplingFraction: Double,
- )
+ public record Spec(
+ String trace,
+ @DecimalMin(value = "0.001", message = "Sampling fraction must be non-zero")
+ @DecimalMax(value = "1", message = "Sampling fraction cannot exceed one")
+ double samplingFraction) {}
}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Job.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Job.java
index 34642436..587fe451 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Job.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Job.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,32 +20,32 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.runner
+package org.opendc.web.proto.runner;
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.JobState
-import java.time.Instant
+import java.time.Instant;
+import java.util.Map;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.JobState;
/**
* A simulation job to be simulated by a runner.
*/
@Schema(name = "Runner.Job")
-public data class Job(
- val id: Long,
- val scenario: Scenario,
- val state: JobState,
- val createdAt: Instant,
- val updatedAt: Instant,
- val runtime: Int,
- val results: Map<String, Any>? = null,
-) {
+public record Job(
+ long id,
+ Scenario scenario,
+ JobState state,
+ Instant createdAt,
+ Instant updatedAt,
+ int runtime,
+ Map<String, ?> results) {
/**
* A request to update the state of a job.
*
- * @property state The next state of the job.
- * @property runtime The runtime of the job (in seconds).
- * @property results The results of the job.
+ * @param state The next state of the job.
+ * @param runtime The runtime of the job (in seconds).
+ * @param results The results of the job.
*/
@Schema(name = "Runner.Job.Update")
- public data class Update(val state: JobState, val runtime: Int, val results: Map<String, Any>? = null)
+ public record Update(JobState state, int runtime, Map<String, ?> results) {}
}
diff --git a/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/JobService.java b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/JobService.java
new file mode 100644
index 00000000..33b520a0
--- /dev/null
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/JobService.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2023 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package org.opendc.web.proto.runner;
+
+import jakarta.validation.Valid;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import java.util.List;
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+/**
+ * Service for interacting with the OpenDC job server.
+ */
+@Path("/jobs")
+@RegisterRestClient
+public interface JobService {
+ /**
+ * Obtain all pending simulation jobs.
+ */
+ @GET
+ List<Job> queryPending();
+
+ /**
+ * Get a job by identifier.
+ */
+ @GET
+ @Path("{job}")
+ Job get(@PathParam("job") long id);
+
+ /**
+ * Atomically update the state of a job.
+ */
+ @POST
+ @Path("{job}")
+ @Consumes("application/json")
+ Job update(@PathParam("job") long id, @Valid Job.Update update);
+}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Portfolio.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Portfolio.java
index 916d8cf0..44f0b500 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Portfolio.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Portfolio.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,14 +20,13 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.runner
+package org.opendc.web.proto.runner;
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.Targets
-import org.opendc.web.proto.user.Portfolio
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.Targets;
/**
- * A [Portfolio] as seen from the runner's perspective.
+ * A {@link Portfolio} as seen from the runner's perspective.
*
* @param id The unique identifier of the portfolio.
* @param number The number of the portfolio for the project.
@@ -35,9 +34,4 @@ import org.opendc.web.proto.user.Portfolio
* @param targets The targets of the portfolio.
*/
@Schema(name = "Runner.Portfolio")
-public data class Portfolio(
- val id: Long,
- val number: Int,
- val name: String,
- val targets: Targets,
-)
+public record Portfolio(long id, int number, String name, Targets targets) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Scenario.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Scenario.java
index ebc10bb0..8005ac3b 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Scenario.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Scenario.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,23 +20,22 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.runner
+package org.opendc.web.proto.runner;
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.OperationalPhenomena
-import org.opendc.web.proto.Workload
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.OperationalPhenomena;
+import org.opendc.web.proto.Workload;
/**
- * A [Scenario] that is exposed to an OpenDC runner.
+ * A {@link Scenario} that is exposed to an OpenDC runner.
*/
@Schema(name = "Runner.Scenario")
-public data class Scenario(
- val id: Long,
- val number: Int,
- val portfolio: Portfolio,
- val name: String,
- val workload: Workload,
- val topology: Topology,
- val phenomena: OperationalPhenomena,
- val schedulerName: String,
-)
+public record Scenario(
+ long id,
+ int number,
+ Portfolio portfolio,
+ String name,
+ Workload workload,
+ Topology topology,
+ OperationalPhenomena phenomena,
+ String schedulerName) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Topology.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Topology.java
index 4bffdee9..fdabd12d 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/runner/Topology.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/runner/Topology.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,21 +20,15 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.runner
+package org.opendc.web.proto.runner;
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.Room
-import java.time.Instant
+import java.time.Instant;
+import java.util.List;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.topology.Room;
/**
* A [Topology] that is exposed to an OpenDC runner.
*/
@Schema(name = "Runner.Topology")
-public data class Topology(
- val id: Long,
- val number: Int,
- val name: String,
- val rooms: List<Room>,
- val createdAt: Instant,
- val updatedAt: Instant,
-)
+public record Topology(long id, int number, String name, List<Room> rooms, Instant createdAt, Instant updatedAt) {}
diff --git a/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Machine.java b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Machine.java
new file mode 100644
index 00000000..ec78f249
--- /dev/null
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Machine.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package org.opendc.web.proto.topology;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+
+/**
+ * A machine in a rack.
+ */
+public record Machine(
+ String id,
+ int position,
+ List<ProcessingUnit> cpus,
+ List<ProcessingUnit> gpus,
+ @JsonProperty("memories") List<MemoryUnit> memory,
+ @JsonProperty("storages") List<MemoryUnit> storage,
+ String rackId) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/MemoryUnit.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/MemoryUnit.java
index 00560ad6..a53b584a 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/MemoryUnit.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/MemoryUnit.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,15 +20,9 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto.topology;
/**
* A memory unit in a system.
*/
-public data class MemoryUnit(
- val id: String,
- val name: String,
- val speedMbPerS: Double,
- val sizeMb: Double,
- val energyConsumptionW: Double,
-)
+public record MemoryUnit(String id, String name, double speedMbPerS, double sizeMb, double energyConsumptionW) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/ProcessingUnit.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/ProcessingUnit.java
index 86f40516..baa61aac 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/ProcessingUnit.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/ProcessingUnit.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,15 +20,10 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto.topology;
/**
* A CPU model.
*/
-public data class ProcessingUnit(
- val id: String,
- val name: String,
- val clockRateMhz: Double,
- val numberOfCores: Int,
- val energyConsumptionW: Double,
-)
+public record ProcessingUnit(
+ String id, String name, double clockRateMhz, int numberOfCores, double energyConsumptionW) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Rack.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Rack.java
index c997e814..b68fddd3 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Rack.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Rack.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,15 +20,11 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto.topology;
+
+import java.util.List;
/**
* A rack in a datacenter.
*/
-public data class Rack(
- val id: String,
- val name: String,
- val capacity: Int,
- val powerCapacityW: Double,
- val machines: List<Machine>,
-)
+public record Rack(String id, String name, int capacity, double powerCapacityW, List<Machine> machines) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Room.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Room.java
index 5b305168..530d21f5 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/Room.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/Room.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,14 +20,11 @@
* SOFTWARE.
*/
-package org.opendc.web.proto
+package org.opendc.web.proto.topology;
+
+import java.util.Set;
/**
* A room in a datacenter.
*/
-public data class Room(
- val id: String,
- val name: String,
- val tiles: Set<RoomTile>,
- val topologyId: String? = null,
-)
+public record Room(String id, String name, Set<RoomTile> tiles, String topologyId) {}
diff --git a/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/RoomTile.java b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/RoomTile.java
new file mode 100644
index 00000000..a7240541
--- /dev/null
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/topology/RoomTile.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2023 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package org.opendc.web.proto.topology;
+
+/**
+ * A location in a room.
+ */
+public record RoomTile(String id, double positionX, double positionY, Rack rack, String roomId) {}
diff --git a/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Job.java b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Job.java
new file mode 100644
index 00000000..480efdad
--- /dev/null
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Job.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package org.opendc.web.proto.user;
+
+import java.time.Instant;
+import java.util.Map;
+import org.opendc.web.proto.JobState;
+
+/**
+ * A simulation job that is associated with a {@link Scenario}.
+ * <p>
+ * This entity is exposed in the runner-facing API via {@link Job}.
+ */
+public record Job(long id, JobState state, Instant createdAt, Instant updatedAt, Map<String, ?> results) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Portfolio.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Portfolio.java
index 6f433a04..ff8d9e82 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Portfolio.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Portfolio.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,11 +20,12 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
-import jakarta.validation.constraints.NotBlank
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.Targets
+import jakarta.validation.constraints.NotBlank;
+import java.util.List;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.Targets;
/**
* A portfolio is the composition of multiple scenarios.
@@ -36,23 +37,13 @@ import org.opendc.web.proto.Targets
* @param targets The targets of the portfolio.
* @param scenarios The scenarios in the portfolio.
*/
-public data class Portfolio(
- val id: Long,
- val number: Int,
- val project: Project,
- val name: String,
- val targets: Targets,
- val scenarios: List<Scenario.Summary>,
-) {
+public record Portfolio(
+ long id, int number, Project project, String name, Targets targets, List<Scenario.Summary> scenarios) {
/**
* A request to create a new portfolio.
*/
@Schema(name = "Portfolio.Update")
- public data class Create(
- @field:NotBlank(message = "Name must not be empty")
- val name: String,
- val targets: Targets,
- )
+ public record Create(@NotBlank(message = "Name must not be empty") String name, Targets targets) {}
/**
* A summary view of a [Portfolio] provided for nested relations.
@@ -63,10 +54,5 @@ public data class Portfolio(
* @param targets The targets of the portfolio.
*/
@Schema(name = "Portfolio.Summary")
- public data class Summary(
- val id: Long,
- val number: Int,
- val name: String,
- val targets: Targets,
- )
+ public record Summary(long id, int number, String name, Targets targets) {}
}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Project.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Project.java
index 635552a9..534fdb26 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Project.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Project.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,27 +20,19 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
-import jakarta.validation.constraints.NotBlank
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import java.time.Instant
+import jakarta.validation.constraints.NotBlank;
+import java.time.Instant;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
/**
* A project in OpenDC encapsulates all the datacenter designs and simulation runs for a set of users.
*/
-public data class Project(
- val id: Long,
- val name: String,
- val createdAt: Instant,
- val updatedAt: Instant,
- val role: ProjectRole,
-) {
+public record Project(long id, String name, Instant createdAt, Instant updatedAt, ProjectRole role) {
/**
* A request to create a new project.
*/
@Schema(name = "Project.Create")
- public data class Create(
- @field:NotBlank(message = "Name must not be empty") val name: String,
- )
+ public record Create(@NotBlank(message = "Name must not be empty") String name) {}
}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/ProjectRole.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/ProjectRole.java
index 0f6de1fc..434ab472 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/ProjectRole.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/ProjectRole.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,12 +20,12 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
/**
* The role of a user in a project.
*/
-public enum class ProjectRole {
+public enum ProjectRole {
/**
* The user is allowed to view the project.
*/
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Scenario.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Scenario.java
index e0c790f5..7add5656 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Scenario.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Scenario.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,28 +20,28 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
-import jakarta.validation.constraints.NotBlank
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.OperationalPhenomena
-import org.opendc.web.proto.Workload
+import jakarta.validation.constraints.NotBlank;
+import java.util.List;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.OperationalPhenomena;
+import org.opendc.web.proto.Workload;
/**
* A single scenario to be explored by the simulator.
*/
-public data class Scenario(
- val id: Long,
- val number: Int,
- val project: Project,
- val portfolio: Portfolio.Summary,
- val name: String,
- val workload: Workload,
- val topology: Topology.Summary,
- val phenomena: OperationalPhenomena,
- val schedulerName: String,
- val jobs: List<Job>,
-) {
+public record Scenario(
+ long id,
+ int number,
+ Project project,
+ Portfolio.Summary portfolio,
+ String name,
+ Workload workload,
+ Topology.Summary topology,
+ OperationalPhenomena phenomena,
+ String schedulerName,
+ List<Job> jobs) {
/**
* Create a new scenario.
*
@@ -52,14 +52,12 @@ public data class Scenario(
* @param schedulerName The name of the scheduler.
*/
@Schema(name = "Scenario.Create")
- public data class Create(
- @field:NotBlank(message = "Name must not be empty")
- val name: String,
- val workload: Workload.Spec,
- val topology: Long,
- val phenomena: OperationalPhenomena,
- val schedulerName: String,
- )
+ public record Create(
+ @NotBlank(message = "Name must not be empty") String name,
+ Workload.Spec workload,
+ long topology,
+ OperationalPhenomena phenomena,
+ String schedulerName) {}
/**
* A summary view of a [Scenario] provided for nested relations.
@@ -70,17 +68,16 @@ public data class Scenario(
* @param workload The workload to be modeled by the scenario.
* @param phenomena The phenomena simulated for this scenario.
* @param schedulerName The scheduler name to use for the experiment.
- * @param job The simulation job associated with the scenario.
+ * @param jobs The simulation jobs associated with the scenario.
*/
@Schema(name = "Scenario.Summary")
- public data class Summary(
- val id: Long,
- val number: Int,
- val name: String,
- val workload: Workload,
- val topology: Topology.Summary,
- val phenomena: OperationalPhenomena,
- val schedulerName: String,
- val jobs: List<Job>,
- )
+ public record Summary(
+ long id,
+ int number,
+ String name,
+ Workload workload,
+ Topology.Summary topology,
+ OperationalPhenomena phenomena,
+ String schedulerName,
+ List<Job> jobs) {}
}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Topology.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Topology.java
index 0943eaf8..7291c77b 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/Topology.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/Topology.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,40 +20,30 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
-import jakarta.validation.constraints.NotBlank
-import org.eclipse.microprofile.openapi.annotations.media.Schema
-import org.opendc.web.proto.Room
-import java.time.Instant
+import jakarta.validation.constraints.NotBlank;
+import java.time.Instant;
+import java.util.List;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.opendc.web.proto.topology.Room;
/**
* Model for an OpenDC topology.
*/
-public data class Topology(
- val id: Long,
- val number: Int,
- val project: Project,
- val name: String,
- val rooms: List<Room>,
- val createdAt: Instant,
- val updatedAt: Instant,
-) {
+public record Topology(
+ long id, int number, Project project, String name, List<Room> rooms, Instant createdAt, Instant updatedAt) {
/**
* Create a new topology for a project.
*/
@Schema(name = "Topology.Create")
- public data class Create(
- @field:NotBlank(message = "Name must not be empty")
- val name: String,
- val rooms: List<Room>,
- )
+ public record Create(@NotBlank(message = "Name must not be empty") String name, List<Room> rooms) {}
/**
* Update an existing topology.
*/
@Schema(name = "Topology.Update")
- public data class Update(val rooms: List<Room>)
+ public record Update(List<Room> rooms) {}
/**
* A summary view of a [Topology] provided for nested relations.
@@ -65,11 +55,5 @@ public data class Topology(
* @param updatedAt The instant at which the topology was updated.
*/
@Schema(name = "Topology.Summary")
- public data class Summary(
- val id: Long,
- val number: Int,
- val name: String,
- val createdAt: Instant,
- val updatedAt: Instant,
- )
+ public record Summary(long id, int number, String name, Instant createdAt, Instant updatedAt) {}
}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/User.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/User.java
index 33dad4ff..030d9207 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/User.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/User.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,12 +20,9 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
/**
* A user of OpenDC.
*/
-public data class User(
- val userId: String,
- val accounting: UserAccounting,
-)
+public record User(String userId, UserAccounting accounting) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/UserAccounting.kt b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/UserAccounting.java
index 970721eb..3831381f 100644
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/user/UserAccounting.kt
+++ b/opendc-web/opendc-web-proto/src/main/java/org/opendc/web/proto/user/UserAccounting.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 AtLarge Research
+ * Copyright (c) 2023 AtLarge Research
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,15 +20,11 @@
* SOFTWARE.
*/
-package org.opendc.web.proto.user
+package org.opendc.web.proto.user;
-import java.time.LocalDate
+import java.time.LocalDate;
/**
* Accounting data for a user.
*/
-public data class UserAccounting(
- val periodEnd: LocalDate,
- val simulationTime: Int,
- val simulationTimeBudget: Int,
-)
+public record UserAccounting(LocalDate periodEnd, int simulationTime, int simulationTimeBudget) {}
diff --git a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/RoomTile.kt b/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/RoomTile.kt
deleted file mode 100644
index 666d66ee..00000000
--- a/opendc-web/opendc-web-proto/src/main/kotlin/org/opendc/web/proto/RoomTile.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.web.proto
-
-/**
- * A room tile.
- */
-public data class RoomTile(
- val id: String,
- val positionX: Double,
- val positionY: Double,
- val rack: Rack? = null,
- val roomId: String? = null,
-)
diff --git a/opendc-web/opendc-web-proto/src/main/resources/META-INF/beans.xml b/opendc-web/opendc-web-proto/src/main/resources/META-INF/beans.xml
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/opendc-web/opendc-web-proto/src/main/resources/META-INF/beans.xml