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