This commit is contained in:
@@ -23,14 +23,13 @@ extension Application {
|
||||
)
|
||||
|
||||
@OptionGroup
|
||||
var shared: SharedOptions
|
||||
var options: SharedOptions
|
||||
|
||||
mutating func run() async throws {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
|
||||
let eventloopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
||||
var logger = Logger(label: "dewpoint-controller")
|
||||
let mqtt = try await setup(eventLoopGroup: eventloopGroup, logger: &logger)
|
||||
let (mqtt, logger) = try await cliClient.setupRun(options: options)
|
||||
logger.info("Setting up environment...")
|
||||
|
||||
do {
|
||||
try await withDependencies {
|
||||
@@ -48,6 +47,9 @@ extension Application {
|
||||
gracefulShutdownSignals: [.sigterm, .sigint],
|
||||
logger: logger
|
||||
)
|
||||
// These settings prevent services from running forever after we've
|
||||
// received a shutdown signal. In general it should not needed unless the
|
||||
// services don't shutdown their async streams properly.
|
||||
serviceGroupConfiguration.maximumCancellationDuration = .seconds(5)
|
||||
serviceGroupConfiguration.maximumGracefulShutdownDuration = .seconds(10)
|
||||
|
||||
@@ -57,30 +59,32 @@ extension Application {
|
||||
try await serviceGroup.run()
|
||||
}
|
||||
|
||||
// Here we've received a shutdown signal and shutdown all the
|
||||
// services.
|
||||
try await mqtt.shutdown()
|
||||
try await eventloopGroup.shutdownGracefully()
|
||||
} catch {
|
||||
try await eventloopGroup.shutdownGracefully()
|
||||
// If something fails, shutdown the mqtt client.
|
||||
try await mqtt.shutdown()
|
||||
}
|
||||
}
|
||||
|
||||
private func setup(
|
||||
eventLoopGroup: MultiThreadedEventLoopGroup,
|
||||
logger: inout Logger
|
||||
) async throws -> MQTTClient {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
|
||||
let environment = try await cliClient.makeEnvVars(shared.envVarsRequest(logger: logger))
|
||||
logger.logLevel = cliClient.logLevel(environment)
|
||||
|
||||
return try cliClient.makeClient(.init(
|
||||
envVars: environment,
|
||||
eventLoopGroup: eventLoopGroup,
|
||||
logger: logger
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
private extension CliClient {
|
||||
func setupRun(
|
||||
eventLoopGroup: MultiThreadedEventLoopGroup = .init(numberOfThreads: 1),
|
||||
loggerLabel: String = "dewpoint-controller",
|
||||
options: Application.SharedOptions
|
||||
) async throws -> (MQTTClient, Logger) {
|
||||
var logger = Logger(label: loggerLabel)
|
||||
let environment = try await makeEnvVars(options.envVarsRequest(logger: logger))
|
||||
logger.logLevel = logLevel(environment)
|
||||
let client = try makeClient(.init(
|
||||
environment: environment,
|
||||
eventLoopGroup: eventLoopGroup,
|
||||
logger: logger
|
||||
))
|
||||
|
||||
return (client, logger)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user