From 08540e3bd7e0d2ef1a13a07e8827c25c601120a3 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 25 Mar 2024 17:24:33 +0100 Subject: [PATCH] feat: add timestamp of last connection check change --- .../monitoring/ConnectionCheckService.kt | 65 +++++++++++++++---- .../configs/gPasConnectionAvailable.html | 2 + .../configs/outputConnectionAvailable.html | 4 +- 3 files changed, 57 insertions(+), 14 deletions(-) diff --git a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt index b76a99f..1afaa32 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/ConnectionCheckService.kt @@ -49,9 +49,25 @@ sealed class ConnectionCheckResult { abstract val timestamp: Instant - data class KafkaConnectionCheckResult(override val available: Boolean, override val timestamp: Instant) : ConnectionCheckResult() - data class RestConnectionCheckResult(override val available: Boolean, override val timestamp: Instant) : ConnectionCheckResult() - data class GPasConnectionCheckResult(override val available: Boolean, override val timestamp: Instant) : ConnectionCheckResult() + abstract val lastChange: Instant + + data class KafkaConnectionCheckResult( + override val available: Boolean, + override val timestamp: Instant, + override val lastChange: Instant + ) : ConnectionCheckResult() + + data class RestConnectionCheckResult( + override val available: Boolean, + override val timestamp: Instant, + override val lastChange: Instant + ) : ConnectionCheckResult() + + data class GPasConnectionCheckResult( + override val available: Boolean, + override val timestamp: Instant, + override val lastChange: Instant + ) : ConnectionCheckResult() } class KafkaConnectionCheckService( @@ -60,17 +76,24 @@ class KafkaConnectionCheckService( private val connectionCheckUpdateProducer: Sinks.Many ) : OutputConnectionCheckService { - private var result = ConnectionCheckResult.KafkaConnectionCheckResult(false, Instant.now()) - + private var result = ConnectionCheckResult.KafkaConnectionCheckResult(false, Instant.now(), Instant.now()) @PostConstruct @Scheduled(cron = "0 * * * * *") fun check() { result = try { val available = null != consumer.listTopics(5.seconds.toJavaDuration()) - ConnectionCheckResult.KafkaConnectionCheckResult(available, Instant.now()) + ConnectionCheckResult.KafkaConnectionCheckResult( + available, + Instant.now(), + if (result.available == available) { result.lastChange } else { Instant.now() } + ) } catch (e: TimeoutException) { - ConnectionCheckResult.KafkaConnectionCheckResult(false, Instant.now()) + ConnectionCheckResult.KafkaConnectionCheckResult( + false, + Instant.now(), + if (!result.available) { result.lastChange } else { Instant.now() } + ) } connectionCheckUpdateProducer.emitNext( result, @@ -91,7 +114,7 @@ class RestConnectionCheckService( private val connectionCheckUpdateProducer: Sinks.Many ) : OutputConnectionCheckService { - private var result: ConnectionCheckResult.RestConnectionCheckResult = ConnectionCheckResult.RestConnectionCheckResult(false, Instant.now()) + private var result = ConnectionCheckResult.RestConnectionCheckResult(false, Instant.now(), Instant.now()) @PostConstruct @Scheduled(cron = "0 * * * * *") @@ -102,9 +125,17 @@ class RestConnectionCheckService( String::class.java ).statusCode == HttpStatus.OK - ConnectionCheckResult.RestConnectionCheckResult(available, Instant.now()) + ConnectionCheckResult.RestConnectionCheckResult( + available, + Instant.now(), + if (result.available == available) { result.lastChange } else { Instant.now() } + ) } catch (e: Exception) { - ConnectionCheckResult.RestConnectionCheckResult(false, Instant.now()) + ConnectionCheckResult.RestConnectionCheckResult( + false, + Instant.now(), + if (!result.available) { result.lastChange } else { Instant.now() } + ) } connectionCheckUpdateProducer.emitNext( result, @@ -124,7 +155,7 @@ class GPasConnectionCheckService( private val connectionCheckUpdateProducer: Sinks.Many ) : ConnectionCheckService { - private var result: ConnectionCheckResult.GPasConnectionCheckResult = ConnectionCheckResult.GPasConnectionCheckResult(false, Instant.now()) + private var result = ConnectionCheckResult.GPasConnectionCheckResult(false, Instant.now(), Instant.now()) @PostConstruct @Scheduled(cron = "0 * * * * *") @@ -150,9 +181,17 @@ class GPasConnectionCheckService( Void::class.java ).statusCode == HttpStatus.OK - ConnectionCheckResult.GPasConnectionCheckResult(available, Instant.now()) + ConnectionCheckResult.GPasConnectionCheckResult( + available, + Instant.now(), + if (result.available == available) { result.lastChange } else { Instant.now() } + ) } catch (e: Exception) { - ConnectionCheckResult.GPasConnectionCheckResult(false, Instant.now()) + ConnectionCheckResult.GPasConnectionCheckResult( + false, + Instant.now(), + if (!result.available) { result.lastChange } else { Instant.now() } + ) } connectionCheckUpdateProducer.emitNext( result, diff --git a/src/main/resources/templates/configs/gPasConnectionAvailable.html b/src/main/resources/templates/configs/gPasConnectionAvailable.html index ea9dead..a9a8517 100644 --- a/src/main/resources/templates/configs/gPasConnectionAvailable.html +++ b/src/main/resources/templates/configs/gPasConnectionAvailable.html @@ -5,6 +5,8 @@

Verbindung zu gPAS

Stand: +  |  + Letzte Änderung:
Die Verbindung ist aktuell diff --git a/src/main/resources/templates/configs/outputConnectionAvailable.html b/src/main/resources/templates/configs/outputConnectionAvailable.html index 63d77db..e6e970b 100644 --- a/src/main/resources/templates/configs/outputConnectionAvailable.html +++ b/src/main/resources/templates/configs/outputConnectionAvailable.html @@ -1,9 +1,11 @@

MTB-File Verbindung

Stand: +  |  + Letzte Änderung:
- Verbindung über [[ ${mtbFileSender} ]]. Die Verbindung ist aktuell. + Verbindung über [[ ${mtbFileSender} ]]. Die Verbindung ist aktuell verfügbar. nicht verfügbar.