1
0
mirror of https://github.com/pcvolkmer/etl-processor.git synced 2025-04-19 17:26:51 +00:00

Fetch overall request statistic using sql query

This commit is contained in:
Paul-Christian Volkmer 2023-07-26 09:50:16 +02:00
parent 5c6384e878
commit ed17a803bf
2 changed files with 7 additions and 10 deletions

View File

@ -57,9 +57,12 @@ interface RequestRepository : CrudRepository<Request, Long> {
fun findByUuidEquals(uuid: String): Optional<Request> fun findByUuidEquals(uuid: String): Optional<Request>
@Query("SELECT count(*) AS count, status FROM request GROUP BY status ORDER BY status, count DESC;")
fun countStates(): List<CountedState>
@Query("SELECT count(*) AS count, status FROM (" + @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')" + "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<CountedState> fun findPatientUniqueStates(): List<CountedState>
} }

View File

@ -19,10 +19,8 @@
package dev.dnpm.etl.processor.web 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.RequestRepository
import dev.dnpm.etl.processor.monitoring.RequestStatus import dev.dnpm.etl.processor.monitoring.RequestStatus
import org.reactivestreams.Publisher
import org.springframework.http.MediaType import org.springframework.http.MediaType
import org.springframework.http.codec.ServerSentEvent import org.springframework.http.codec.ServerSentEvent
import org.springframework.web.bind.annotation.GetMapping 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 org.springframework.web.bind.annotation.RestController
import reactor.core.publisher.Flux import reactor.core.publisher.Flux
import reactor.core.publisher.Sinks import reactor.core.publisher.Sinks
import reactor.kotlin.core.publisher.toFlux
import java.time.Instant import java.time.Instant
import java.time.Month
import java.time.ZoneId import java.time.ZoneId
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit import java.time.temporal.ChronoUnit
import java.time.temporal.TemporalUnit
@RestController @RestController
@RequestMapping(path = ["/statistics"]) @RequestMapping(path = ["/statistics"])
@ -47,16 +42,15 @@ class StatisticsRestController(
@GetMapping(path = ["requeststates"]) @GetMapping(path = ["requeststates"])
fun requestStates(): List<NameValue> { fun requestStates(): List<NameValue> {
return requestRepository.findAll() return requestRepository.countStates()
.groupBy { it.status }
.map { .map {
val color = when (it.key) { val color = when (it.status) {
RequestStatus.ERROR -> "red" RequestStatus.ERROR -> "red"
RequestStatus.WARNING -> "darkorange" RequestStatus.WARNING -> "darkorange"
RequestStatus.SUCCESS -> "green" RequestStatus.SUCCESS -> "green"
else -> "slategray" else -> "slategray"
} }
NameValue(it.key.toString(), it.value.size, color) NameValue(it.status.toString(), it.count, color)
} }
.sortedByDescending { it.value } .sortedByDescending { it.value }
} }