@@ -17,6 +17,7 @@ import io.grpc.Status
1717import io.grpc.StatusException
1818import org.apache.logging.log4j.LogManager
1919import java.time.LocalDateTime
20+ import java.time.ZoneOffset
2021import java.util.*
2122
2223class ServerService (
@@ -331,6 +332,14 @@ class ServerService(
331332 override suspend fun stopServer (request : StopServerRequest ): ServerDefinition {
332333 val server = serverRepository.find(request.serverId)
333334 ? : throw StatusException (Status .NOT_FOUND .withDescription(" No server was found matching this id." ))
335+
336+ request.since?.let { sinceTimestamp ->
337+ val sinceLocalDateTime = LocalDateTime .ofEpochSecond(sinceTimestamp.seconds, sinceTimestamp.nanos, ZoneOffset .UTC )
338+ if (server.createdAt.isBefore(sinceLocalDateTime)) {
339+ return server.toDefinition()
340+ }
341+ }
342+
334343 try {
335344 val stopped = stopServer(server.toDefinition(), request.stopCause)
336345 return stopped
@@ -340,21 +349,30 @@ class ServerService(
340349 }
341350
342351 override suspend fun stopServersByGroupWithTimeout (request : StopServersByGroupWithTimeoutRequest ): StopServersByGroupResponse {
343- return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause)
352+ val sinceLocalDateTime = request.since?.let {
353+ LocalDateTime .ofEpochSecond(it.seconds, it.nanos, ZoneOffset .UTC )
354+ }
355+ return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause, sinceLocalDateTime)
344356 }
345357
346358 override suspend fun stopServersByGroup (request : StopServersByGroupRequest ): StopServersByGroupResponse {
347- return stopServersByGroup(request.groupName, null , request.stopCause)
359+ val sinceLocalDateTime = request.since?.let {
360+ LocalDateTime .ofEpochSecond(it.seconds, it.nanos, ZoneOffset .UTC )
361+ }
362+ return stopServersByGroup(request.groupName, null , request.stopCause, sinceLocalDateTime)
348363 }
349364
350365 private suspend fun stopServersByGroup (
351366 groupName : String ,
352367 timeout : Int? ,
353- cause : ServerStopCause = ServerStopCause .NATURAL_STOP
368+ cause : ServerStopCause = ServerStopCause .NATURAL_STOP ,
369+ since : LocalDateTime ? = null
354370 ): StopServersByGroupResponse {
355371 val group = groupRepository.find(groupName)
356372 ? : throw StatusException (Status .NOT_FOUND .withDescription(" No group was found matching this name. $groupName " ))
357373 val groupServers = serverRepository.findServersByGroup(group.name)
374+ .filter { since == null || it.createdAt.isAfter(since) }
375+
358376 if (groupServers.isEmpty()) {
359377 throw StatusException (Status .NOT_FOUND .withDescription(" No server was found matching this group name. ${group.name} " ))
360378 }
0 commit comments