Add monitoring

This commit is contained in:
Christoph Hagen
2023-01-31 22:16:44 +01:00
parent 2d683e34c4
commit 5381b28386
4 changed files with 33 additions and 5 deletions

View File

@ -30,6 +30,9 @@ struct Configuration {
/// The number of minutes until a password reset token is no longer valid
let tokenExpiryDuration: Int
}
/// The authentication tokens to access the metrics
let monitoringTokens: Set<String>
}
extension Configuration {

View File

@ -1,5 +1,6 @@
import Vapor
import Fluent
import Clairvoyant
var server: SQLiteDatabase!
@ -7,9 +8,22 @@ var server: SQLiteDatabase!
public func configure(_ app: Application) throws {
let storageFolder = URL(fileURLWithPath: app.directory.resourcesDirectory)
let logFolder = storageFolder.appendingPathComponent("logs")
let accessManager = AccessTokenManager([])
let monitor = MetricObserver(
logFolder: logFolder,
accessManager: accessManager,
logMetricId: "schafkopf.log")
MetricObserver.standard = monitor
let status = Metric<ServerStatus>("schafkopf.status")
status.update(.initializing)
monitor.registerRoutes(app)
let configPath = URL(fileURLWithPath: app.directory.resourcesDirectory)
.appendingPathComponent("config.json")
let configuration = try Configuration(loadFromUrl: configPath)
configuration.monitoringTokens.map { $0.data(using: .utf8)! }.forEach(accessManager.add)
app.http.server.configuration.port = configuration.serverPort
@ -29,7 +43,13 @@ public func configure(_ app: Application) throws {
app.migrations.add(UserTableMigration())
app.migrations.add(PasswordResetMigration())
try app.autoMigrate().wait()
do {
try app.autoMigrate().wait()
} catch {
monitor.log("Failed to migrate database: \(error)")
status.update(.initializationFailure)
return
}
// serve files from /Public folder
app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
@ -46,4 +66,6 @@ public func configure(_ app: Application) throws {
// register routes
try routes(app)
status.update(.nominal)
}