From 8f66da2ad36a8f4f6f6d54d79ec1132fe567b500 Mon Sep 17 00:00:00 2001 From: Kaseax Date: Fri, 27 Dec 2024 18:47:41 +0100 Subject: [PATCH 1/2] feat: stop servers started after specific Timestamp --- .../runtime/server/ServerService.kt | 24 ++++++++++++++++--- gradle/libs.versions.toml | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt b/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt index 8b8e81b..a644436 100644 --- a/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt +++ b/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt @@ -17,6 +17,7 @@ import io.grpc.Status import io.grpc.StatusException import org.apache.logging.log4j.LogManager import java.time.LocalDateTime +import java.time.ZoneOffset import java.util.* class ServerService( @@ -331,6 +332,14 @@ class ServerService( override suspend fun stopServer(request: StopServerRequest): ServerDefinition { val server = serverRepository.find(request.serverId) ?: throw StatusException(Status.NOT_FOUND.withDescription("No server was found matching this id.")) + + request.since?.let { sinceTimestamp -> + val sinceLocalDateTime = LocalDateTime.ofEpochSecond(sinceTimestamp.seconds, sinceTimestamp.nanos, ZoneOffset.UTC) + if (server.createdAt.isBefore(sinceLocalDateTime)) { + return server.toDefinition() + } + } + try { val stopped = stopServer(server.toDefinition(), request.stopCause) return stopped @@ -340,21 +349,30 @@ class ServerService( } override suspend fun stopServersByGroupWithTimeout(request: StopServersByGroupWithTimeoutRequest): StopServersByGroupResponse { - return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause) + val sinceLocalDateTime = request.since?.let { + LocalDateTime.ofEpochSecond(it.seconds, it.nanos, ZoneOffset.UTC) + } + return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause, sinceLocalDateTime) } override suspend fun stopServersByGroup(request: StopServersByGroupRequest): StopServersByGroupResponse { - return stopServersByGroup(request.groupName, null, request.stopCause) + val sinceLocalDateTime = request.since?.let { + LocalDateTime.ofEpochSecond(it.seconds, it.nanos, ZoneOffset.UTC) + } + return stopServersByGroup(request.groupName, null, request.stopCause, sinceLocalDateTime) } private suspend fun stopServersByGroup( groupName: String, timeout: Int?, - cause: ServerStopCause = ServerStopCause.NATURAL_STOP + cause: ServerStopCause = ServerStopCause.NATURAL_STOP, + since: LocalDateTime? = null ): StopServersByGroupResponse { val group = groupRepository.find(groupName) ?: throw StatusException(Status.NOT_FOUND.withDescription("No group was found matching this name. $groupName")) val groupServers = serverRepository.findServersByGroup(group.name) + .filter { since == null || it.createdAt.isAfter(since) } + if (groupServers.isEmpty()) { throw StatusException(Status.NOT_FOUND.withDescription("No server was found matching this group name. ${group.name}")) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2116c1..e550a9e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ kotlin = "2.0.20" kotlin-coroutines = "1.9.0" shadow = "8.3.3" log4j = "2.20.0" -droplet-api = "0.0.1-dev.4d43f53" +droplet-api = "0.0.1-dev.16b322c" simplecloud-pubsub = "1.0.5" simplecloud-metrics = "1.0.0" jooq = "3.19.3" From 71e759b8c5da80a63375bc08f950e45cca8f01af Mon Sep 17 00:00:00 2001 From: Kaseax Date: Fri, 27 Dec 2024 19:50:43 +0100 Subject: [PATCH 2/2] refactor: use ProtobufTimestamp util --- .../simplecloud/controller/runtime/server/ServerService.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt b/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt index a644436..a69a2cd 100644 --- a/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt +++ b/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt @@ -17,7 +17,6 @@ import io.grpc.Status import io.grpc.StatusException import org.apache.logging.log4j.LogManager import java.time.LocalDateTime -import java.time.ZoneOffset import java.util.* class ServerService( @@ -334,7 +333,7 @@ class ServerService( ?: throw StatusException(Status.NOT_FOUND.withDescription("No server was found matching this id.")) request.since?.let { sinceTimestamp -> - val sinceLocalDateTime = LocalDateTime.ofEpochSecond(sinceTimestamp.seconds, sinceTimestamp.nanos, ZoneOffset.UTC) + val sinceLocalDateTime = ProtobufTimestamp.toLocalDateTime(sinceTimestamp) if (server.createdAt.isBefore(sinceLocalDateTime)) { return server.toDefinition() } @@ -350,14 +349,14 @@ class ServerService( override suspend fun stopServersByGroupWithTimeout(request: StopServersByGroupWithTimeoutRequest): StopServersByGroupResponse { val sinceLocalDateTime = request.since?.let { - LocalDateTime.ofEpochSecond(it.seconds, it.nanos, ZoneOffset.UTC) + ProtobufTimestamp.toLocalDateTime(it) } return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause, sinceLocalDateTime) } override suspend fun stopServersByGroup(request: StopServersByGroupRequest): StopServersByGroupResponse { val sinceLocalDateTime = request.since?.let { - LocalDateTime.ofEpochSecond(it.seconds, it.nanos, ZoneOffset.UTC) + ProtobufTimestamp.toLocalDateTime(it) } return stopServersByGroup(request.groupName, null, request.stopCause, sinceLocalDateTime) }