summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle.kts14
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt29
-rw-r--r--src/main/resources/templates/index.html3
3 files changed, 29 insertions, 17 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 934c512..c82dd0c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -7,22 +7,22 @@ plugins {
war
id("org.springframework.boot") version "3.5.5"
id("io.spring.dependency-management") version "1.1.7"
- kotlin("jvm") version "1.9.25"
- kotlin("plugin.spring") version "1.9.25"
+ kotlin("jvm") version "2.2.10"
+ kotlin("plugin.spring") version "2.2.10"
jacoco
}
group = "dev.dnpm"
-version = "0.11.0"
+version = "0.12.0-SNAPSHOT"
var versions = mapOf(
"mtb-dto" to "0.1.0-SNAPSHOT",
- "hapi-fhir" to "7.6.1",
- "mockito-kotlin" to "5.4.0",
- "archunit" to "1.3.0",
+ "hapi-fhir" to "8.4.0",
+ "mockito-kotlin" to "6.0.0",
+ "archunit" to "1.4.1",
// Webjars
"webjars-locator" to "0.52",
- "echarts" to "5.4.3",
+ "echarts" to "6.0.0",
"htmx.org" to "1.9.12"
)
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 36c9705..f2509dd 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt
@@ -30,6 +30,7 @@ import org.springframework.data.relational.core.mapping.Table
import org.springframework.data.repository.CrudRepository
import org.springframework.data.repository.PagingAndSortingRepository
import java.time.Instant
+import java.time.temporal.ChronoUnit
import java.util.*
@Table("request")
@@ -65,6 +66,12 @@ data class Request(
processedAt: Instant
) :
this(null, uuid, patientPseudonym, pid, fingerprint, type, status, processedAt)
+
+ fun isPendingUnknown(): Boolean {
+ return this.status == RequestStatus.UNKNOWN && this.processedAt.isBefore(
+ Instant.now().minus(10, ChronoUnit.MINUTES)
+ )
+ }
}
@JvmRecord
@@ -90,19 +97,23 @@ interface RequestRepository : CrudRepository<Request, Long>, PagingAndSortingRep
@Query("SELECT count(*) AS count, status FROM request WHERE type = 'MTB_FILE' GROUP BY status ORDER BY status, count DESC;")
fun countStates(): List<CountedState>
- @Query("SELECT count(*) AS count, status FROM (" +
- "SELECT status, rank() OVER (PARTITION BY patient_pseudonym ORDER BY processed_at DESC) AS rank FROM request " +
- "WHERE type = 'MTB_FILE' AND status NOT IN ('DUPLICATION') " +
- ") rank WHERE rank = 1 GROUP BY status ORDER BY status, count DESC;")
+ @Query(
+ "SELECT count(*) AS count, status FROM (" +
+ "SELECT status, rank() OVER (PARTITION BY patient_pseudonym ORDER BY processed_at DESC) AS rank FROM request " +
+ "WHERE type = 'MTB_FILE' AND status NOT IN ('DUPLICATION') " +
+ ") rank WHERE rank = 1 GROUP BY status ORDER BY status, count DESC;"
+ )
fun findPatientUniqueStates(): List<CountedState>
@Query("SELECT count(*) AS count, status FROM request WHERE type = 'DELETE' GROUP BY status ORDER BY status, count DESC;")
fun countDeleteStates(): List<CountedState>
- @Query("SELECT count(*) AS count, status FROM (" +
- "SELECT status, rank() OVER (PARTITION BY patient_pseudonym ORDER BY processed_at DESC) AS rank FROM request " +
- "WHERE type = 'DELETE'" +
- ") rank WHERE rank = 1 GROUP BY status ORDER BY status, count DESC;")
+ @Query(
+ "SELECT count(*) AS count, status FROM (" +
+ "SELECT status, rank() OVER (PARTITION BY patient_pseudonym ORDER BY processed_at DESC) AS rank FROM request " +
+ "WHERE type = 'DELETE'" +
+ ") rank WHERE rank = 1 GROUP BY status ORDER BY status, count DESC;"
+ )
fun findPatientUniqueDeleteStates(): List<CountedState>
-} \ No newline at end of file
+}
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index f48e3dc..a419dda 100644
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -52,7 +52,8 @@
<td th:if="${request.status.value.contains('success')}" class="bg-green"><small>[[ ${request.status} ]]</small></td>
<td th:if="${request.status.value.contains('warning')}" class="bg-yellow"><small>[[ ${request.status} ]]</small></td>
<td th:if="${request.status.value.contains('error')}" class="bg-red"><small>[[ ${request.status} ]]</small></td>
- <td th:if="${request.status.value == 'unknown'}" class="bg-gray"><small>[[ ${request.status} ]]</small></td>
+ <td th:if="${request.status.value == 'unknown' and not request.isPendingUnknown()}" class="bg-gray"><small>[[ ${request.status} ]]</small></td>
+ <td th:if="${request.status.value == 'unknown' and request.isPendingUnknown()}" class="bg-yellow"><small>⏰ [[ ${request.status} ]] ⏰</small></td>
<td th:if="${request.status.value == 'duplication'}" class="bg-gray"><small>[[ ${request.status} ]]</small></td>
<td th:if="${request.status.value == 'no-consent'}" class="bg-blue"><small>[[ ${request.status} ]]</small></td>
<td th:style="${request.type.value == 'delete'} ? 'color: red;'"><small>[[ ${request.type} ]]</small></td>