From 1b8e74b3d81105ca726f315d059c3b424c65ae0c Mon Sep 17 00:00:00 2001 From: Balduin Landolt <33053745+BalduinLandolt@users.noreply.github.com> Date: Tue, 3 Jan 2023 16:42:41 +0100 Subject: [PATCH] refactor: replace Spray-JSON with ZIO-JSON in health route (#2360) --- .../knora/webapi/routing/HealthRoute.scala | 14 ++++++------- .../knora/webapi/routing/HealthRouteZ.scala | 20 ++++++++----------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/webapi/src/main/scala/org/knora/webapi/routing/HealthRoute.scala b/webapi/src/main/scala/org/knora/webapi/routing/HealthRoute.scala index 11b7fde9e4..40a7ed3e84 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/HealthRoute.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/HealthRoute.scala @@ -9,9 +9,8 @@ import akka.http.scaladsl.model._ import akka.http.scaladsl.server.Directives.get import akka.http.scaladsl.server.Directives.path import akka.http.scaladsl.server.Route -import spray.json.JsObject -import spray.json.JsString import zio._ +import zio.json._ import org.knora.webapi.core.State import org.knora.webapi.core.domain.AppState @@ -64,12 +63,7 @@ trait HealthCheck { status = statusCode(result.status), entity = HttpEntity( ContentTypes.`application/json`, - JsObject( - "name" -> JsString("AppState"), - "severity" -> JsString("non fatal"), - "status" -> JsString(status(result.status)), - "message" -> JsString(result.message) - ).compactPrint + result.toJson ) ) ) @@ -81,6 +75,10 @@ trait HealthCheck { private case class HealthCheckResult(name: String, severity: String, status: Boolean, message: String) + private object HealthCheckResult { + implicit val encoder: JsonEncoder[HealthCheckResult] = DeriveJsonEncoder.gen[HealthCheckResult] + } + private def unhealthy(message: String) = HealthCheckResult( name = "AppState", diff --git a/webapi/src/main/scala/org/knora/webapi/routing/HealthRouteZ.scala b/webapi/src/main/scala/org/knora/webapi/routing/HealthRouteZ.scala index 714f0d1149..4932d6bea3 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/HealthRouteZ.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/HealthRouteZ.scala @@ -5,10 +5,9 @@ package org.knora.webapi.instrumentation.health -import spray.json.JsObject -import spray.json.JsString import zhttp.http._ import zio._ +import zio.json._ import org.knora.webapi.core.State import org.knora.webapi.core.domain.AppState @@ -60,14 +59,7 @@ object HealthRouteZ { private def createResponse(result: HealthCheckResult): UIO[Response] = ZIO.succeed( Response - .json( - JsObject( - "name" -> JsString("AppState"), - "severity" -> JsString("non fatal"), - "status" -> JsString(status(result.status)), - "message" -> JsString(result.message) - ).toString() - ) + .json(result.toJson) .setStatus(statusCode(result.status)) ) @@ -90,13 +82,17 @@ object HealthRouteZ { /** * The result of a health check which is either unhealthy or healthy. * - * @param name ??? - * @param severity ??? + * @param name always "AppState" + * @param severity severity of the health status. Always "non fatal", otherwise the application would not respond * @param status the status (either false = unhealthy or true = healthy) * @param message the message */ private case class HealthCheckResult(name: String, severity: String, status: Boolean, message: String) + private object HealthCheckResult { + implicit val encoder: JsonEncoder[HealthCheckResult] = DeriveJsonEncoder.gen[HealthCheckResult] + } + private def unhealthy(message: String) = HealthCheckResult( name = "AppState",