@@ -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