Add PostgreSQL status check
This commit is contained in:
@@ -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"))
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user