Allow custom data folder
This commit is contained in:
parent
32055ecdec
commit
10194066db
@ -8,4 +8,5 @@
|
|||||||
"tokenExpiryDuration": 15,
|
"tokenExpiryDuration": 15,
|
||||||
},
|
},
|
||||||
"monitoringTokens": [],
|
"monitoringTokens": [],
|
||||||
|
"dataDirectory" : "/data/schafkopf"
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,13 @@ struct Configuration {
|
|||||||
let tokenExpiryDuration: Int
|
let tokenExpiryDuration: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
The folder where the data should be stored.
|
||||||
|
|
||||||
|
If the folder is set to `nil`, then the `Resources` folder is used.
|
||||||
|
*/
|
||||||
|
let dataDirectory: String?
|
||||||
|
|
||||||
/// The authentication tokens to access the metrics
|
/// The authentication tokens to access the metrics
|
||||||
let monitoringTokens: Set<String>
|
let monitoringTokens: Set<String>
|
||||||
|
|
||||||
@ -42,6 +49,13 @@ struct Configuration {
|
|||||||
}
|
}
|
||||||
return resourcesDirectory.appendingPathComponent(logPath)
|
return resourcesDirectory.appendingPathComponent(logPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func customDataDirectory(or publicDirectory: String) -> URL {
|
||||||
|
guard let dataDirectory else {
|
||||||
|
return URL(fileURLWithPath: publicDirectory)
|
||||||
|
}
|
||||||
|
return URL(fileURLWithPath: dataDirectory)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Configuration {
|
extension Configuration {
|
||||||
|
@ -12,13 +12,14 @@ private let scheduler = MultiThreadedEventLoopGroup(numberOfThreads: 2)
|
|||||||
private var configurationError: Error? = nil
|
private var configurationError: Error? = nil
|
||||||
|
|
||||||
func configure(_ app: Application) async throws {
|
func configure(_ app: Application) async throws {
|
||||||
let storageFolder = URL(fileURLWithPath: app.directory.resourcesDirectory)
|
let resourceFolder = URL(fileURLWithPath: app.directory.resourcesDirectory)
|
||||||
|
let publicDirectory = app.directory.publicDirectory
|
||||||
|
|
||||||
let configPath = URL(fileURLWithPath: app.directory.resourcesDirectory)
|
let configPath = URL(fileURLWithPath: app.directory.resourcesDirectory)
|
||||||
.appendingPathComponent("config.json")
|
.appendingPathComponent("config.json")
|
||||||
let configuration = try Configuration(loadFromUrl: configPath)
|
let configuration = try Configuration(loadFromUrl: configPath)
|
||||||
|
|
||||||
let logFolder = configuration.logURL(possiblyRelativeTo: storageFolder)
|
let logFolder = configuration.logURL(possiblyRelativeTo: resourceFolder)
|
||||||
let monitor = MetricObserver(
|
let monitor = MetricObserver(
|
||||||
logFileFolder: logFolder,
|
logFileFolder: logFolder,
|
||||||
logMetricId: "schafkopf.log")
|
logMetricId: "schafkopf.log")
|
||||||
@ -39,7 +40,8 @@ func configure(_ app: Application) async throws {
|
|||||||
app.databases.use(.sqlite(.memory), as: .sqlite)
|
app.databases.use(.sqlite(.memory), as: .sqlite)
|
||||||
default:
|
default:
|
||||||
app.logger.logLevel = .notice
|
app.logger.logLevel = .notice
|
||||||
let dbFile = storageFolder.appendingPathComponent("db.sqlite").path
|
let dataDirectory = configuration.customDataDirectory(or: publicDirectory)
|
||||||
|
let dbFile = dataDirectory.appendingPathComponent("db.sqlite").path
|
||||||
log("[PRODUCTION] Using database at \(dbFile)")
|
log("[PRODUCTION] Using database at \(dbFile)")
|
||||||
app.databases.use(.sqlite(.file(dbFile)), as: .sqlite)
|
app.databases.use(.sqlite(.file(dbFile)), as: .sqlite)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user