From ed17a803bfea59274ac1d04663627111c0808fee Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Wed, 26 Jul 2023 09:50:16 +0200 Subject: [PATCH] Fetch overall request statistic using sql query --- .../dev/dnpm/etl/processor/monitoring/Request.kt | 5 ++++- .../etl/processor/web/StatisticsRestController.kt | 12 +++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt index b3e2726..5e6e773 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt @@ -57,9 +57,12 @@ interface RequestRepository : CrudRepository { fun findByUuidEquals(uuid: String): Optional + @Query("SELECT count(*) AS count, status FROM request GROUP BY status ORDER BY status, count DESC;") + fun countStates(): List + @Query("SELECT count(*) AS count, status FROM (" + "SELECT status, rank() OVER (PARTITION BY patient_id ORDER BY processed_at DESC) AS rank FROM request WHERE status NOT IN ('DUPLICATION')" + - ") rank WHERE rank = 1 GROUP BY status ORDER BY count DESC;") + ") rank WHERE rank = 1 GROUP BY status ORDER BY status, count DESC;") fun findPatientUniqueStates(): List } \ No newline at end of file diff --git a/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt b/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt index 6da0bfb..1e56c28 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt @@ -19,10 +19,8 @@ package dev.dnpm.etl.processor.web -import dev.dnpm.etl.processor.monitoring.PatientUniqueState import dev.dnpm.etl.processor.monitoring.RequestRepository import dev.dnpm.etl.processor.monitoring.RequestStatus -import org.reactivestreams.Publisher import org.springframework.http.MediaType import org.springframework.http.codec.ServerSentEvent import org.springframework.web.bind.annotation.GetMapping @@ -30,13 +28,10 @@ import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import reactor.core.publisher.Flux import reactor.core.publisher.Sinks -import reactor.kotlin.core.publisher.toFlux import java.time.Instant -import java.time.Month import java.time.ZoneId import java.time.format.DateTimeFormatter import java.time.temporal.ChronoUnit -import java.time.temporal.TemporalUnit @RestController @RequestMapping(path = ["/statistics"]) @@ -47,16 +42,15 @@ class StatisticsRestController( @GetMapping(path = ["requeststates"]) fun requestStates(): List { - return requestRepository.findAll() - .groupBy { it.status } + return requestRepository.countStates() .map { - val color = when (it.key) { + val color = when (it.status) { RequestStatus.ERROR -> "red" RequestStatus.WARNING -> "darkorange" RequestStatus.SUCCESS -> "green" else -> "slategray" } - NameValue(it.key.toString(), it.value.size, color) + NameValue(it.status.toString(), it.count, color) } .sortedByDescending { it.value } }