Emcee
1import ArgLib
2import EmceeDI
3import EmceeLogging
4import QueueClient
5import RESTMethods
6import RequestSender
7import SocketModels
8
9public final class ToggleWorkersSharingCommand: Command {
10public let name = "toggleWorkersSharing"
11
12public let description = "Changes state of queue workers sharing feature"
13
14public var arguments: Arguments = [
15ArgumentDescriptions.queueServer.asRequired,
16ArgumentDescriptions.setFeatureStatus.asRequired,
17]
18
19private let di: DI
20
21public init(di: DI) throws {
22self.di = di
23}
24
25public func run(payload: CommandPayload) throws {
26let requestSenderProvider: RequestSenderProvider = try di.get()
27let logger: ContextualLogger = try di.get()
28
29let queueServerAddress: SocketAddress = try payload.expectedSingleTypedValue(argumentName: ArgumentDescriptions.queueServer.name)
30let sharingEnabled: Bool = try payload.expectedSingleTypedValue(argumentName: ArgumentDescriptions.setFeatureStatus.name)
31
32let toggler = DefaultWorkersSharingToggler(
33timeout: 15,
34requestSender: requestSenderProvider.requestSender(
35socketAddress: queueServerAddress
36)
37)
38
39let sharingStatus: WorkersSharingFeatureStatus = sharingEnabled ? .enabled : .disabled
40do {
41try toggler.setSharingStatus(sharingStatus)
42logger.info("Successfully \(sharingStatus) workers sharing feature on queue \(queueServerAddress)")
43} catch {
44logger.error("Failed to \(sharingStatus) workers sharing feature on queue \(queueServerAddress): \(error)")
45}
46}
47}
48