From 03b2df344b5386eb48f36faa6d3fe56b651ff1f4 Mon Sep 17 00:00:00 2001 From: Fabian Wolter Date: Sun, 14 Jun 2026 05:04:37 +0000 Subject: [PATCH] Add PostgreSQL status check --- build.gradle.kts | 1 + src/main/kotlin/de/ruvnox/tactical/Main.kt | 53 ++++++++++++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0a33007..37a3e47 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,6 +20,7 @@ dependencies { implementation("io.ktor:ktor-server-netty-jvm:3.1.3") implementation("io.ktor:ktor-server-content-negotiation-jvm:3.1.3") implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:3.1.3") + implementation("org.postgresql:postgresql:42.7.4") implementation("ch.qos.logback:logback-classic:1.5.18") testImplementation(kotlin("test")) diff --git a/src/main/kotlin/de/ruvnox/tactical/Main.kt b/src/main/kotlin/de/ruvnox/tactical/Main.kt index 1a9b56e..5fbc3a5 100644 --- a/src/main/kotlin/de/ruvnox/tactical/Main.kt +++ b/src/main/kotlin/de/ruvnox/tactical/Main.kt @@ -13,19 +13,32 @@ import io.ktor.server.routing.routing import io.ktor.serialization.kotlinx.json.json import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json +import java.sql.DriverManager @Serializable data class ServiceStatusResponse( val service: String, val status: String, - val version: String + val version: String, + val database: DatabaseStatusResponse +) + +@Serializable +data class DatabaseStatusResponse( + val status: String, + val host: String, + val port: Int, + val name: String ) fun main() { + val serverHost = System.getenv("SERVER_HOST") ?: "0.0.0.0" + val serverPort = System.getenv("SERVER_PORT")?.toIntOrNull() ?: 8080 + embeddedServer( Netty, - port = 8080, - host = "0.0.0.0", + port = serverPort, + host = serverHost, module = Application::module ).start(wait = true) } @@ -61,9 +74,41 @@ fun Application.module() { ServiceStatusResponse( service = "ruvnox-tactical-server", status = "online", - version = "0.1.0-SNAPSHOT" + version = "0.1.0-SNAPSHOT", + database = checkDatabaseStatus() ) ) } } } + +fun checkDatabaseStatus(): DatabaseStatusResponse { + val dbHost = System.getenv("DB_HOST") ?: "unset" + val dbPort = System.getenv("DB_PORT")?.toIntOrNull() ?: 5432 + val dbName = System.getenv("DB_NAME") ?: "unset" + val dbUser = System.getenv("DB_USER") ?: "" + val dbPassword = System.getenv("DB_PASSWORD") ?: "" + + val status = try { + DriverManager.getConnection( + "jdbc:postgresql://$dbHost:$dbPort/$dbName", + dbUser, + dbPassword + ).use { connection -> + connection.createStatement().use { statement -> + statement.executeQuery("select 1").use { result -> + if (result.next()) "online" else "error" + } + } + } + } catch (_: Exception) { + "offline" + } + + return DatabaseStatusResponse( + status = status, + host = dbHost, + port = dbPort, + name = dbName + ) +}