12
public final class KickstartCommand: Command {
13
public let name = "kickstart"
14
public let description = "Attempts to restart the Emcee worker"
15
public let arguments: Arguments = [
16
ArgumentDescriptions.queueServer.asRequired,
17
ArgumentDescriptions.workerId.asMultiple.asRequired,
20
private let callbackQueue = DispatchQueue(label: "KickstartCommand.callbackQueue")
23
public init(di: DI) throws {
27
public func run(payload: CommandPayload) throws {
28
let requestSenderProvider: RequestSenderProvider = try di.get()
29
let logger: ContextualLogger = try di.get()
31
let queueServerAddress: SocketAddress = try payload.expectedSingleTypedValue(argumentName: ArgumentDescriptions.queueServer.name)
32
let workerIds: [WorkerId] = try payload.nonEmptyCollectionOfValues(argumentName: ArgumentDescriptions.workerId.name)
34
let kickstarter = WorkerKickstarterImpl(
35
requestSender: requestSenderProvider.requestSender(
36
socketAddress: queueServerAddress
40
let waitingGroup = DispatchGroup()
42
for workerId in workerIds {
45
logger.info("Attempting to kickstart \(workerId)")
46
kickstarter.kickstart(workerId: workerId, callbackQueue: callbackQueue) { [logger] result in
51
let workerId = try result.dematerialize()
52
logger.info("Successfully kickstarted \(workerId)")
54
logger.error("Failed to kickstart worker \(workerId): \(error)")