refactor(infra-monitoring)

refactor(infra-gateway)
This commit is contained in:
stefan
2025-08-11 14:32:01 +02:00
parent d87a5a4a93
commit 582678e226
16 changed files with 282 additions and 115 deletions
@@ -3,14 +3,9 @@
plugins {
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlin.spring)
alias(libs.plugins.spring.boot)
alias(libs.plugins.spring.dependencyManagement)
}
// Deaktiviert die Erstellung eines ausführbaren Jars für dieses Bibliotheks-Modul.
tasks.getByName("bootJar") {
enabled = false
}
dependencies {
@@ -0,0 +1,19 @@
package at.mocode.infrastructure.monitoring.client
import org.springframework.boot.autoconfigure.AutoConfiguration
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass
import org.springframework.context.annotation.PropertySource
/**
* AutoConfiguration für das Monitoring-Client-Modul.
*
* Lädt konservative Default-Properties mit niedriger Priorität, die in jeder Anwendung
* leicht per application.properties/-yaml überschrieben werden können.
*/
@AutoConfiguration
@ConditionalOnClass(name = [
"org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration",
"io.micrometer.core.instrument.MeterRegistry"
])
@PropertySource("classpath:monitoring-defaults.properties")
class MonitoringClientAutoConfiguration
@@ -0,0 +1 @@
at.mocode.infrastructure.monitoring.client.MonitoringClientAutoConfiguration
@@ -0,0 +1,27 @@
# ===================================================================
# MELDENSTELLE - MONITORING CLIENT DEFAULTS (via AutoConfiguration)
# Diese Konfigurationen werden automatisch von jedem Service übernommen,
# der das monitoring-client-Modul einbindet. Sie können in der Anwendung
# jederzeit überschrieben werden.
# ===================================================================
# --- Spring Boot Actuator ---
# Stellt die /actuator Endpunkte bereit (health, info, prometheus)
management.endpoints.web.exposure.include=health,info,prometheus
# --- Micrometer Tracing ---
# Aktiviert das Tracing
management.tracing.enabled=true
# Definiert, dass Traces immer gesammelt werden sollen (1.0 = 100%)
management.tracing.sampling.probability=1.0
# --- Micrometer Observation (für Metriken UND Tracing) ---
# Aktiviert die "Beobachtung" von HTTP Server Requests.
# Dies erzeugt automatisch Metriken (Timer) UND Traces für eingehende Anfragen.
management.observations.http.server.requests.enabled=true
# Fügt Anwendungs-Informationen zu den Metriken hinzu
management.info.env.enabled=true
# Definiert den Standard-Endpunkt, an den die Traces gesendet werden.
management.zipkin.tracing.endpoint=http://zipkin:9411/api/v2/spans
@@ -0,0 +1,25 @@
package at.mocode.infrastructure.monitoring.client
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.springframework.boot.autoconfigure.AutoConfigurations
import org.springframework.boot.test.context.runner.ApplicationContextRunner
class MonitoringClientAutoConfigurationTest {
private val contextRunner = ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(MonitoringClientAutoConfiguration::class.java))
@Test
fun `should load monitoring properties correctly into the environment`() {
// Arrange
val expectedPropertyValue = "true"
val propertyKey = "management.observations.http.server.requests.enabled"
// Act & Assert
contextRunner.run { context ->
val actualPropertyValue = context.environment.getProperty(propertyKey)
assertThat(actualPropertyValue).isEqualTo(expectedPropertyValue)
}
}
}
@@ -0,0 +1,7 @@
package at.mocode.infrastructure.monitoring.client
import org.springframework.boot.autoconfigure.SpringBootApplication
// Minimaler Test-Application-Context für Library-Tests.
@SpringBootApplication
class MonitoringClientTestApplication
@@ -2,7 +2,9 @@ package at.mocode.infrastructure.monitoring
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import zipkin2.server.internal.EnableZipkinServer
@EnableZipkinServer
@SpringBootApplication
class MonitoringServerApplication
@@ -0,0 +1,24 @@
package at.mocode.infrastructure.monitoring
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
// Startet den ApplicationContext mit Webserver auf zufälligem Port und sicherer Testkonfiguration.
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
properties = [
"server.port=0",
"management.server.port=0",
"zipkin.storage.type=mem",
"zipkin.self-tracing.enabled=false",
"management.tracing.enabled=false",
"management.zipkin.tracing.endpoint="
]
)
class MonitoringServerApplicationTest {
@Test
fun `context loads successfully`() {
// Test ist bestanden, wenn der Kontext ohne Exception startet.
}
}