Skip to content

Commit 93be345

Browse files
authored
Merge pull request #28 from theSimpleCloud/feat/start-multiple-server
feat/start multiple server
2 parents 7b1fce4 + c3fc829 commit 93be345

File tree

1 file changed

+68
-40
lines changed
  • controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server

1 file changed

+68
-40
lines changed

controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt

Lines changed: 68 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -201,54 +201,38 @@ class ServerService(
201201
return getServersByTypeResponse { servers.addAll(typeServers.map { it.toDefinition() }) }
202202
}
203203

204+
override suspend fun startMultipleServers(request: ControllerStartMultipleServersRequest): StartMultipleServerResponse {
205+
val host = hostRepository.find(serverRepository)
206+
?: throw StatusException(Status.NOT_FOUND.withDescription("No server host found, could not start servers"))
207+
val group = groupRepository.find(request.groupName)
208+
?: throw StatusException(Status.NOT_FOUND.withDescription("No group was found matching this name"))
209+
210+
val startedServers = mutableListOf<ServerDefinition>()
211+
212+
try {
213+
for (i in 1..request.amount) {
214+
val server = startServer(host, group)
215+
publishServerStartEvents(server, request.startCause)
216+
startedServers.add(server)
217+
}
218+
} catch (e: Exception) {
219+
throw StatusException(Status.INTERNAL.withDescription("Error whilst starting multiple servers").withCause(e))
220+
}
221+
222+
return StartMultipleServerResponse.newBuilder()
223+
.addAllServers(startedServers)
224+
.build()
225+
}
226+
204227
override suspend fun startServer(request: ControllerStartServerRequest): ServerDefinition {
205228
val host = hostRepository.find(serverRepository)
206229
?: throw StatusException(Status.NOT_FOUND.withDescription("No server host found, could not start server"))
207230
val group = groupRepository.find(request.groupName)
208231
?: throw StatusException(Status.NOT_FOUND.withDescription("No group was found matching this name"))
209232
try {
210233
val server = startServer(host, group)
211-
pubSubClient.publish(
212-
"event", ServerStartEvent.newBuilder()
213-
.setServer(server)
214-
.setStartedAt(ProtobufTimestamp.fromLocalDateTime(LocalDateTime.now()))
215-
.setStartCause(request.startCause)
216-
.build()
217-
)
218234

219-
pubSubClient.publish(MetricsEventNames.RECORD_METRIC, metric {
220-
metricType = "ACTIVITY_LOG"
221-
metricValue = 1L
222-
time = ProtobufTimestamp.fromLocalDateTime(LocalDateTime.now())
223-
meta.addAll(
224-
listOf(
225-
metricMeta {
226-
dataName = "displayName"
227-
dataValue = "${server.groupName} #${server.numericalId}"
228-
},
229-
metricMeta {
230-
dataName = "status"
231-
dataValue = "STARTED"
232-
},
233-
metricMeta {
234-
dataName = "resourceType"
235-
dataValue = "SERVER"
236-
},
237-
metricMeta {
238-
dataName = "groupName"
239-
dataValue = server.groupName
240-
},
241-
metricMeta {
242-
dataName = "numericalId"
243-
dataValue = server.numericalId.toString()
244-
},
245-
metricMeta {
246-
dataName = "by"
247-
dataValue = request.startCause.toString()
248-
}
249-
)
250-
)
251-
})
235+
publishServerStartEvents(server, request.startCause)
252236

253237
return server
254238
} catch (e: Exception) {
@@ -279,6 +263,50 @@ class ServerService(
279263
}
280264
}
281265

266+
private suspend fun publishServerStartEvents(server: ServerDefinition, startCause: ServerStartCause) {
267+
pubSubClient.publish(
268+
"event", ServerStartEvent.newBuilder()
269+
.setServer(server)
270+
.setStartedAt(ProtobufTimestamp.fromLocalDateTime(LocalDateTime.now()))
271+
.setStartCause(startCause)
272+
.build()
273+
)
274+
275+
pubSubClient.publish(MetricsEventNames.RECORD_METRIC, metric {
276+
metricType = "ACTIVITY_LOG"
277+
metricValue = 1L
278+
time = ProtobufTimestamp.fromLocalDateTime(LocalDateTime.now())
279+
meta.addAll(
280+
listOf(
281+
metricMeta {
282+
dataName = "displayName"
283+
dataValue = "${server.groupName} #${server.numericalId}"
284+
},
285+
metricMeta {
286+
dataName = "status"
287+
dataValue = "STARTED"
288+
},
289+
metricMeta {
290+
dataName = "resourceType"
291+
dataValue = "SERVER"
292+
},
293+
metricMeta {
294+
dataName = "groupName"
295+
dataValue = server.groupName
296+
},
297+
metricMeta {
298+
dataName = "numericalId"
299+
dataValue = server.numericalId.toString()
300+
},
301+
metricMeta {
302+
dataName = "by"
303+
dataValue = startCause.toString()
304+
}
305+
)
306+
)
307+
})
308+
}
309+
282310
private fun buildServer(group: Group, numericalId: Int): Server {
283311
return Server.fromDefinition(
284312
ServerDefinition.newBuilder()

0 commit comments

Comments
 (0)