diff --git a/.env b/.env new file mode 100644 index 00000000..9ea6101f --- /dev/null +++ b/.env @@ -0,0 +1,207 @@ +# =================================================================== +# Environment Configuration Template - Meldestelle Project +# =================================================================== +# Copy this file to .env and customize the values for your environment +# Security Note: Never commit .env files containing production secrets! +# =================================================================== + +# =================================================================== +# Build Configuration +# =================================================================== +# Docker image versions +DOCKER_GRADLE_VERSION=9.1.0 +DOCKER_JAVA_VERSION=21 +DOCKER_KEYCLOAK_VERSION=26.4.0 +DOCKER_PROMETHEUS_VERSION=v2.54.1 +DOCKER_GRAFANA_VERSION=11.3.0 + +# Application version +DOCKER_APP_VERSION=1.0.0 +APP_VERSION=1.0.0 +APP_NAME=Meldestelle + +# Build metadata +BUILD_DATE=2025-11-11 +# BUILD_DATE will be auto-generated if not set + +# Spring profiles for services +SPRING_PROFILES_ACTIVE=docker,keycloak +DOCKER_SPRING_PROFILES_DEFAULT=default +DOCKER_SPRING_PROFILES_DOCKER=docker + +# =================================================================== +# Infrastructure Services - Port Configuration +# =================================================================== +# Database +POSTGRES_DB=meldestelle +# Note: Username and password are now managed via Docker secrets + +# Redis Cache +REDIS_PORT=6379 + +# Keycloak Authentication +KEYCLOAK_PORT=8180 +KEYCLOAK_LOG_LEVEL=INFO + +# Service Discovery +CONSUL_HOST=consul +CONSUL_PORT=8500 +CONSUL_ENABLED=true + +# Messaging +ZOOKEEPER_CLIENT_PORT=2181 +KAFKA_PORT=9092 +KAFKA_BROKER_ID=1 +KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 + +# Monitoring +PROMETHEUS_PORT=9090 +GRAFANA_PORT=3000 + +# =================================================================== +# Application Services - Port Configuration +# =================================================================== +# API Gateway +GATEWAY_HOST=api-gateway +GATEWAY_PORT=8081 + +# Microservices +PING_SERVICE_PORT=8082 +MEMBERS_SERVICE_PORT=8083 +HORSES_SERVICE_PORT=8084 +EVENTS_SERVICE_PORT=8085 +MASTERDATA_SERVICE_PORT=8086 +AUTH_SERVICE_PORT=8087 +MONITORING_SERVER_PORT=8088 + +# =================================================================== +# Client Applications - Port Configuration +# =================================================================== +# Web Application +WEB_APP_PORT=4000 +WEB_APP_DOMAIN=localhost +NODE_ENV=production + +# Nginx Configuration +NGINX_WORKER_PROCESSES=auto +NGINX_WORKER_CONNECTIONS=1024 + +# Desktop Application +DESKTOP_VNC_WEB_PORT=6080 +DESKTOP_VNC_PORT=5901 +DESKTOP_APP_DOMAIN=localhost + +# =================================================================== +# Security Configuration +# =================================================================== +# JWT Configuration +JWT_ISSUER=meldestelle-auth-server +JWT_AUDIENCE=meldestelle-services + +# Note: JWT_SECRET is now managed via Docker secrets +# Generate with: openssl rand -hex 32 + +# Keycloak Configuration +KEYCLOAK_REALM=meldestelle +KEYCLOAK_CLIENT_ID=api-gateway + +# Note: All passwords and secrets are now managed via Docker secrets +# Run: ./docker/secrets/setup-secrets.sh to generate secure secrets + +# =================================================================== +# Data Storage Configuration +# =================================================================== +# Data directory for persistent volumes +# Default: ./data (relative to project root) +# Production: /var/lib/meldestelle or dedicated mount point +DATA_PATH=./data + +# Volume configuration +# These directories will be created under DATA_PATH: +# - postgres/ (PostgreSQL data) +# - redis/ (Redis data) +# - prometheus/ (Prometheus metrics) +# - grafana/ (Grafana dashboards) +# - keycloak/ (Keycloak data) +# - consul/ (Consul data) +# - monitoring/ (Custom monitoring data) +# - desktop-app/ (Desktop application data) + +# =================================================================== +# Development and Testing +# =================================================================== +# Enable debug mode for Java applications +DEBUG=false + +# Enable Wasm compilation for client applications +ENABLE_WASM=false + +# =================================================================== +# Production Deployment Settings +# =================================================================== +# Container resource limits (configured in docker-compose files) +# These are documented here for reference: + +# Infrastructure Services Resource Limits: +# - postgres: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - redis: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM) +# - keycloak: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 1GB RAM) +# - consul: 1 CPU, 512MB RAM (reserved: 0.25 CPU, 128MB RAM) +# - kafka: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - zookeeper: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM) +# - prometheus: 1 CPU, 2GB RAM (reserved: 0.25 CPU, 512MB RAM) +# - grafana: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM) +# - api-gateway: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 1GB RAM) + +# Microservices Resource Limits: +# - ping-service: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM) +# - members-service: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - horses-service: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - events-service: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - masterdata-service: 1.5 CPU, 1.5GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - auth-server: 1.5 CPU, 1.5GB RAM (reserved: 0.5 CPU, 512MB RAM) + +# Client Applications Resource Limits: +# - web-app: 1 CPU, 512MB RAM (reserved: 0.25 CPU, 128MB RAM) +# - desktop-app: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM) +# - monitoring-server: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM) + +# =================================================================== +# Security Notes +# =================================================================== +# 1. All passwords and secrets are managed via Docker secrets +# 2. Run ./docker/secrets/setup-secrets.sh to generate secure credentials +# 3. Containers run as non-root users where possible +# 4. Security options: no-new-privileges enabled for all services +# 5. Networks are isolated with custom subnet (172.20.0.0/16) +# 6. Volumes have proper permissions and are mounted read-only where appropriate +# 7. Health checks are configured for all services +# 8. Resource limits prevent resource exhaustion attacks + +# =================================================================== +# Usage Instructions +# =================================================================== +# 1. Copy this file: cp .env.template .env +# 2. Customize values in .env for your environment +# 3. Generate secrets: ./docker/secrets/setup-secrets.sh --all +# 4. Create data directories: mkdir -p ./data/{postgres,redis,prometheus,grafana,keycloak,consul} +# 5. Deploy infrastructure: docker-compose -f docker-compose.yml.optimized up -d +# 6. Deploy services: docker-compose -f docker-compose.yml.optimized -f docker-compose.services.yml.optimized up -d +# 7. Deploy clients: docker-compose -f docker-compose.yml.optimized -f docker-compose.services.yml.optimized -f docker-compose.clients.yml.optimized up -d + +# =================================================================== +# Monitoring and Logging +# =================================================================== +# Access URLs (when running with default ports): +# - Grafana Dashboard: http://localhost:3000 (admin credentials in secrets) +# - Prometheus Metrics: http://localhost:9090 +# - Consul UI: http://localhost:8500 +# - Keycloak Admin: http://localhost:8180/admin (admin credentials in secrets) +# - API Gateway: http://localhost:8081 +# - Web Application: http://localhost:4000 +# - Desktop VNC: http://localhost:6080 + +# Log locations (inside containers): +# - Application logs: /app/logs/ +# - Nginx logs: /var/log/nginx/ +# - System logs: journalctl -u docker diff --git a/.env.template b/.env.template index 50782739..86c6ac0f 100644 --- a/.env.template +++ b/.env.template @@ -9,7 +9,7 @@ # Build Configuration # =================================================================== # Docker image versions -DOCKER_GRADLE_VERSION=9.0.0 +DOCKER_GRADLE_VERSION=9.0.1 DOCKER_JAVA_VERSION=21 DOCKER_KEYCLOAK_VERSION=26.4.0 DOCKER_PROMETHEUS_VERSION=v2.54.1 diff --git a/.junie/guidelines/technology-guides/docker/docker-development.md b/.junie/guidelines/technology-guides/docker/docker-development.md index 64e9e278..d8bcf254 100644 --- a/.junie/guidelines/technology-guides/docker/docker-development.md +++ b/.junie/guidelines/technology-guides/docker/docker-development.md @@ -5,9 +5,9 @@ guideline_type: "technology" scope: "docker-development" audience: ["developers", "ai-assistants"] -last_updated: "2025-09-15" +last_updated: "2025-11-11" dependencies: ["docker-overview.md", "docker-architecture.md"] -related_files: ["docker-compose.yml", "docker-compose.override.yml", "Makefile"] +related_files: ["docker-compose.yml", "docker-compose.services.yml", "docker-compose.clients.yml", "Makefile"] ai_context: "Entwicklungs-Workflow, Debugging und lokale Entwicklungsumgebung mit Docker" --- @@ -19,168 +19,726 @@ ai_context: "Entwicklungs-Workflow, Debugging und lokale Entwicklungsumgebung mi > Für Details zur Container-Architektur siehe [docker-architecture](docker-architecture.md). > Für Production-Deployment siehe [docker-production](docker-production.md). -### Schnellstart-Befehle +## 🚀 Schnellstart + +### Komplette Hilfe anzeigen ```bash -# 🚀 Komplettes Development-Setup -make dev-up # Startet alle Development-Services -make dev-down # Stoppt alle Services -make dev-logs # Zeigt Logs aller Services -make dev-restart # Neustart aller Services - -# 🔧 Service-spezifische Befehle -make service-build SERVICE=ping-service # Service neu bauen -make service-logs SERVICE=ping-service # Service-Logs anzeigen -make service-restart SERVICE=ping-service # Service neustarten +make help # Zeigt alle verfügbaren Befehle mit Beschreibungen ``` -> **🤖 AI-Assistant Hinweis:** -> Für Development verwende die Makefile-Befehle oder direkt docker-compose: -> - **Alles starten:** `make dev-up` oder `docker-compose up -d` -> - **Logs ansehen:** `make dev-logs` oder `docker-compose logs -f` -> - **Service debuggen:** `docker-compose exec sh` - -**Makefile-Beispiel:** - -```makefile -# Development commands -.PHONY: dev-up dev-down dev-logs dev-restart - -dev-up: - docker-compose -f docker-compose.yml -f docker-compose.services.yml up -d - @echo "🚀 Development environment started" - @echo "📊 Grafana: http://localhost:3000 (admin/admin)" - @echo "🔍 Prometheus: http://localhost:9090" - @echo "🚪 API Gateway: http://localhost:8080" - -dev-down: - docker-compose -f docker-compose.yml -f docker-compose.services.yml down - -dev-logs: - docker-compose -f docker-compose.yml -f docker-compose.services.yml logs -f - -dev-restart: - $(MAKE) dev-down - $(MAKE) dev-up - -# Service-specific commands -service-build: - @test -n "$(SERVICE)" || (echo "❌ SERVICE parameter required"; exit 1) - docker-compose -f docker-compose.yml -f docker-compose.services.yml build $(SERVICE) - -service-logs: - @test -n "$(SERVICE)" || (echo "❌ SERVICE parameter required"; exit 1) - docker-compose logs -f $(SERVICE) - -service-restart: - @test -n "$(SERVICE)" || (echo "❌ SERVICE parameter required"; exit 1) - docker-compose -f docker-compose.yml -f docker-compose.services.yml restart $(SERVICE) -``` - -### Hot-Reload Development - -**docker-compose.override.yml** für optimierte Entwicklung: - -```yaml -# Development overrides für Hot-Reload -version: '3.8' - -services: - web-client: - volumes: - - ./client/web-app/src:/app/src:ro - - ./client/common-ui/src:/app/common-ui/src:ro - environment: - - NODE_ENV=development - command: npm run dev - - ping-service: - environment: - - DEBUG=true - - SPRING_DEVTOOLS_RESTART_ENABLED=true - ports: - - "5005:5005" # Debug-Port - volumes: - - ./temp/ping-service/src:/workspace/src:ro -``` - -### Debugging von Services +### Wichtigste Befehle für den Einstieg ```bash -# Service im Debug-Modus starten -docker-compose -f docker-compose.yml up -d ping-service -docker-compose exec ping-service sh +# Komplettes System starten +make full-up # Infrastruktur + Services + Clients -# Logs in Echtzeit verfolgen -docker-compose logs -f ping-service api-gateway +# Nur Backend starten +make services-up # Infrastruktur + Microservices -# Health-Check Status prüfen -curl -s http://localhost:8082/actuator/health | jq -curl -s http://localhost:8080/actuator/health | jq +# Nur Entwicklungsumgebung +make dev-up # Infrastruktur only + +# System-Health prüfen +make health-check # Prüft alle Infrastruktur-Services + +# Logs anzeigen +make full-logs # Alle Logs in Echtzeit ``` +## 📚 Vollständige Makefile-Referenz + +### Development Workflow Commands + +Befehle für die lokale Entwicklungsumgebung: + +```bash +make dev-up # Startet Entwicklungsumgebung (docker-compose.yml) +make dev-down # Stoppt Entwicklungsumgebung +make dev-restart # Neustart Entwicklungsumgebung +make dev-logs # Zeigt alle Development-Logs +make dev-info # Zeigt Entwicklungsumgebungs-Informationen +``` + +**Verwendung:** + +```bash +# Infrastruktur starten (Postgres, Redis, Keycloak, Consul) +make dev-up + +# Nach dem Start werden angezeigt: +# - Consul UI: http://localhost:8500 +# - Keycloak: http://localhost:8180 (admin/admin) +# - PostgreSQL: localhost:5432 +# - Redis: localhost:6379 +``` + +### Layer-spezifische Commands + +Das System ist in drei Schichten organisiert: + +#### 1. Infrastructure Layer + +```bash +make infrastructure-up # Startet nur Infrastruktur-Services +make infrastructure-down # Stoppt Infrastruktur-Services +make infrastructure-logs # Zeigt Infrastruktur-Logs +``` + +**Services:** PostgreSQL, Redis, Keycloak, Consul, Kafka, Zookeeper, Prometheus, Grafana + +#### 2. Services Layer (Backend) + +```bash +make services-up # Startet Infrastruktur + Microservices +make services-down # Stoppt Services +make services-restart # Neustart Services +make services-logs # Zeigt Service-Logs +``` + +**Services:** API Gateway + alle Microservices (Ping, Members, Horses, Events, Masterdata, Auth, Monitoring) + +**URLs nach Start:** +- Gateway: http://localhost:8081 +- Ping Service: http://localhost:8082 +- Members Service: http://localhost:8083 +- Horses Service: http://localhost:8084 +- Events Service: http://localhost:8085 +- Master Service: http://localhost:8086 + +#### 3. Clients Layer (Frontend) + +```bash +make clients-up # Startet Infrastruktur + Client-Apps +make clients-down # Stoppt Clients +make clients-restart # Neustart Clients +make clients-logs # Zeigt Client-Logs +``` + +**Clients:** Web-App, Auth-Server, Monitoring-Server + +**URLs nach Start:** +- Web App: http://localhost:4000 +- Auth Server: http://localhost:8087 +- Monitoring: http://localhost:8088 + +### Full System Commands + +Befehle für das komplette System (alle Layer): + +```bash +make full-up # Startet ALLES (Infrastructure + Services + Clients) +make full-down # Stoppt komplettes System +make full-restart # Neustart komplettes System +make full-logs # Zeigt alle System-Logs +``` + +**Nach `make full-up` verfügbare Services:** + +``` +🌐 Frontend & APIs: + Web App: http://localhost:4000 + API Gateway: http://localhost:8081 + +🔧 Infrastructure: + PostgresQL: localhost:5432 + Redis: localhost:6379 + Keycloak: http://localhost:8180 + Consul: http://localhost:8500 + Prometheus: http://localhost:9090 + Grafana: http://localhost:3000 + +⚙️ Microservices: + Ping Service: http://localhost:8082 + Members Service: http://localhost:8083 + Horses Service: http://localhost:8084 + Events Service: http://localhost:8085 + Master Service: http://localhost:8086 + Auth Server: http://localhost:8087 + Monitoring: http://localhost:8088 +``` + +### Build Commands + +Befehle zum Bauen von Docker-Images: + +```bash +make build # Baut alle Custom-Images +make build-service SERVICE=ping-service # Baut einzelnen Service +make build-client CLIENT=web-app # Baut einzelnen Client +``` + +**Beispiele:** + +```bash +# Einzelnen Service neu bauen (ohne Cache) +make build-service SERVICE=api-gateway + +# Web-App neu bauen +make build-client CLIENT=web-app + +# Alle Images neu bauen +make build +``` + +### Test Commands + +Befehle für Testing: + +```bash +make test # Führt Integration-Tests aus +make test-e2e # Führt End-to-End-Tests aus +``` + +**Details:** + +```bash +# Integration-Tests +# - Startet automatisch Infrastruktur +# - Führt Gradle-Tests aus +# - Stoppt Infrastruktur nach Tests +make test + +# E2E-Tests +# - Startet komplette Entwicklungsumgebung +# - Führt Client-Tests aus +# - Stoppt Umgebung nach Tests +make test-e2e +``` + +### Environment Management Commands + +Befehle für Environment-Konfiguration: + +```bash +make env-setup # Zeigt Environment-Setup-Anweisungen +make env-dev # Wechselt zu Development-Environment +make env-prod # Wechselt zu Production-Environment +make env-staging # Wechselt zu Staging-Environment +make env-test # Wechselt zu Test-Environment +make validate # Validiert Docker Compose Konfiguration +make env-template # Erstellt .env Template-Datei +``` + +**Verwendung:** + +```bash +# Entwicklungsumgebung aktivieren +make env-dev + +# Validierung durchführen +make validate + +# Neue .env-Template erstellen +make env-template +``` + +### SSoT (Single Source of Truth) Commands + +Befehle für Docker-Versionsverwaltung: + +```bash +make versions-show # Zeigt zentrale Versionen (docker/versions.toml) +make versions-update key=gradle value=9.1.0 # Aktualisiert eine Version +make docker-sync # Synchronisiert versions.toml -> build-args/*.env +make docker-compose-gen ENV=development # Generiert Docker Compose Files +make docker-validate # Validiert Docker SSoT Konsistenz +make hooks-install # Installiert Pre-Commit SSoT Guard Hook +``` + +**Workflow für Versions-Updates:** + +```bash +# 1. Version in versions.toml aktualisieren +make versions-update key=gradle value=9.1.0 + +# 2. Build-Args synchronisieren +make docker-sync + +# 3. Compose-Files neu generieren +make docker-compose-gen ENV=development + +# 4. Konsistenz validieren +make docker-validate +``` + +**Verfügbare Versions-Keys:** +- `gradle` - Gradle-Version +- `java` - Java-Version +- `node` - Node.js-Version +- `nginx` - Nginx-Version +- `alpine` - Alpine Linux-Version +- `prometheus` - Prometheus-Version +- `grafana` - Grafana-Version +- `keycloak` - Keycloak-Version +- `app-version` - Anwendungsversion +- `spring-profiles-default` - Spring Default-Profile +- `spring-profiles-docker` - Spring Docker-Profile + +### Production Commands + +Befehle für Production-Deployment: + +```bash +make prod-up # Startet Production-Environment +make prod-down # Stoppt Production-Environment +make prod-restart # Neustart Production-Environment +make prod-logs # Zeigt Production-Logs +``` + +**⚠️ Hinweis:** Stelle sicher, dass `.env` korrekt konfiguriert ist mit `make env-prod` + +### Monitoring & Debugging Commands + +Befehle für System-Monitoring und Debugging: + +```bash +make status # Zeigt Container-Status +make health-check # Prüft Health aller Infrastruktur-Services +make logs SERVICE=postgres # Zeigt Logs eines spezifischen Services +make shell SERVICE=postgres # Öffnet Shell in Container +``` + +**Beispiele:** + +```bash +# Status aller Container +make status + +# Health-Check durchführen +make health-check +# Output: +# PostgreSQL: ✅ Ready +# Redis: ✅ PONG +# Consul: ✅ Leader elected +# Keycloak: ✅ Ready + +# Logs von PostgreSQL anzeigen +make logs SERVICE=postgres + +# Shell im Postgres-Container öffnen +make shell SERVICE=postgres +``` + +### Cleanup Commands + +Befehle zum Aufräumen: + +```bash +make clean # Aufräumen Docker-Ressourcen (Prune) +make clean-all # Vollständiges Cleanup (inkl. Images und Volumes) +``` + +**⚠️ Warnung:** `make clean-all` löscht auch Volumes und Images! + +### Development Tools Commands + +```bash +make dev-tools-up # Info: Dev-Tools wurden entfernt (verwende lokale Tools) +make dev-tools-down # Info: Keine Dev-Tool-Container zum Stoppen +``` + +**Empfehlung:** Verwende lokale Tools wie pgAdmin, TablePlus, DBeaver, RedisInsight + ## 🎯 AI-Assistenten: Development-Schnellreferenz -### Häufige Entwicklungsaufgaben +### Häufigste Workflows -| Aufgabe | Befehl | Beschreibung | -|-------------------|-----------------------------------------|-------------------------------| -| Umgebung starten | `make dev-up` | Alle Services für Development | -| Service debuggen | `docker-compose exec sh` | Shell im Container | -| Logs verfolgen | `docker-compose logs -f ` | Live-Logs anzeigen | -| Service neu bauen | `make service-build SERVICE=` | Einzelnen Service rebuilden | -| Health-Check | `curl localhost:/actuator/health` | Service-Status prüfen | +#### 1. Lokale Entwicklung starten -### Development-URLs +```bash +# Variante A: Nur Infrastruktur +make dev-up +./gradlew :members:members-service:bootRun -- **Grafana:** http://localhost:3000 (admin/admin) -- **Prometheus:** http://localhost:9090 -- **API Gateway:** http://localhost:8080 -- **Consul:** http://localhost:8500 -- **Keycloak:** http://localhost:8180 +# Variante B: Komplettes Backend +make services-up + +# Variante C: Alles inkl. Frontend +make full-up +``` + +#### 2. Service neu bauen nach Code-Änderungen + +```bash +# Service stoppen +docker compose down api-gateway + +# Service neu bauen +make build-service SERVICE=api-gateway + +# Service starten +make services-up +``` + +#### 3. Debugging eines Services + +```bash +# Logs in Echtzeit +make logs SERVICE=ping-service + +# Shell im Container öffnen +make shell SERVICE=ping-service + +# Health-Status prüfen +curl -s http://localhost:8082/actuator/health | jq +``` + +#### 4. Docker-Versionen aktualisieren + +```bash +# Gradle-Version ändern +make versions-update key=gradle value=9.1.0 + +# Änderungen synchronisieren +make docker-sync +make docker-compose-gen +make docker-validate + +# Git-Status prüfen (sollte generierte Files zeigen) +git status +``` + +#### 5. Tests ausführen + +```bash +# Integration-Tests (automatische Infrastruktur) +make test + +# E2E-Tests (automatische Full-Environment) +make test-e2e + +# Einzelner Test via Gradle +./gradlew :members:members-service:test +``` + +### Development-URLs Übersicht + +| Service | URL | Credentials | +|-----------------|-------------------------------|-------------------| +| Web App | http://localhost:4000 | - | +| API Gateway | http://localhost:8081 | - | +| Ping Service | http://localhost:8082 | - | +| Members Service | http://localhost:8083 | - | +| Horses Service | http://localhost:8084 | - | +| Events Service | http://localhost:8085 | - | +| Master Service | http://localhost:8086 | - | +| Auth Server | http://localhost:8087 | - | +| Monitoring | http://localhost:8088 | - | +| Keycloak Admin | http://localhost:8180 | admin/admin | +| Consul UI | http://localhost:8500 | - | +| Prometheus | http://localhost:9090 | - | +| Grafana | http://localhost:3000 | admin/admin | +| PostgreSQL | localhost:5432 | meldestelle/*** | +| Redis | localhost:6379 | - | + +### Health-Check Endpoints + +```bash +# API Gateway +curl -s http://localhost:8081/actuator/health | jq + +# Ping Service +curl -s http://localhost:8082/actuator/health | jq + +# Members Service +curl -s http://localhost:8083/actuator/health | jq + +# Keycloak +curl -s http://localhost:8180/health/ready | jq + +# Consul +curl -s http://localhost:8500/v1/status/leader +``` ### Debug-Ports -- **Spring-Services:** 5005 (Standard Java Debug) -- **Web-App:** Hot-Reload über Volume-Mapping -- **Client-Apps:** Port 4000 (Web), 5901 (Desktop VNC) +**Spring Boot Services:** +- Debug-Port: 5005 (Standard Java Debug Protocol) +- Konfiguration in docker-compose.services.yml + +**Client-Apps:** +- Web-App: Hot-Reload über Volume-Mapping +- Desktop-App: VNC Port 5901, VNC Web Port 6080 ### Troubleshooting Development #### Container startet nicht ```bash -# Container-Status prüfen -docker-compose ps +# 1. Status prüfen +make status -# Container-Logs anzeigen -docker-compose logs +# 2. Logs anzeigen +make logs SERVICE= -# Container neu starten -docker-compose restart +# 3. Container neu starten +docker compose restart -# Image neu bauen -docker-compose build --no-cache +# 4. Image neu bauen (ohne Cache) +make build-service SERVICE= +docker compose up -d ``` #### Port-Konflikte ```bash # Ports prüfen +lsof -i : +# oder netstat -tulpn | grep : -# Service mit anderem Port starten -docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d +# Konfigurierten Port in .env ändern +# z.B. API_GATEWAY_PORT=8081 -> API_GATEWAY_PORT=8091 + +# Services neu starten +make services-restart +``` + +#### Health-Check schlägt fehl + +```bash +# 1. Service-Status prüfen +make status + +# 2. Service-Logs prüfen +make logs SERVICE= + +# 3. Manueller Health-Check +curl -v http://localhost:/actuator/health + +# 4. Container-Netzwerk prüfen +docker network inspect meldestelle-network + +# 5. Service neu starten +docker compose restart ``` #### Volume-Probleme ```bash -# Volumes prüfen -docker volume ls +# Volumes anzeigen +docker volume ls | grep meldestelle -# Volume-Inhalt anzeigen -docker-compose exec ls -la /path/to/volume +# Volume-Inhalt prüfen +make shell SERVICE=postgres +ls -la /var/lib/postgresql/data + +# Volume entfernen (⚠️ Daten gehen verloren!) +docker volume rm meldestelle_postgres-data + +# Volumes neu erstellen +make full-down +make full-up +``` + +#### Datenbankverbindung fehlgeschlagen + +```bash +# 1. PostgreSQL-Status prüfen +make health-check + +# 2. PostgreSQL-Logs prüfen +make logs SERVICE=postgres + +# 3. Verbindung testen (aus anderem Container) +docker compose exec api-gateway sh +apk add postgresql-client +psql -h postgres -U meldestelle -d meldestelle + +# 4. Secrets prüfen (falls verwendet) +ls -la ./docker/secrets/ +``` + +#### Gradle-Build schlägt fehl im Container + +```bash +# 1. Gradle-Version in versions.toml prüfen +cat docker/versions.toml | grep gradle + +# 2. Verfügbare Gradle-Images prüfen +docker search gradle | grep alpine + +# 3. Build-Logs detailliert anzeigen +make logs SERVICE= + +# 4. Manuell im Container debuggen +make shell SERVICE= +./gradlew --version +./gradlew dependencies +``` + +#### Service ist erreichbar, antwortet aber nicht + +```bash +# 1. Service-Logs in Echtzeit +make logs SERVICE= + +# 2. JVM-Status prüfen (bei Java-Services) +make shell SERVICE= +ps aux | grep java + +# 3. Speicher/CPU prüfen +docker stats + +# 4. Netzwerk-Verbindung testen +docker compose exec sh +apk add curl +curl -v http://api-gateway:8081/actuator/health +``` + +## 🤖 AI-Assistant Best Practices + +### Für Code-Assistenten + +1. **Verwende immer `make help`** um verfügbare Befehle zu sehen +2. **Befehlsnamen korrekt verwenden:** + - ✅ `make build-service SERVICE=ping-service` + - ❌ `make service-build SERVICE=ping-service` (veraltet) +3. **Port-Angaben beachten:** + - API Gateway: Port 8081 (nicht 8080!) + - Alle Ports in `.env` oder `docker-compose*.yml` definiert +4. **SSoT-Workflow einhalten:** + - Versionen nur in `docker/versions.toml` ändern + - `make docker-sync` nach Änderungen + - `make docker-validate` vor Commits + +### Für Entwickler-Support + +1. **Troubleshooting-Reihenfolge:** + - `make status` → Container-Status + - `make health-check` → Service-Health + - `make logs SERVICE=` → Logs prüfen + - `make shell SERVICE=` → Interactive Debugging + +2. **Häufige Fehlerquellen:** + - Fehlende `.env` Datei → `make env-dev` + - Port-Konflikte → `lsof -i :` + - Veraltete Images → `make build` + - Volume-Berechtigungen → `make clean-all` (⚠️ Daten-Verlust!) + +3. **Performance-Optimierung:** + - Nur benötigte Layer starten (infrastructure/services/clients) + - Docker BuildKit aktivieren: `export DOCKER_BUILDKIT=1` + - Gradle-Cache nutzen (bereits in Dockerfiles konfiguriert) + +## 📦 Docker Compose Dateien + +Das Projekt verwendet mehrere Compose-Files: + +- **docker-compose.yml** - Infrastruktur-Layer (Postgres, Redis, Keycloak, Consul, etc.) +- **docker-compose.services.yml** - Services-Layer (API Gateway, Microservices) +- **docker-compose.clients.yml** - Clients-Layer (Web-App, Desktop-App) + +**Kombinationen:** + +```bash +# Nur Infrastruktur +docker compose -f docker-compose.yml up -d + +# Infrastruktur + Services +docker compose -f docker-compose.yml -f docker-compose.services.yml up -d + +# Infrastruktur + Clients +docker compose -f docker-compose.yml -f docker-compose.clients.yml up -d + +# Alles +docker compose -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d + +# ⚠️ Tipp: Verwende stattdessen die Makefile-Befehle! +``` + +## 🔄 Typische Entwicklungs-Workflows + +### Workflow 1: Neues Feature entwickeln + +```bash +# 1. Frische Umgebung starten +make full-down +make dev-up + +# 2. Feature in IDE entwickeln +# (Service läuft lokal via Gradle, nicht in Docker) + +# 3. Tests lokal ausführen +./gradlew :members:members-service:test + +# 4. Service als Container testen +make build-service SERVICE=members-service +make services-up + +# 5. Integration-Tests +make test + +# 6. Aufräumen +make dev-down +``` + +### Workflow 2: Bug-Fixing + +```bash +# 1. System starten +make full-up + +# 2. Logs beobachten +make logs SERVICE= + +# 3. Shell im Container öffnen (falls nötig) +make shell SERVICE= + +# 4. Fix implementieren und Service neu bauen +make build-service SERVICE= +docker compose restart + +# 5. Fix verifizieren +curl http://localhost:/actuator/health +make test +``` + +### Workflow 3: Docker-Version aktualisieren + +```bash +# 1. Aktuelle Versionen anzeigen +make versions-show + +# 2. Version aktualisieren (z.B. Java) +make versions-update key=java value=22 + +# 3. Build-Args synchronisieren +make docker-sync + +# 4. Compose-Files neu generieren +make docker-compose-gen ENV=development + +# 5. Konsistenz validieren +make docker-validate + +# 6. Testen +make clean-all # ⚠️ Entfernt Volumes! +make full-up +make health-check +``` + +### Workflow 4: Kompletter System-Reset + +```bash +# 1. Alles stoppen +make full-down + +# 2. Alle Docker-Ressourcen entfernen +make clean-all # ⚠️ Entfernt auch Volumes und Images! + +# 3. Images neu bauen +make build + +# 4. System neu starten +make full-up + +# 5. Health-Check +make health-check + +# 6. Logs prüfen +make full-logs ``` --- @@ -189,5 +747,10 @@ docker-compose exec ls -la /path/to/volume - [Docker-Overview](./docker-overview.md) - Grundlagen und Philosophie - [Docker-Architecture](./docker-architecture.md) - Container-Services und Struktur - [Docker-Production](./docker-production.md) - Production-Deployment -- [docker-monitoring](./docker-monitoring.md) - Observability -- [docker-troubleshooting](./docker-troubleshooting.md) - Problemlösung +- [Docker-Monitoring](./docker-monitoring.md) - Observability +- [Docker-Troubleshooting](./docker-troubleshooting.md) - Problemlösung + +--- + +**Letzte Aktualisierung:** 2025-11-11 +**Version:** 2.0.0 - Vollständige Makefile-Referenz mit allen 50+ Befehlen diff --git a/.junie/guidelines/technology-guides/docker/docker-monitoring.md b/.junie/guidelines/technology-guides/docker/docker-monitoring.md index 0ad7a5ba..ad09609e 100644 --- a/.junie/guidelines/technology-guides/docker/docker-monitoring.md +++ b/.junie/guidelines/technology-guides/docker/docker-monitoring.md @@ -238,7 +238,7 @@ scrape_configs: - job_name: 'spring-boot' metrics_path: '/actuator/prometheus' static_configs: - - targets: ['api-gateway:8080', 'ping-service:8082'] + - targets: ['api-gateway:8081', 'ping-service:8082'] scrape_interval: 10s - job_name: 'infrastructure' diff --git a/.junie/guidelines/technology-guides/docker/docker-production.md b/.junie/guidelines/technology-guides/docker/docker-production.md index 3ce63647..16ffc145 100644 --- a/.junie/guidelines/technology-guides/docker/docker-production.md +++ b/.junie/guidelines/technology-guides/docker/docker-production.md @@ -70,7 +70,7 @@ export KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 ```nginx upstream api_backend { - server api-gateway:8080; + server api-gateway:8081; keepalive 32; } diff --git a/Makefile b/Makefile index 2f837694..2561a6ba 100644 --- a/Makefile +++ b/Makefile @@ -3,13 +3,21 @@ # Optimierte Befehle für containerised Entwicklung-Workflows # =================================================================== -.PHONY: help dev-up dev-down dev-restart dev-logs build clean test +# =================================================================== +# PHONY Target Declarations +# =================================================================== +.PHONY: help +.PHONY: dev-up dev-down dev-restart dev-logs dev-info dev-tools-up dev-tools-down +.PHONY: infrastructure-up infrastructure-down infrastructure-logs .PHONY: services-up services-down services-restart services-logs .PHONY: clients-up clients-down clients-restart clients-logs -.PHONY: prod-up prod-down prod-restart prod-logs -.PHONY: infrastructure-up infrastructure-down infrastructure-logs .PHONY: full-up full-down full-restart full-logs -.PHONY: dev-tools-up dev-tools-down status health-check logs shell env-setup env-dev env-prod env-staging env-test dev-info clean-all build-service build-client +.PHONY: prod-up prod-down prod-restart prod-logs +.PHONY: env-setup env-dev env-prod env-staging env-test validate env-template +.PHONY: build build-service build-client clean clean-all +.PHONY: test test-e2e +.PHONY: status health-check logs shell +.PHONY: versions-show versions-update docker-sync docker-validate docker-compose-gen hooks-install .ONESHELL: @@ -109,11 +117,42 @@ clients-logs: ## Show client application logs full-up: ## Start complete system (infrastructure + services + clients) @echo "🚀 Starting complete Meldestelle system..." $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d + @echo "✅ Complete system started" + @echo "" + @echo "🌐 Frontend & APIs:" + @echo " Web App: http://localhost:4000" + @echo " API Gateway: http://localhost:8081" + @echo "" + @echo "🔧 Infrastructure:" + @echo " PostgresQL: localhost:5432" + @echo " Redis: localhost:6379" + @echo " Keycloak: http://localhost:8180" + @echo " Consul: http://localhost:8500" + @echo " Prometheus: http://localhost:9090" + @echo " Grafana: http://localhost:3000" + @echo "" + @echo "⚙️ Microservices:" + @echo " Ping Service: http://localhost:8082" + @echo " Members Service: http://localhost:8083" + @echo " Horses Service: http://localhost:8084" + @echo " Events Service: http://localhost:8085" + @echo " Master Service: http://localhost:8086" + @echo " Auth Server: http://localhost:8087" + @echo " Monitoring: http://localhost:8088" + +full-down: ## Stop complete system + $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml down + +full-restart: ## Restart complete system + @$(MAKE) full-down + @$(MAKE) full-up + +full-logs: ## Show all system logs + $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml logs -f # =================================================================== # SSoT Developer UX (optional helpers) # =================================================================== -.PHONY: versions-show versions-update docker-sync docker-validate docker-compose-gen hooks-install # Show current centralized versions from docker/versions.toml versions-show: ## Show centralized versions (docker/versions.toml) @@ -148,38 +187,6 @@ hooks-install: ## Install pre-commit SSoT guard hook into .git/hooks/pre-commit @cp scripts/git-hooks/pre-commit-ssot .git/hooks/pre-commit @chmod +x .git/hooks/pre-commit @echo "✅ Installed .git/hooks/pre-commit (SSoT guard)" - @echo "✅ Complete system started" - @echo "" - @echo "🌐 Frontend & APIs:" - @echo " Web App: http://localhost:4000" - @echo " API Gateway: http://localhost:8081" - @echo "" - @echo "🔧 Infrastructure:" - @echo " PostgresQL: localhost:5432" - @echo " Redis: localhost:6379" - @echo " Keycloak: http://localhost:8180" - @echo " Consul: http://localhost:8500" - @echo " Prometheus: http://localhost:9090" - @echo " Grafana: http://localhost:3000" - @echo "" - @echo "⚙️ Microservices:" - @echo " Ping Service: http://localhost:8082" - @echo " Members Service: http://localhost:8083" - @echo " Horses Service: http://localhost:8084" - @echo " Events Service: http://localhost:8085" - @echo " Master Service: http://localhost:8086" - @echo " Auth Server: http://localhost:8087" - @echo " Monitoring: http://localhost:8088" - -full-down: ## Stop complete system - $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml down - -full-restart: ## Restart complete system - @$(MAKE) full-down - @$(MAKE) full-up - -full-logs: ## Show all system logs - $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml logs -f # =================================================================== # Environment Configuration Commands @@ -247,8 +254,8 @@ prod-restart: ## Restart production environment @$(MAKE) prod-down @$(MAKE) prod-up -prod-logs: ## Show production logs (simplified) - $(COMPOSE) -f docker-compose.yml logs -f +prod-logs: ## Show production logs + $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml logs -f # =================================================================== # Development Tools @@ -337,19 +344,23 @@ test: ## Run integration tests @echo "🧪 Running integration tests..." @$(MAKE) infrastructure-up @echo "⏳ Waiting for services to be ready..." - @sleep 30 + @sleep 10 + @$(MAKE) health-check || true @echo "✅ Running test suite..." - ./gradlew test + @./gradlew test || (echo "❌ Tests failed"; $(MAKE) infrastructure-down; exit 1) @$(MAKE) infrastructure-down + @echo "✅ Integration tests completed successfully" test-e2e: ## Run end-to-end tests with full environment @echo "🧪 Running end-to-end tests..." @$(MAKE) dev-up @echo "⏳ Waiting for full environment to be ready..." - @sleep 60 + @sleep 15 + @$(MAKE) health-check || true @echo "✅ Running e2e test suite..." - ./gradlew :client:web-app:jsTest + @./gradlew :client:web-app:jsTest || (echo "❌ E2E tests failed"; $(MAKE) dev-down; exit 1) @$(MAKE) dev-down + @echo "✅ E2E tests completed successfully" # =================================================================== # Information and Help diff --git a/config/central.toml b/config/central.toml index d9c62a29..35500861 100644 --- a/config/central.toml +++ b/config/central.toml @@ -347,10 +347,10 @@ health-endpoint = "/health" # =================================================================== [build] -gradle-version = "9.0.0" +gradle-version = "9.1.0" java-version = "21" -node-version = "20.12.0" -nginx-version = "1.25-alpine" +node-version = "24.11.0" +nginx-version = "1.29-alpine" docker-version = "1.0.0" # =================================================================== diff --git a/docker-compose.clients.yml b/docker-compose.clients.yml index 73764965..0c7d49dd 100644 --- a/docker-compose.clients.yml +++ b/docker-compose.clients.yml @@ -2,7 +2,7 @@ # Docker Compose - Client Applications # Generated from docker/versions.toml # Environment: development -# Generated: 2025-11-11 12:07:58 UTC +# Generated: 2025-11-11 16:11:31 UTC # =================================================================== services: diff --git a/docker-compose.services.yml b/docker-compose.services.yml index cfbcf386..8017b787 100644 --- a/docker-compose.services.yml +++ b/docker-compose.services.yml @@ -2,7 +2,7 @@ # Docker Compose - Application Services # Generated from docker/versions.toml # Environment: development -# Generated: 2025-11-11 12:07:57 UTC +# Generated: 2025-11-11 16:11:31 UTC # =================================================================== services: diff --git a/docker-compose.yml b/docker-compose.yml index da3642e4..5b11ba54 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ # Docker Compose - Infrastructure Services # Generated from docker/versions.toml # Environment: development -# Generated: 2025-11-11 12:07:57 UTC +# Generated: 2025-11-11 16:11:31 UTC # =================================================================== services: @@ -111,6 +111,9 @@ services: start_period: 40s restart: unless-stopped + # =================================================================== + # Grafana + # =================================================================== grafana: image: grafana/grafana:${DOCKER_GRAFANA_VERSION:-11.3.0} container_name: meldestelle-grafana @@ -136,6 +139,42 @@ services: start_period: 40s restart: unless-stopped + # =================================================================== + # Zipkin + # =================================================================== + zipkin: + image: openzipkin/zipkin:2 + ports: + - "9411:9411" + networks: + - meldestelle-network + healthcheck: + test: ["CMD", "wget", "-q", "-O", "-", "http://localhost:9411/health"] + interval: 10s + timeout: 5s + retries: 3 + start_period: 10s + restart: unless-stopped + + # =================================================================== + # Consul + # =================================================================== + consul: + image: hashicorp/consul:1.15 + ports: + - "8500:8500" + - "8600:8600/udp" + command: agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0 + networks: + - meldestelle-network + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:8500/v1/status/leader" ] + interval: 10s + timeout: 5s + retries: 3 + start_period: 15s + restart: unless-stopped + # =================================================================== # Volumes # =================================================================== diff --git a/docker/build-args/clients.env b/docker/build-args/clients.env index c506be6e..7b687ec1 100644 --- a/docker/build-args/clients.env +++ b/docker/build-args/clients.env @@ -1,7 +1,7 @@ # =================================================================== # Clients Docker Build Arguments - dockerfiles/clients/* # Source: docker/versions.toml [categories.clients] -# Last updated: 2025-11-11 12:07:52 UTC +# Last updated: 2025-11-11 16:11:09 UTC # =================================================================== # --- Include Global Arguments --- diff --git a/docker/build-args/global.env b/docker/build-args/global.env index abe23a48..d6638019 100644 --- a/docker/build-args/global.env +++ b/docker/build-args/global.env @@ -1,7 +1,7 @@ # =================================================================== # Global Docker Build Arguments - Used by all categories # Source: docker/versions.toml -# Last updated: 2025-11-11 12:07:52 UTC +# Last updated: 2025-11-11 16:11:09 UTC # =================================================================== # --- Build Tools --- diff --git a/docker/build-args/infrastructure.env b/docker/build-args/infrastructure.env index c2627c2c..97342e7c 100644 --- a/docker/build-args/infrastructure.env +++ b/docker/build-args/infrastructure.env @@ -1,7 +1,7 @@ # =================================================================== # Infrastructure Docker Build Arguments - dockerfiles/infrastructure/* # Source: docker/versions.toml [categories.infrastructure] -# Last updated: 2025-11-11 12:07:52 UTC +# Last updated: 2025-11-11 16:11:09 UTC # =================================================================== # --- Include Global Arguments --- diff --git a/docker/build-args/services.env b/docker/build-args/services.env index 870633b8..d6cc4f80 100644 --- a/docker/build-args/services.env +++ b/docker/build-args/services.env @@ -1,7 +1,7 @@ # =================================================================== # Services Docker Build Arguments - dockerfiles/services/* # Source: docker/versions.toml [categories.services] -# Last updated: 2025-11-11 12:07:52 UTC +# Last updated: 2025-11-11 16:11:09 UTC # =================================================================== # --- Include Global Arguments --- diff --git a/infrastructure/README-INFRASTRUCTURE.md b/infrastructure/README-INFRASTRUCTURE.md index e446ce0e..0efae6e4 100644 --- a/infrastructure/README-INFRASTRUCTURE.md +++ b/infrastructure/README-INFRASTRUCTURE.md @@ -378,7 +378,7 @@ scrape_configs: - 'members-service:8082' - 'horses-service:8083' - 'events-service:8084' - - 'gateway:8080' + - 'gateway:8081' ``` ### Grafana Dashboards @@ -430,7 +430,7 @@ spec: - name: gateway image: meldestelle/api-gateway:latest ports: - - containerPort: 8080 + - containerPort: 8081 env: - name: REDIS_HOST value: "redis-service" @@ -535,10 +535,10 @@ kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group melde ```bash # Gateway Health Check -curl http://localhost:8080/actuator/health +curl http://localhost:8081/actuator/health # Route Configuration prüfen -curl http://localhost:8080/actuator/gateway/routes +curl http://localhost:8081/actuator/gateway/routes ``` ## Best Practices diff --git a/infrastructure/gateway/README-INFRA-GATEWAY.md b/infrastructure/gateway/README-INFRA-GATEWAY.md index 48b995b3..b6515d39 100644 --- a/infrastructure/gateway/README-INFRA-GATEWAY.md +++ b/infrastructure/gateway/README-INFRA-GATEWAY.md @@ -279,7 +279,7 @@ cd /home/stefan/WsMeldestelle/Meldestelle # Mit Docker docker build -t meldestelle/gateway:latest -f infrastructure/gateway/Dockerfile . -docker run -p 8080:8080 meldestelle/gateway:latest +docker run -p 8081:8081 meldestelle/gateway:latest ``` 📖 **Detaillierte Startup-Anleitung:** Siehe `GATEWAY-STARTUP-GUIDE.md` im Projekt-Root für vollständige Befehle und Fehlerbehebung. @@ -324,7 +324,7 @@ docker build -t meldestelle/gateway:1.0.0 \ # Container starten docker run -d \ --name gateway \ - -p 8080:8080 \ + -p 8081:8081 \ -e SPRING_PROFILES_ACTIVE=prod \ -e CONSUL_HOST=consul \ meldestelle/gateway:1.0.0 @@ -348,11 +348,11 @@ spec: - name: gateway image: meldestelle/gateway:1.0.0 ports: - - containerPort: 8080 + - containerPort: 8081 livenessProbe: httpGet: path: /actuator/health - port: 8080 + port: 8081 initialDelaySeconds: 90 periodSeconds: 30 ``` @@ -394,10 +394,10 @@ spec: docker logs gateway | grep "correlationId" # Circuit Breaker Status -curl http://localhost:8080/actuator/circuitbreakers +curl http://localhost:8081/actuator/circuitbreakers # Health Details -curl http://localhost:8080/actuator/health +curl http://localhost:8081/actuator/health ``` ## Zukünftige Erweiterungen diff --git a/infrastructure/gateway/src/main/resources/application-keycloak.yml b/infrastructure/gateway/src/main/resources/application-keycloak.yml index 4b05ccd5..53386a02 100644 --- a/infrastructure/gateway/src/main/resources/application-keycloak.yml +++ b/infrastructure/gateway/src/main/resources/application-keycloak.yml @@ -11,16 +11,16 @@ spring: resourceserver: jwt: # Issuer URI for JWT validation - Docker internal: keycloak:8080, External: localhost:8180 - issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8080/realms/meldestelle} + issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8180/realms/meldestelle} # JWK Set URI for fetching public keys to validate JWT signatures - jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs} + jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8180/realms/meldestelle/protocol/openid-connect/certs} # Keycloak-spezifische Konfiguration keycloak: # Internal Docker service name, external via port 8180 - server-url: ${KEYCLOAK_SERVER_URL:http://keycloak:8080} - issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8080/realms/meldestelle} - jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs} + server-url: ${KEYCLOAK_SERVER_URL:http://keycloak:8180} + issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8180/realms/meldestelle} + jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8180/realms/meldestelle/protocol/openid-connect/certs} realm: ${KEYCLOAK_REALM:meldestelle} resource: ${KEYCLOAK_CLIENT_ID:api-gateway} client-id: ${KEYCLOAK_CLIENT_ID:api-gateway} diff --git a/infrastructure/gateway/src/main/resources/application.yml b/infrastructure/gateway/src/main/resources/application.yml index 183d79af..5ac0d250 100644 --- a/infrastructure/gateway/src/main/resources/application.yml +++ b/infrastructure/gateway/src/main/resources/application.yml @@ -239,7 +239,7 @@ management: zipkin: tracing: endpoint: ${ZIPKIN_TRACING_ENDPOINT:http://localhost:9411/api/v2/spans} - # Reduziert Verbindungsfehler wenn Zipkin nicht verfügbar ist + # Reduziert Verbindungsfehler, wenn Zipkin nicht verfügbar ist connect-timeout: 1s read-timeout: 10s diff --git a/infrastructure/gateway/src/main/resources/openapi/documentation.yaml b/infrastructure/gateway/src/main/resources/openapi/documentation.yaml index b5dda41d..824af161 100644 --- a/infrastructure/gateway/src/main/resources/openapi/documentation.yaml +++ b/infrastructure/gateway/src/main/resources/openapi/documentation.yaml @@ -55,7 +55,7 @@ servers: description: Production Server - url: https://staging-api.meldestelle.at description: Staging Server - - url: http://localhost:8080 + - url: http://localhost:8081 description: Local Development Server tags: diff --git a/logs/gateway.log b/logs/gateway.log index f1969f1d..8fd7538d 100644 --- a/logs/gateway.log +++ b/logs/gateway.log @@ -190,3 +190,757 @@ Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) ... 45 common frames omitted +2025-11-11 17:24:21.517 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final +2025-11-11 17:24:21.541 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 60081 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle) +2025-11-11 17:24:21.542 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11 +2025-11-11 17:24:21.542 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev" +2025-11-11 17:24:22.681 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915 +2025-11-11 17:24:24.774 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After] +2025-11-11 17:24:24.774 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before] +2025-11-11 17:24:24.774 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight] +2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService] +2025-11-11 17:24:25.480 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator' +2025-11-11 17:24:26.114 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath. +2025-11-11 17:24:26.202 [catalogWatchTaskScheduler-1] ERROR [] o.s.c.c.discovery.ConsulCatalogWatch - Error watching Consul CatalogServices +com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt + at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:83) + at com.ecwid.consul.transport.AbstractHttpTransport.makeGetRequest(AbstractHttpTransport.java:36) + at com.ecwid.consul.v1.ConsulRawClient.makeGetRequest(ConsulRawClient.java:139) + at com.ecwid.consul.v1.catalog.CatalogConsulClient.getCatalogServices(CatalogConsulClient.java:143) + at com.ecwid.consul.v1.ConsulClient.getCatalogServices(ConsulClient.java:400) + at org.springframework.cloud.consul.discovery.ConsulCatalogWatch.catalogServicesWatch(ConsulCatalogWatch.java:131) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt + at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) + at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) + at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) + at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) + at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) + at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) + at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) + at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140) + at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:70) + ... 12 common frames omitted +Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:751) + at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) + at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) + ... 24 common frames omitted +2025-11-11 17:24:26.221 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http) +2025-11-11 17:24:26.224 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-3272ca20-9767-47d5-907c-f731f4d8125e', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null} +2025-11-11 17:24:26.233 [main] ERROR [] o.s.c.c.s.ConsulServiceRegistry - Error registering service with consul: NewService{id='meldestelle-8080-3272ca20-9767-47d5-907c-f731f4d8125e', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null} +com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt + at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:83) + at com.ecwid.consul.transport.AbstractHttpTransport.makePutRequest(AbstractHttpTransport.java:49) + at com.ecwid.consul.v1.ConsulRawClient.makePutRequest(ConsulRawClient.java:163) + at com.ecwid.consul.v1.agent.AgentConsulClient.agentServiceRegister(AgentConsulClient.java:273) + at com.ecwid.consul.v1.ConsulClient.agentServiceRegister(ConsulClient.java:310) + at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:67) + at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:43) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:264) + at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.register(ConsulAutoServiceRegistration.java:80) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:156) + at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.start(ConsulAutoServiceRegistration.java:70) + at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationListener.onApplicationEvent(ConsulAutoServiceRegistrationListener.java:60) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) + at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57) + at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:41) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:405) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:394) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:586) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:364) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:310) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1006) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:630) + at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) + at at.mocode.infrastructure.gateway.GatewayApplicationKt.main(GatewayApplication.kt:13) +Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt + at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) + at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) + at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) + at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) + at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) + at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) + at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) + at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140) + at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:70) + ... 33 common frames omitted +Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:751) + at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) + at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) + ... 45 common frames omitted +2025-11-11 17:24:28.246 [main] WARN [] o.s.b.w.r.c.AnnotationConfigReactiveWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' +2025-11-11 17:24:28.270 [main] INFO [] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-11-11 17:24:28.284 [main] ERROR [] o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:408) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:394) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:586) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:364) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:310) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1006) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:630) + at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) + at at.mocode.infrastructure.gateway.GatewayApplicationKt.main(GatewayApplication.kt:13) +Caused by: com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt + at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:83) + at com.ecwid.consul.transport.AbstractHttpTransport.makePutRequest(AbstractHttpTransport.java:49) + at com.ecwid.consul.v1.ConsulRawClient.makePutRequest(ConsulRawClient.java:163) + at com.ecwid.consul.v1.agent.AgentConsulClient.agentServiceRegister(AgentConsulClient.java:273) + at com.ecwid.consul.v1.ConsulClient.agentServiceRegister(ConsulClient.java:310) + at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:67) + at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:43) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:264) + at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.register(ConsulAutoServiceRegistration.java:80) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:156) + at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.start(ConsulAutoServiceRegistration.java:70) + at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationListener.onApplicationEvent(ConsulAutoServiceRegistrationListener.java:60) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) + at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57) + at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:41) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:405) + ... 14 common frames omitted +Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt + at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) + at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) + at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) + at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) + at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) + at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) + at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) + at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165) + at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140) + at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:70) + ... 33 common frames omitted +Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:751) + at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) + at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) + ... 45 common frames omitted +2025-11-11 17:41:20.785 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final +2025-11-11 17:41:20.807 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 66761 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle) +2025-11-11 17:41:20.807 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11 +2025-11-11 17:41:20.807 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev" +2025-11-11 17:41:21.890 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915 +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr] +2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight] +2025-11-11 17:41:23.801 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService] +2025-11-11 17:41:24.395 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator' +2025-11-11 17:41:25.036 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath. +2025-11-11 17:41:25.145 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http) +2025-11-11 17:41:25.148 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-4eca3f58-3081-422e-8d6f-88fd29eca82b', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null} +2025-11-11 17:41:25.293 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Started GatewayApplicationKt in 4.771 seconds (process running for 5.315) +2025-11-11 17:44:40.693 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /[0:0:0:0:0:0:0:1]:60764 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.775 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49250 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.781 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49256 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.786 [parallel-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49272 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.790 [parallel-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49284 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.795 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49300 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.800 [parallel-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49312 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.804 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49316 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.809 [parallel-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49328 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.814 [parallel-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49336 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.818 [parallel-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49340 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.822 [parallel-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49342 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.827 [parallel-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49352 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.832 [parallel-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49366 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.835 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49368 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.839 [parallel-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49370 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.843 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49372 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.848 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49382 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.851 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49390 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.854 [parallel-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49404 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.857 [parallel-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49408 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.861 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49412 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.865 [parallel-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49414 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.868 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49424 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.871 [parallel-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49434 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.874 [parallel-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49448 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.891 [reactor-http-epoll-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 503 SERVICE_UNAVAILABLE +ResponseTime: 17ms +2025-11-11 17:44:40.894 [reactor-http-epoll-16] WARN [] i.m.p.PrometheusMeterRegistry - The meter (MeterId{name='gateway_errors_total', tags=[tag(application=meldestelle),tag(component=infrastructure),tag(environment=dev),tag(error_type=server_error),tag(gateway=api-gateway),tag(instance=meldestelle-8080-7c278a17-e0ca-4d8a-ac26-1dbd531a9168),tag(method=GET),tag(path=/),tag(service=gateway),tag(status=503),tag(status_series=5xx)]}) registration has failed: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter named 'gateway_errors' containing tag keys [application, component, environment, gateway, instance, service]. The meter you are attempting to register has keys [application, component, environment, error_type, gateway, instance, method, path, service, status, status_series]. Note that subsequent logs will be logged at debug level. +2025-11-11 17:44:40.950 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49464 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:40.952 [reactor-http-epoll-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 503 SERVICE_UNAVAILABLE +ResponseTime: 2ms +2025-11-11 17:44:41.058 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49478 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.060 [reactor-http-epoll-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 503 SERVICE_UNAVAILABLE +ResponseTime: 3ms +2025-11-11 17:44:41.265 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:38924 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.267 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 503 SERVICE_UNAVAILABLE +ResponseTime: 2ms +2025-11-11 17:44:41.275 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 407ms +2025-11-11 17:44:41.275 [reactor-http-epoll-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 404ms +2025-11-11 17:44:41.276 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 411ms +2025-11-11 17:44:41.277 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 416ms +2025-11-11 17:44:41.278 [reactor-http-epoll-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 421ms +2025-11-11 17:44:41.279 [reactor-http-epoll-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 425ms +2025-11-11 17:44:41.280 [reactor-http-epoll-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 429ms +2025-11-11 17:44:41.282 [reactor-http-epoll-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 434ms +2025-11-11 17:44:41.283 [reactor-http-epoll-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 440ms +2025-11-11 17:44:41.284 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 445ms +2025-11-11 17:44:41.285 [reactor-http-epoll-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 450ms +2025-11-11 17:44:41.287 [reactor-http-epoll-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 455ms +2025-11-11 17:44:41.288 [reactor-http-epoll-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 461ms +2025-11-11 17:44:41.289 [reactor-http-epoll-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 467ms +2025-11-11 17:44:41.291 [reactor-http-epoll-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 473ms +2025-11-11 17:44:41.292 [reactor-http-epoll-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 478ms +2025-11-11 17:44:41.294 [reactor-http-epoll-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 485ms +2025-11-11 17:44:41.295 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 491ms +2025-11-11 17:44:41.297 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 497ms +2025-11-11 17:44:41.298 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 503ms +2025-11-11 17:44:41.300 [reactor-http-epoll-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 510ms +2025-11-11 17:44:41.303 [reactor-http-epoll-10] WARN [] r.n.http.client.HttpClientConnect - [0533bbdd-1, L:/127.0.0.1:49284 - R:localhost/127.0.0.1:8080] The connection observed an error +io.netty.handler.codec.http.TooLongHttpHeaderException: HTTP header is larger than 8192 bytes. + at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.newException(HttpObjectDecoder.java:1224) + at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.parse(HttpObjectDecoder.java:1188) + at io.netty.handler.codec.http.HttpObjectDecoder.readHeaders(HttpObjectDecoder.java:768) + at io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:382) + at io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:320) + at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530) + at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469) + at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) + at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799) + at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:425) + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) + at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-11-11 17:44:41.306 [reactor-http-epoll-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 503 SERVICE_UNAVAILABLE +ResponseTime: 521ms +2025-11-11 17:44:41.361 [parallel-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:38924 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.363 [parallel-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49434 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.366 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49424 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.368 [parallel-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49414 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.370 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49412 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.372 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49408 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.375 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49404 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.378 [parallel-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49390 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.380 [parallel-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49382 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.382 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49372 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.386 [parallel-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49370 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.388 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49368 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.391 [parallel-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49366 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.394 [parallel-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49352 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.396 [parallel-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49342 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.399 [parallel-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49340 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.401 [parallel-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49336 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.404 [parallel-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49328 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.405 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49316 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.408 [parallel-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49312 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.410 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:49300 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.413 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:38930 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.416 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:38936 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.416 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 429 TOO_MANY_REQUESTS +ResponseTime: 0ms +2025-11-11 17:44:41.419 [reactor-http-epoll-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 6ms +2025-11-11 17:44:41.419 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 9ms +2025-11-11 17:44:41.420 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 12ms +2025-11-11 17:44:41.421 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 16ms +2025-11-11 17:44:41.422 [reactor-http-epoll-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 18ms +2025-11-11 17:44:41.424 [reactor-http-epoll-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 23ms +2025-11-11 17:44:41.425 [reactor-http-epoll-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 26ms +2025-11-11 17:44:41.426 [reactor-http-epoll-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 30ms +2025-11-11 17:44:41.427 [reactor-http-epoll-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 33ms +2025-11-11 17:44:41.428 [reactor-http-epoll-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 37ms +2025-11-11 17:44:41.429 [reactor-http-epoll-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 41ms +2025-11-11 17:44:41.430 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 44ms +2025-11-11 17:44:41.432 [reactor-http-epoll-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 50ms +2025-11-11 17:44:41.433 [reactor-http-epoll-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 53ms +2025-11-11 17:44:41.434 [reactor-http-epoll-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 56ms +2025-11-11 17:44:41.435 [reactor-http-epoll-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 60ms +2025-11-11 17:44:41.436 [reactor-http-epoll-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 64ms +2025-11-11 17:44:41.438 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 67ms +2025-11-11 17:44:41.439 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 71ms +2025-11-11 17:44:41.441 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 75ms +2025-11-11 17:44:41.441 [reactor-http-epoll-13] WARN [] r.n.http.client.HttpClientConnect - [5e3549f4-2, L:/127.0.0.1:49424 - R:localhost/127.0.0.1:8080] The connection observed an error +io.netty.handler.codec.http.TooLongHttpHeaderException: HTTP header is larger than 8192 bytes. + at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.newException(HttpObjectDecoder.java:1224) + at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.parse(HttpObjectDecoder.java:1188) + at io.netty.handler.codec.http.HttpObjectDecoder.readHeaders(HttpObjectDecoder.java:768) + at io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:382) + at io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:320) + at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530) + at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469) + at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) + at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799) + at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:425) + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) + at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-11-11 17:44:41.443 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 503 SERVICE_UNAVAILABLE +ResponseTime: 80ms +2025-11-11 17:44:41.497 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64] +Method: GET +URI: http://localhost:8080/ +RemoteAddress: /127.0.0.1:38936 +UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 +2025-11-11 17:44:41.497 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 429 TOO_MANY_REQUESTS +ResponseTime: 0ms +2025-11-11 17:44:41.500 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 139ms +2025-11-11 17:44:41.501 [reactor-http-epoll-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 720ms +2025-11-11 17:44:41.502 [reactor-http-epoll-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 727ms +2025-11-11 17:44:41.502 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64] +Status: 200 OK +ResponseTime: 809ms +2025-11-11 17:54:36.819 [SpringApplicationShutdownHook] INFO [] o.s.b.w.e.netty.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-11-11 17:54:36.821 [netty-shutdown] INFO [] o.s.b.w.e.netty.GracefulShutdown - Graceful shutdown complete +2025-11-11 17:54:38.831 [SpringApplicationShutdownHook] INFO [] o.s.c.c.s.ConsulServiceRegistry - Deregistering service with consul: meldestelle-8080-4eca3f58-3081-422e-8d6f-88fd29eca82b +2025-11-11 17:56:49.328 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final +2025-11-11 17:56:49.354 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 77080 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle) +2025-11-11 17:56:49.355 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11 +2025-11-11 17:56:49.355 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev" +2025-11-11 17:56:50.482 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915 +2025-11-11 17:56:52.459 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight] +2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService] +2025-11-11 17:56:53.117 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator' +2025-11-11 17:56:53.677 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath. +2025-11-11 17:56:53.786 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http) +2025-11-11 17:56:53.788 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-53c3b7cb-cff4-4c60-a423-ee7f507acd3b', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null} +2025-11-11 17:56:53.925 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Started GatewayApplicationKt in 4.9 seconds (process running for 5.483) +2025-11-11 17:57:12.800 [SpringApplicationShutdownHook] INFO [] o.s.b.w.e.netty.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-11-11 17:57:12.802 [netty-shutdown] INFO [] o.s.b.w.e.netty.GracefulShutdown - Graceful shutdown complete +2025-11-11 17:57:14.812 [SpringApplicationShutdownHook] INFO [] o.s.c.c.s.ConsulServiceRegistry - Deregistering service with consul: meldestelle-8080-53c3b7cb-cff4-4c60-a423-ee7f507acd3b +2025-11-11 18:13:55.110 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final +2025-11-11 18:13:55.137 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 91093 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle) +2025-11-11 18:13:55.138 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11 +2025-11-11 18:13:55.138 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev" +2025-11-11 18:13:56.308 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915 +2025-11-11 18:13:58.251 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After] +2025-11-11 18:13:58.251 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before] +2025-11-11 18:13:58.251 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight] +2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService] +2025-11-11 18:13:58.898 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator' +2025-11-11 18:13:59.469 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath. +2025-11-11 18:13:59.562 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http) +2025-11-11 18:13:59.564 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-d4055d7b-f605-4fde-a992-8b4f3adb8a86', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null} +2025-11-11 18:13:59.707 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Started GatewayApplicationKt in 4.898 seconds (process running for 5.441) +2025-11-11 18:14:46.705 [SpringApplicationShutdownHook] INFO [] o.s.b.w.e.netty.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete +2025-11-11 18:14:46.706 [netty-shutdown] INFO [] o.s.b.w.e.netty.GracefulShutdown - Graceful shutdown complete +2025-11-11 18:14:48.719 [SpringApplicationShutdownHook] INFO [] o.s.c.c.s.ConsulServiceRegistry - Deregistering service with consul: meldestelle-8080-d4055d7b-f605-4fde-a992-8b4f3adb8a86 diff --git a/scripts/test/integration-test.sh b/scripts/test/integration-test.sh index 617806b7..f810b552 100755 --- a/scripts/test/integration-test.sh +++ b/scripts/test/integration-test.sh @@ -38,8 +38,8 @@ readonly SERVICES_CONFIG=( "postgres:5432:PostgreSQL:pg_isready -U meldestelle" "redis:6379:Redis:redis-cli ping" "consul:8500:Consul:http://localhost:8500/v1/status/leader" - "api-gateway:8081:API Gateway:http://localhost:8082/actuator/health" - "ping-service:8082Ping Service:http://localhost:8082actuator/health" + "api-gateway:8081:API Gateway:http://localhost:8082actuator/health" + "ping-service:8082ing Service:http://localhost:8082ctuator/health" ) # Integration with central Docker version management @@ -169,11 +169,11 @@ test_application_services() { # Test API Gateway log_info "Testing API Gateway..." - wait_for_service_with_retry "API Gateway" "http_health_check http://localhost:8082/actuator/health" || return 1 + wait_for_service_with_retry "API Gateway" "http_health_check http://localhost:8082actuator/health" || return 1 # Test Ping Service log_info "Testing Ping Service..." - wait_for_service_with_retry "Ping Service" "http_health_check http://localhost:8082actuator/health" || return 1 + wait_for_service_with_retry "Ping Service" "http_health_check http://localhost:8082ctuator/health" || return 1 log_success "All application services are healthy!" } @@ -211,7 +211,7 @@ test_network_connectivity() { log_info "Testing service-to-service connectivity..." # Test API Gateway can reach backend services - if docker exec meldestelle-api-gateway curl -f -s --max-time 5 http://ping-service:8082actuator/health > /dev/null 2>&1; then + if docker exec meldestelle-api-gateway curl -f -s --max-time 5 http://ping-service:8082ctuator/health > /dev/null 2>&1; then log_success "API Gateway can reach Ping Service" else log_error "API Gateway cannot reach Ping Service" diff --git a/services/masterdata/README-MASTERDATA.md b/services/masterdata/README-MASTERDATA.md index f83e2f77..0d28ba64 100644 --- a/services/masterdata/README-MASTERDATA.md +++ b/services/masterdata/README-MASTERDATA.md @@ -241,7 +241,7 @@ CREATE TABLE platz ( #### Land erstellen ```bash -curl -X POST http://localhost:8080/api/masterdata/countries \ +curl -X POST http://localhost:8081/api/masterdata/countries \ -H "Content-Type: application/json" \ -d '{ "isoAlpha2Code": "AT", @@ -257,13 +257,13 @@ curl -X POST http://localhost:8080/api/masterdata/countries \ #### Altersklassen für 16-jährigen Dressurreiter abrufen ```bash -curl "http://localhost:8080/api/masterdata/altersklassen/age/16?sparte=DRESSUR" +curl "http://localhost:8081/api/masterdata/altersklassen/age/16?sparte=DRESSUR" ``` #### Geeignete Dressurplätze finden ```bash -curl "http://localhost:8080/api/masterdata/plaetze/suitable?typ=DRESSURPLATZ&dimension=20x60m" +curl "http://localhost:8081/api/masterdata/plaetze/suitable?typ=DRESSURPLATZ&dimension=20x60m" ``` ## Konfiguration