Emcee

Форк
0
/
KickstartCommand.swift 
61 строка · 2.0 Кб
1
import ArgLib
2
import EmceeDI
3
import EmceeVersion
4
import Foundation
5
import EmceeLogging
6
import QueueClient
7
import QueueModels
8
import RequestSender
9
import SocketModels
10
import Types
11

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,
18
    ]
19
    
20
    private let callbackQueue = DispatchQueue(label: "KickstartCommand.callbackQueue")
21
    private let di: DI
22
    
23
    public init(di: DI) throws {
24
        self.di = di
25
    }
26
    
27
    public func run(payload: CommandPayload) throws {
28
        let requestSenderProvider: RequestSenderProvider = try di.get()
29
        let logger: ContextualLogger = try di.get()
30
        
31
        let queueServerAddress: SocketAddress = try payload.expectedSingleTypedValue(argumentName: ArgumentDescriptions.queueServer.name)
32
        let workerIds: [WorkerId] = try payload.nonEmptyCollectionOfValues(argumentName: ArgumentDescriptions.workerId.name)
33
        
34
        let kickstarter = WorkerKickstarterImpl(
35
            requestSender: requestSenderProvider.requestSender(
36
                socketAddress: queueServerAddress
37
            )
38
        )
39
        
40
        let waitingGroup = DispatchGroup()
41
        
42
        for workerId in workerIds {
43
            waitingGroup.enter()
44
            
45
            logger.info("Attempting to kickstart \(workerId)")
46
            kickstarter.kickstart(workerId: workerId, callbackQueue: callbackQueue) { [logger] result in
47
                defer {
48
                    waitingGroup.leave()
49
                }
50
                do {
51
                    let workerId = try result.dematerialize()
52
                    logger.info("Successfully kickstarted \(workerId)")
53
                } catch {
54
                    logger.error("Failed to kickstart worker \(workerId): \(error)")
55
                }
56
            }
57
        }
58

59
        waitingGroup.wait()
60
    }
61
}
62

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

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

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

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