Emcee
48 строк · 1.7 Кб
1import Dispatch
2import DistWorkerModels
3import Foundation
4import EmceeLogging
5import QueueModels
6import RESTInterfaces
7import RESTMethods
8import RESTServer
9import WorkerAlivenessProvider
10
11public final class DisableWorkerEndpoint: RESTEndpoint {
12private let workerAlivenessProvider: WorkerAlivenessProvider
13private let workerConfigurations: WorkerConfigurations
14public let path: RESTPath = RESTMethod.disableWorker
15public let requestIndicatesActivity = false
16
17public enum DisableWorkerError: Swift.Error, CustomStringConvertible {
18case workerIsAlreadyDisabled(workerId: WorkerId)
19
20public var description: String {
21switch self {
22case .workerIsAlreadyDisabled(let workerId):
23return "Can't disable \(workerId) because it is already disabled"
24}
25}
26}
27
28public init(
29workerAlivenessProvider: WorkerAlivenessProvider,
30workerConfigurations: WorkerConfigurations
31) {
32self.workerAlivenessProvider = workerAlivenessProvider
33self.workerConfigurations = workerConfigurations
34}
35
36public func handle(payload: DisableWorkerPayload) throws -> WorkerDisabledResponse {
37guard workerConfigurations.workerConfiguration(workerId: payload.workerId) != nil else {
38throw WorkerConfigurationError.missingWorkerConfiguration(workerId: payload.workerId)
39}
40
41guard !workerAlivenessProvider.alivenessForWorker(workerId: payload.workerId).disabled else {
42throw DisableWorkerError.workerIsAlreadyDisabled(workerId: payload.workerId)
43}
44workerAlivenessProvider.disableWorker(workerId: payload.workerId)
45
46return WorkerDisabledResponse(workerId: payload.workerId)
47}
48}
49