diff options
| author | Paul-Christian Volkmer | 2023-07-26 09:34:05 +0200 |
|---|---|---|
| committer | Paul-Christian Volkmer | 2023-07-26 09:39:31 +0200 |
| commit | 5c6384e878318c0e86ed8bf59a973a063ab13f63 (patch) | |
| tree | 2d985e086da43024e9ef411f3c112b81668826b6 /src/main/kotlin/dev/dnpm | |
| parent | 26312c86205681723dd8a9c249e886c8655aa078 (diff) | |
Add statistics for state per patient
Diffstat (limited to 'src/main/kotlin/dev/dnpm')
| -rw-r--r-- | src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt | 11 | ||||
| -rw-r--r-- | src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt | 17 |
2 files changed, 28 insertions, 0 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 7955a9d..b3e2726 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt @@ -20,6 +20,7 @@ package dev.dnpm.etl.processor.monitoring import org.springframework.data.annotation.Id +import org.springframework.data.jdbc.repository.query.Query import org.springframework.data.relational.core.mapping.Embedded import org.springframework.data.relational.core.mapping.Table import org.springframework.data.repository.CrudRepository @@ -45,10 +46,20 @@ data class Report( val dataQualityReport: String = "" ) +data class CountedState( + val count: Int, + val status: RequestStatus, +) + interface RequestRepository : CrudRepository<Request, Long> { fun findAllByPatientIdOrderByProcessedAtDesc(patientId: String): List<Request> fun findByUuidEquals(uuid: String): Optional<Request> + @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;") + fun findPatientUniqueStates(): List<CountedState> + }
\ 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 2741fd3..6da0bfb 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsRestController.kt @@ -19,6 +19,7 @@ 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 @@ -95,6 +96,19 @@ class StatisticsRestController( .sortedBy { it.date } } + @GetMapping(path = ["requestpatientstates"]) + fun requestPatientStates(): List<NameValue> { + return requestRepository.findPatientUniqueStates().map { + val color = when (it.status) { + RequestStatus.ERROR -> "red" + RequestStatus.WARNING -> "darkorange" + RequestStatus.SUCCESS -> "green" + else -> "slategray" + } + NameValue(it.status.toString(), it.count, color) + } + } + @GetMapping(path = ["events"], produces = [MediaType.TEXT_EVENT_STREAM_VALUE]) fun updater(): Flux<ServerSentEvent<Any>> { return statisticsUpdateProducer.asFlux().flatMap { @@ -105,6 +119,9 @@ class StatisticsRestController( .build(), ServerSentEvent.builder<Any>() .event("requestslastmonth").id("none").data(this.requestsLastMonth()) + .build(), + ServerSentEvent.builder<Any>() + .event("requestpatientstates").id("none").data(this.requestPatientStates()) .build() ) ) |
