Add PostgreSQL status check

This commit is contained in:
Fabian Wolter
2026-06-14 05:04:37 +00:00
parent b74044f376
commit 03b2df344b
2 changed files with 50 additions and 4 deletions
+1
View File
@@ -20,6 +20,7 @@ dependencies {
implementation("io.ktor:ktor-server-netty-jvm:3.1.3") 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-server-content-negotiation-jvm:3.1.3")
implementation("io.ktor:ktor-serialization-kotlinx-json-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") implementation("ch.qos.logback:logback-classic:1.5.18")
testImplementation(kotlin("test")) testImplementation(kotlin("test"))
+49 -4
View File
@@ -13,19 +13,32 @@ import io.ktor.server.routing.routing
import io.ktor.serialization.kotlinx.json.json import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import java.sql.DriverManager
@Serializable @Serializable
data class ServiceStatusResponse( data class ServiceStatusResponse(
val service: String, val service: String,
val status: 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() { fun main() {
val serverHost = System.getenv("SERVER_HOST") ?: "0.0.0.0"
val serverPort = System.getenv("SERVER_PORT")?.toIntOrNull() ?: 8080
embeddedServer( embeddedServer(
Netty, Netty,
port = 8080, port = serverPort,
host = "0.0.0.0", host = serverHost,
module = Application::module module = Application::module
).start(wait = true) ).start(wait = true)
} }
@@ -61,9 +74,41 @@ fun Application.module() {
ServiceStatusResponse( ServiceStatusResponse(
service = "ruvnox-tactical-server", service = "ruvnox-tactical-server",
status = "online", 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
)
}