Emcee

Форк
0
/
KickstartWorkerEndpoint.swift 
53 строки · 1.9 Кб
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 KickstartWorkerEndpoint: RESTEndpoint {
12
    private let onDemandWorkerStarter: OnDemandWorkerStarter
13
    private let workerAlivenessProvider: WorkerAlivenessProvider
14
    private let workerConfigurations: WorkerConfigurations
15
    public let path: RESTPath = KickstartWorkerRESTMethod()
16
    public let requestIndicatesActivity = false
17
    
18
    public init(
19
        onDemandWorkerStarter: OnDemandWorkerStarter,
20
        workerAlivenessProvider: WorkerAlivenessProvider,
21
        workerConfigurations: WorkerConfigurations
22
    ) {
23
        self.onDemandWorkerStarter = onDemandWorkerStarter
24
        self.workerAlivenessProvider = workerAlivenessProvider
25
        self.workerConfigurations = workerConfigurations
26
    }
27
    
28
    public enum KickstartError: Error, CustomStringConvertible {
29
        case isAlive(WorkerId)
30
        
31
        public var description: String {
32
            switch self {
33
            case .isAlive(let workerId):
34
                return "Can't kickstart \(workerId) because it is alive"
35
            }
36
        }
37
    }
38
    
39
    public func handle(payload: KickstartWorkerPayload) throws -> KickstartWorkerResponse {
40
        guard workerConfigurations.workerConfiguration(workerId: payload.workerId) != nil else {
41
            throw WorkerConfigurationError.missingWorkerConfiguration(workerId: payload.workerId)
42
        }
43
        
44
        let workerAliveness = workerAlivenessProvider.alivenessForWorker(workerId: payload.workerId)
45
        guard !workerAliveness.registered || workerAliveness.silent else {
46
            throw KickstartError.isAlive(payload.workerId)
47
        }
48
        
49
        try onDemandWorkerStarter.start(workerId: payload.workerId)
50
        
51
        return KickstartWorkerResponse(workerId: payload.workerId)
52
    }
53
}
54

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

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

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

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