Allow log path specification

This commit is contained in:
Christoph Hagen 2023-11-22 11:48:50 +01:00
parent 9c85f955e4
commit a217db1945
2 changed files with 21 additions and 4 deletions

View File

@ -13,6 +13,22 @@ struct Config {
/// The authentication tokens to use for monitoring of the service /// The authentication tokens to use for monitoring of the service
let authenticationTokens: Set<String> let authenticationTokens: Set<String>
/// The path to the folder where the metric logs are stored
///
/// If no path is provided, then a folder `logs` in the resources directory is created
/// If the path is relative, then it is assumed relative to the resources directory
let logPath: String?
func logURL(possiblyRelativeTo resourcesDirectory: URL) -> URL {
guard let logPath else {
return resourcesDirectory.appendingPathComponent("logs")
}
guard !logPath.hasPrefix("/") else {
return .init(fileURLWithPath: logPath)
}
return resourcesDirectory.appendingPathComponent(logPath)
}
} }
extension Config: Codable { extension Config: Codable {

View File

@ -24,7 +24,11 @@ enum ServerError: Error {
// configures your application // configures your application
public func configure(_ app: Application) throws { public func configure(_ app: Application) throws {
let storageFolder = URL(fileURLWithPath: app.directory.resourcesDirectory) let storageFolder = URL(fileURLWithPath: app.directory.resourcesDirectory)
let logFolder = storageFolder.appendingPathComponent("logs")
let configUrl = storageFolder.appendingPathComponent("config.json")
let config = try Config(loadFrom: configUrl)
let logFolder = config.logURL(possiblyRelativeTo: storageFolder)
let monitor = MetricObserver(logFileFolder: logFolder, logMetricId: "sesame.log") let monitor = MetricObserver(logFileFolder: logFolder, logMetricId: "sesame.log")
MetricObserver.standard = monitor MetricObserver.standard = monitor
@ -34,9 +38,6 @@ public func configure(_ app: Application) throws {
_ = try await status.update(.initializing) _ = try await status.update(.initializing)
} }
let configUrl = storageFolder.appendingPathComponent("config.json")
let config = try Config(loadFrom: configUrl)
app.http.server.configuration.port = config.port app.http.server.configuration.port = config.port
let keyFile = storageFolder.appendingPathComponent(config.keyFileName) let keyFile = storageFolder.appendingPathComponent(config.keyFileName)