Emcee

Форк
0
/
DisableWorkerEndpoint.swift 
48 строк · 1.7 Кб
1
import Dispatch
2
import DistWorkerModels
3
import Foundation
4
import EmceeLogging
5
import QueueModels
6
import RESTInterfaces
7
import RESTMethods
8
import RESTServer
9
import WorkerAlivenessProvider
10

11
public final class DisableWorkerEndpoint: RESTEndpoint {
12
    private let workerAlivenessProvider: WorkerAlivenessProvider
13
    private let workerConfigurations: WorkerConfigurations
14
    public let path: RESTPath = RESTMethod.disableWorker
15
    public let requestIndicatesActivity = false
16
    
17
    public enum DisableWorkerError: Swift.Error, CustomStringConvertible {
18
        case workerIsAlreadyDisabled(workerId: WorkerId)
19
        
20
        public var description: String {
21
            switch self {
22
            case .workerIsAlreadyDisabled(let workerId):
23
                return "Can't disable \(workerId) because it is already disabled"
24
            }
25
        }
26
    }
27
    
28
    public init(
29
        workerAlivenessProvider: WorkerAlivenessProvider,
30
        workerConfigurations: WorkerConfigurations
31
    ) {
32
        self.workerAlivenessProvider = workerAlivenessProvider
33
        self.workerConfigurations = workerConfigurations
34
    }
35
    
36
    public func handle(payload: DisableWorkerPayload) throws -> WorkerDisabledResponse {
37
        guard workerConfigurations.workerConfiguration(workerId: payload.workerId) != nil else {
38
            throw WorkerConfigurationError.missingWorkerConfiguration(workerId: payload.workerId)
39
        }
40
        
41
        guard !workerAlivenessProvider.alivenessForWorker(workerId: payload.workerId).disabled else {
42
            throw DisableWorkerError.workerIsAlreadyDisabled(workerId: payload.workerId)
43
        }
44
        workerAlivenessProvider.disableWorker(workerId: payload.workerId)
45
        
46
        return WorkerDisabledResponse(workerId: payload.workerId)
47
    }
48
}
49

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.