diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java new file mode 100644 index 00000000..6e602dda --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java @@ -0,0 +1,13 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface AppRepository { + List findByEnvironmentId(UUID environmentId); + Optional findById(UUID id); + Optional findByEnvironmentIdAndSlug(UUID environmentId, String slug); + UUID create(UUID environmentId, String slug, String displayName); + void delete(UUID id); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java new file mode 100644 index 00000000..290f7a33 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java @@ -0,0 +1,12 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface AppVersionRepository { + List findByAppId(UUID appId); + Optional findById(UUID id); + int findMaxVersion(UUID appId); + UUID create(UUID appId, int version, String jarPath, String jarChecksum, String jarFilename, Long jarSizeBytes); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java new file mode 100644 index 00000000..4e8a6c0e --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java @@ -0,0 +1,15 @@ +package com.cameleer3.server.core.runtime; + +import java.util.Map; + +public record ContainerRequest( + String containerName, + String baseImage, + String jarPath, + String network, + Map envVars, + Map labels, + long memoryLimitBytes, + int cpuShares, + int healthCheckPort +) {} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java new file mode 100644 index 00000000..eb7e7bec --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java @@ -0,0 +1,7 @@ +package com.cameleer3.server.core.runtime; + +public record ContainerStatus(String state, boolean running, int exitCode, String error) { + public static ContainerStatus notFound() { + return new ContainerStatus("not_found", false, -1, "Container not found"); + } +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java new file mode 100644 index 00000000..af98584a --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java @@ -0,0 +1,16 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface DeploymentRepository { + List findByAppId(UUID appId); + List findByEnvironmentId(UUID environmentId); + Optional findById(UUID id); + Optional findActiveByAppIdAndEnvironmentId(UUID appId, UUID environmentId); + UUID create(UUID appId, UUID appVersionId, UUID environmentId, String containerName); + void updateStatus(UUID id, DeploymentStatus status, String containerId, String errorMessage); + void markDeployed(UUID id); + void markStopped(UUID id); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java new file mode 100644 index 00000000..07665b84 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java @@ -0,0 +1,15 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface EnvironmentRepository { + List findAll(); + Optional findById(UUID id); + Optional findBySlug(String slug); + UUID create(String slug, String displayName); + void updateDisplayName(UUID id, String displayName); + void updateStatus(UUID id, EnvironmentStatus status); + void delete(UUID id); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java new file mode 100644 index 00000000..e9dc67c2 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java @@ -0,0 +1,12 @@ +package com.cameleer3.server.core.runtime; + +import java.util.stream.Stream; + +public interface RuntimeOrchestrator { + boolean isEnabled(); + String startContainer(ContainerRequest request); + void stopContainer(String containerId); + void removeContainer(String containerId); + ContainerStatus getContainerStatus(String containerId); + Stream getLogs(String containerId, int tailLines); +}