Coverage Summary for Class: AdminKt (dev.suresh.routes)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
AdminKt |
0%
(0/5)
|
|
0%
(0/10)
|
0%
(0/85)
|
AdminKt$adminRoutes$2 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/31)
|
AdminKt$adminRoutes$3$1$1 |
0%
(0/1)
|
0%
(0/4)
|
0%
(0/5)
|
0%
(0/97)
|
AdminKt$adminRoutes$3$1$2 |
0%
(0/1)
|
0%
(0/8)
|
0%
(0/11)
|
0%
(0/187)
|
AdminKt$adminRoutes$3$1$3 |
0%
(0/1)
|
|
0%
(0/4)
|
0%
(0/39)
|
Total |
0%
(0/9)
|
0%
(0/12)
|
0%
(0/31)
|
0%
(0/439)
|
package dev.suresh.routes
import BuildConfig
import ch.qos.logback.classic.Level
import ch.qos.logback.classic.Level.INFO
import ch.qos.logback.classic.LoggerContext
import ch.qos.logback.classic.util.ContextInitializer
import io.ktor.http.ContentType
import io.ktor.server.auth.authenticate
import io.ktor.server.http.content.staticResources
import io.ktor.server.plugins.swagger.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import org.slf4j.Logger.ROOT_LOGGER_NAME
import org.slf4j.LoggerFactory
fun Routing.adminRoutes() {
swaggerUI(path = "docs", swaggerFile = "openapi/documentation.yaml") {
version = BuildConfig.swaggerUi
customStyle(BuildConfig.swaggerStyle)
}
get("/") { call.respondRedirect("/docs") }
authenticate("admin") {
route("/loglevel") {
get("/{logger}") {
val loggerName = call.parameters["logger"] ?: ROOT_LOGGER_NAME
val loggerCtx = LoggerFactory.getILoggerFactory() as LoggerContext
when (val logger = loggerCtx.getLogger(loggerName)) {
null -> call.respondText("Logger '$loggerName' not found", status = NotFound)
else -> call.respondText("Logger '$loggerName' has level: ${logger.level}")
}
}
post("/{logger}/{level}") {
val loggerName = call.parameters["logger"] ?: ROOT_LOGGER_NAME
val levelName = call.parameters["level"]?.uppercase() ?: INFO.levelStr
try {
val loggerCtx = LoggerFactory.getILoggerFactory() as LoggerContext
val matching =
loggerCtx.loggerList
.filter { it.name.startsWith(prefix = loggerName, ignoreCase = true) }
.onEach { it.level = Level.valueOf(levelName) }
when (matching.isNotEmpty()) {
true -> call.respondText("Set $loggerName and sub-packages to $levelName")
else -> call.respondText("Logger '$loggerName' not found", status = NotFound)
}
} catch (_: Exception) {
call.respondText("Invalid log level: $levelName", status = BadRequest)
}
}
post("/reset") {
val loggerCtx = LoggerFactory.getILoggerFactory() as LoggerContext
loggerCtx.reset()
ContextInitializer(loggerCtx).autoConfig()
call.respondText("Logback configuration reset!")
}
}
staticResources("/resources", ".") { contentType { ContentType.Text.Plain } }
}
}