From 90c1e36cb7f18fce6a455128a5b16c821a8601b6 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 4 Apr 2026 17:42:56 +0200 Subject: [PATCH] feat: add RuntimeOrchestrator interface and request/response types --- .../cameleer/saas/runtime/BuildImageRequest.java | 9 +++++++++ .../cameleer/saas/runtime/ContainerStatus.java | 8 ++++++++ .../siegeln/cameleer/saas/runtime/LogConsumer.java | 6 ++++++ .../cameleer/saas/runtime/RuntimeOrchestrator.java | 10 ++++++++++ .../saas/runtime/StartContainerRequest.java | 13 +++++++++++++ 5 files changed, 46 insertions(+) create mode 100644 src/main/java/net/siegeln/cameleer/saas/runtime/BuildImageRequest.java create mode 100644 src/main/java/net/siegeln/cameleer/saas/runtime/ContainerStatus.java create mode 100644 src/main/java/net/siegeln/cameleer/saas/runtime/LogConsumer.java create mode 100644 src/main/java/net/siegeln/cameleer/saas/runtime/RuntimeOrchestrator.java create mode 100644 src/main/java/net/siegeln/cameleer/saas/runtime/StartContainerRequest.java diff --git a/src/main/java/net/siegeln/cameleer/saas/runtime/BuildImageRequest.java b/src/main/java/net/siegeln/cameleer/saas/runtime/BuildImageRequest.java new file mode 100644 index 0000000..da92c06 --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/runtime/BuildImageRequest.java @@ -0,0 +1,9 @@ +package net.siegeln.cameleer.saas.runtime; + +import java.nio.file.Path; + +public record BuildImageRequest( + String baseImage, + Path jarPath, + String imageTag +) {} diff --git a/src/main/java/net/siegeln/cameleer/saas/runtime/ContainerStatus.java b/src/main/java/net/siegeln/cameleer/saas/runtime/ContainerStatus.java new file mode 100644 index 0000000..cdd1954 --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/runtime/ContainerStatus.java @@ -0,0 +1,8 @@ +package net.siegeln.cameleer.saas.runtime; + +public record ContainerStatus( + String state, + boolean running, + int exitCode, + String error +) {} diff --git a/src/main/java/net/siegeln/cameleer/saas/runtime/LogConsumer.java b/src/main/java/net/siegeln/cameleer/saas/runtime/LogConsumer.java new file mode 100644 index 0000000..c1adc0d --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/runtime/LogConsumer.java @@ -0,0 +1,6 @@ +package net.siegeln.cameleer.saas.runtime; + +@FunctionalInterface +public interface LogConsumer { + void accept(String stream, String message, long timestampMillis); +} diff --git a/src/main/java/net/siegeln/cameleer/saas/runtime/RuntimeOrchestrator.java b/src/main/java/net/siegeln/cameleer/saas/runtime/RuntimeOrchestrator.java new file mode 100644 index 0000000..4ec24fa --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/runtime/RuntimeOrchestrator.java @@ -0,0 +1,10 @@ +package net.siegeln.cameleer.saas.runtime; + +public interface RuntimeOrchestrator { + String buildImage(BuildImageRequest request); + String startContainer(StartContainerRequest request); + void stopContainer(String containerId); + void removeContainer(String containerId); + ContainerStatus getContainerStatus(String containerId); + void streamLogs(String containerId, LogConsumer consumer); +} diff --git a/src/main/java/net/siegeln/cameleer/saas/runtime/StartContainerRequest.java b/src/main/java/net/siegeln/cameleer/saas/runtime/StartContainerRequest.java new file mode 100644 index 0000000..fe6c85c --- /dev/null +++ b/src/main/java/net/siegeln/cameleer/saas/runtime/StartContainerRequest.java @@ -0,0 +1,13 @@ +package net.siegeln.cameleer.saas.runtime; + +import java.util.Map; + +public record StartContainerRequest( + String imageRef, + String containerName, + String network, + Map envVars, + long memoryLimitBytes, + int cpuShares, + int healthCheckPort +) {}