From ec3f472f8f37a3d340ddd3a042ecb7f26bd311db Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 10 Mar 2026 11:14:28 +0100 Subject: feat: show submission statistics table (#260) --- .../dnpm/etl/processor/web/StatisticsController.kt | 31 ++++++++++++++++++++- src/main/resources/templates/statistics.html | 32 ++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsController.kt b/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsController.kt index e48d5df..8dfe595 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsController.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/web/StatisticsController.kt @@ -19,18 +19,47 @@ package dev.dnpm.etl.processor.web +import dev.dnpm.etl.processor.monitoring.RequestStatus +import dev.dnpm.etl.processor.monitoring.RequestType +import dev.dnpm.etl.processor.monitoring.SubmissionType +import dev.dnpm.etl.processor.services.RequestService +import net.sf.saxon.tree.tiny.Statistics import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import java.time.Instant +import java.time.ZoneId +import java.time.format.DateTimeFormatter @Controller @RequestMapping(path = ["/statistics"]) -class StatisticsController { +class StatisticsController( + private val requestService: RequestService, +) { @GetMapping fun index(model: Model): String { + val submissions = + requestService + .findAll() + .asSequence() + .filter { it.type == RequestType.MTB_FILE } + .filter { listOf(RequestStatus.SUCCESS, RequestStatus.WARNING).contains(it.status) } + .sortedByDescending { it.processedAt } + .groupBy { + val formatter = DateTimeFormatter.ofPattern("yyyy-MM").withZone(ZoneId.systemDefault()) + formatter.format(it.processedAt) + }.map { + mapOf( + "month" to it.key, + "accepted" to it.value.count { it.submissionAccepted }, + "initial" to it.value.count { it.submissionType == SubmissionType.INITIAL }, + "submissions" to it.value.size, + ) + }.toList() + model.addAttribute("now", Instant.now()) + model.addAttribute("submissions", submissions) return "statistics" } } diff --git a/src/main/resources/templates/statistics.html b/src/main/resources/templates/statistics.html index 1da382c..231bfe9 100644 --- a/src/main/resources/templates/statistics.html +++ b/src/main/resources/templates/statistics.html @@ -13,6 +13,38 @@ Hier sehen Sie eine Übersicht über eingegangene Anfragen.

+
+

Submissions

+

+ Die übermittelten Meldungen sind nach Monaten absteigen sortiert. +

+

+ Achtung: Die Anzahl der Meldebestätigungen und die Anzahl der initialen Meldungen + werden erst seit Version 0.15 erfasst. +

+
+ + + + + + + + + + + + + + + + + +
MonatMit MeldebestätigungInitiale MeldungenMeldungen Gesamt
+
+
+ +

MTB-File-Anfragen

-- cgit v1.2.3