Emcee

Форк
0
/
RemoteWorkerLaunchdPlist.swift 
66 строк · 2.5 Кб
1
import Deployer
2
import Foundation
3
import LaunchdUtils
4
import QueueModels
5
import SSHDeployer
6
import SocketModels
7

8
public final class RemoteWorkerLaunchdPlist {
9

10
    private let deploymentDestination: DeploymentDestination
11
    private let emceeVersion: Version
12
    private let executableDeployableItem: DeployableItem
13
    private let queueAddress: SocketAddress
14

15
    public init(
16
        deploymentDestination: DeploymentDestination,
17
        emceeVersion: Version,
18
        executableDeployableItem: DeployableItem,
19
        queueAddress: SocketAddress
20
    ) {
21
        self.deploymentDestination = deploymentDestination
22
        self.emceeVersion = emceeVersion
23
        self.executableDeployableItem = executableDeployableItem
24
        self.queueAddress = queueAddress
25
    }
26
    
27
    public func plistData() throws -> Data {
28
        let containerPath = SSHDeployer.remoteContainerPath(
29
            forDeployable: executableDeployableItem,
30
            destination: deploymentDestination,
31
            deploymentId: emceeVersion.value
32
        )
33
        let emceeDeployableBinaryFile = try DeployableItemSingleFileExtractor(deployableItem: executableDeployableItem).singleDeployableFile()
34
        let workerBinaryRemotePath = SSHDeployer.remotePath(
35
            deployable: executableDeployableItem,
36
            file: emceeDeployableBinaryFile,
37
            destination: deploymentDestination,
38
            deploymentId: emceeVersion.value
39
        )
40
        let jobLabel = "ru.avito.emcee.worker.\(emceeVersion.value.removingWhitespaces())"
41
        let launchdPlist = LaunchdPlist(
42
            job: LaunchdJob(
43
                label: jobLabel,
44
                username: nil,
45
                groupname: nil,
46
                programArguments: [
47
                    workerBinaryRemotePath.pathString, "distWork",
48
                    "--emcee-version", emceeVersion.value,
49
                    "--queue-server", queueAddress.asString,
50
                    "--worker-id", deploymentDestination.workerId.value,
51
                    "--hostname", deploymentDestination.host,
52
                ],
53
                environmentVariables: [:],
54
                workingDirectory: containerPath.pathString,
55
                runAtLoad: true,
56
                disabled: true,
57
                standardOutPath: containerPath.appending("stdout.log").pathString,
58
                standardErrorPath: containerPath.appending("stderr.log").pathString,
59
                sockets: [:],
60
                inetdCompatibility: .disabled,
61
                sessionType: .background
62
            )
63
        )
64
        return try launchdPlist.createPlistData()
65
    }
66
}
67

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

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

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

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