FDN-12: portbereiche an reale belegung angleichen, dms auf 8600-8699
Auf 192.168.1.131 belegen Core-Dienste 8098-8102; der bisherige DMS-Bereich 8100-8199 haette kollidiert. Register erlaubt mehrere Bereiche je Modul und prueft Ueberschneidungen zwischen Modulen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f028056b61
commit
459b280d08
8 files changed
+76
-27
No files matched your search
+11
-6
@@ -1,8 +1,13 @@
|
||||
# module first last (Standard-Ports der Binaries, Betriebsstufe 1: alle Module auf einem Host)
|
||||
# Ein Modul darf mehrere Zeilen haben; Bereiche verschiedener Module duerfen sich nicht ueberschneiden.
|
||||
# core/archive entsprechen den auf dem Referenz-Host (192.168.1.131) real belegten Ports (Stand 2026-09-18).
|
||||
core 8080 8089
|
||||
archive 8090 8099
|
||||
dms 8100 8199
|
||||
mail 8200 8299
|
||||
workflow 8300 8399
|
||||
ai 8400 8499
|
||||
connect 8500 8599
|
||||
core 8093 8094
|
||||
core 8098 8109
|
||||
archive 8090 8092
|
||||
archive 8095 8097
|
||||
dms 8600 8699
|
||||
mail 8700 8799
|
||||
workflow 8800 8899
|
||||
ai 8900 8999
|
||||
connect 9500 9599
|
||||
|
+3
-3
@@ -19,10 +19,10 @@ make install # baut App und Worker
|
||||
make run # startet beide (Strg+C beendet beide)
|
||||
```
|
||||
|
||||
App läuft danach auf `:8100` (überschreibbar über
|
||||
App läuft danach auf `:8600` (überschreibbar über
|
||||
`NEXARCH_DMS_APP_LISTEN_ADDR`), `GET /healthz` liefert den Status. Der Worker
|
||||
liefert Metriken auf `:8101` (`NEXARCH_DMS_WORKER_METRICS_ADDR`). Portbereich des
|
||||
DMS laut `deploy/ports.tsv`: 8100–8199; Prüfung: `scripts/check-port-defaults.sh`.
|
||||
liefert Metriken auf `:8601` (`NEXARCH_DMS_WORKER_METRICS_ADDR`). Portbereich des
|
||||
DMS laut `deploy/ports.tsv`: 8600–8699; Prüfung: `scripts/check-port-defaults.sh`.
|
||||
|
||||
## Struktur
|
||||
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ import (
|
||||
func main() {
|
||||
addr := os.Getenv("NEXARCH_DMS_APP_LISTEN_ADDR")
|
||||
if addr == "" {
|
||||
addr = ":8100"
|
||||
addr = ":8600"
|
||||
}
|
||||
|
||||
logger := logging.NewDefault()
|
||||
|
||||
@@ -34,7 +34,7 @@ func main() {
|
||||
|
||||
metricsAddr := os.Getenv("NEXARCH_DMS_WORKER_METRICS_ADDR")
|
||||
if metricsAddr == "" {
|
||||
metricsAddr = ":8101"
|
||||
metricsAddr = ":8601"
|
||||
}
|
||||
go func() {
|
||||
if err := http.ListenAndServe(metricsAddr, metricsReg.Handler()); err != nil {
|
||||
|
||||
@@ -6,7 +6,7 @@ Session-Verlauf: DMS als Unterordner statt eigenes Gitea-Repo).
|
||||
|
||||
## Struktur
|
||||
|
||||
- `cmd/app` — Anfrage-Dienst (HTTP, Port 8100 per Default)
|
||||
- `cmd/app` — Anfrage-Dienst (HTTP, Port 8600 per Default)
|
||||
- `cmd/worker` — Hintergrund-Dienst (getrennter Prozess)
|
||||
- `internal/shared` — gemeinsam genutzter Code
|
||||
- `go.mod` — eigenes Modul `gitea.perlbach24.de/scripte/nexarch/dms`,
|
||||
|
||||
@@ -4,12 +4,14 @@ Stand: 2026-09-18. Lokal ausgeführt (reines Bash, kein Testhost nötig). Basis:
|
||||
|
||||
## Umsetzung
|
||||
|
||||
- `deploy/ports.tsv`: Portbereich je Modul (core 8080–8089, archive 8090–8099, dms 8100–8199, mail 8200–8299,
|
||||
workflow 8300–8399, ai 8400–8499, connect 8500–8599).
|
||||
- `deploy/ports.tsv`: Portbereiche je Modul (mehrere Zeilen je Modul erlaubt; Bereiche verschiedener Module dürfen sich
|
||||
nicht überschneiden, das prüft das Skript). core/archive spiegeln die auf dem Referenz-Host 192.168.1.131 real
|
||||
belegten Ports (core 8080–8089, 8093–8094, 8098–8109; archive 8090–8092, 8095–8097); dms 8600–8699, mail 8700–8799,
|
||||
workflow 8800–8899, ai 8900–8999, connect 9500–9599.
|
||||
- `scripts/check-port-defaults.sh [ROOT]`: liest alle `":NNNN"`-Literale aus `cmd/**/main.go` (Wurzel-`cmd/` = core,
|
||||
sonst `<modul>/cmd/`), meldet Ports außerhalb des Modulbereichs, doppelt vergebene Ports über Dateien hinweg und
|
||||
Module ohne Registereintrag. Exit 1 bei jedem Befund.
|
||||
- DMS-Defaults verschoben: App `:8090` → `:8100`, Worker-Metriken `:8091` → `:8101`; `dms/README.md` und
|
||||
- DMS-Defaults verschoben: App `:8090` → `:8600`, Worker-Metriken `:8091` → `:8601`; `dms/README.md` und
|
||||
FDN-01-Protokoll angepasst.
|
||||
- Archive-Defaults bleiben unverändert (eigenes Board).
|
||||
|
||||
@@ -17,7 +19,7 @@ Stand: 2026-09-18. Lokal ausgeführt (reines Bash, kein Testhost nötig). Basis:
|
||||
|
||||
| # | Prüfung | Ergebnis |
|
||||
|---|---------|----------|
|
||||
| 1 | Skript gegen echten Baum aus Archive-Quellen (Branch `ana-01`), Core-`cmd/` und DMS-Stand vor der Änderung | meldet `dms/cmd/app` 8090 doppelt (scrub-metrics) und `dms/cmd/worker` 8091 doppelt (restoretest-metrics), je auch außerhalb 8100–8199; Exit 1 |
|
||||
| 1 | Skript gegen echten Baum aus Archive-Quellen (Branch `ana-01`), Core-`cmd/` und DMS-Stand vor der Änderung | meldet `dms/cmd/app` 8090 doppelt (scrub-metrics) und `dms/cmd/worker` 8091 doppelt (restoretest-metrics), je auch außerhalb des DMS-Bereichs; Exit 1 |
|
||||
| 2 | Skript nach der Änderung gegen denselben Baum mit neuem DMS-Stand; sowie gegen den Repo-Stand | `port-defaults ok`, Exit 0 |
|
||||
| 3 | `scripts/check-port-defaults_test.sh` mit synthetischem Baum: sauberer Baum besteht, Duplikat, Bereichsverletzung und unbekanntes Modul werden erkannt | bestanden |
|
||||
|
||||
@@ -30,3 +32,11 @@ Stand: 2026-09-18. Lokal ausgeführt (reines Bash, kein Testhost nötig). Basis:
|
||||
erst auf dem zusammengeführten Stand ab.
|
||||
- Folgekacheln (bewusst nicht Teil von FDN-12): Datenbank/Schema und Migrationstabelle je Modul, Routenpräfix je Modul,
|
||||
Preflight im Installationsskript.
|
||||
|
||||
## Korrektur (2026-09-18, gefunden durch FDN-15-Preflight auf 192.168.1.131)
|
||||
|
||||
Die erste Fassung wies DMS 8100–8199 zu, abgeleitet nur aus den Code-Defaults. Auf dem Referenz-Host laufen aber
|
||||
Core-Dienste (per Umgebungsdatei konfiguriert) auf 8093, 8094, 8098–8102 (u. a. `rbac-admin-api` :8100,
|
||||
`notifyprefs-api` :8101, `kek-api` :8102). Damit hätte der DMS-Default kollidiert. Register korrigiert (DMS 8600–8699,
|
||||
Core/Archive-Bereiche nach der realen Belegung), Überschneidungsprüfung zwischen Modulen im Skript ergänzt. Nicht im
|
||||
Register: Entwicklungs-/Fake-Dienste auf 8293–8296 (Bereich 8200–8299 bleibt bewusst frei).
|
||||
@@ -6,28 +6,52 @@ root="${1:-.}"
|
||||
registry="$root/deploy/ports.tsv"
|
||||
[ -f "$registry" ] || { echo "register fehlt: $registry" >&2; exit 2; }
|
||||
|
||||
declare -A first last owner
|
||||
declare -A owner
|
||||
mods=(); los=(); his=()
|
||||
while IFS=$'\t' read -r mod lo hi; do
|
||||
case "$mod" in ''|'#'*) continue ;; esac
|
||||
first[$mod]=$lo
|
||||
last[$mod]=$hi
|
||||
mods+=("$mod"); los+=("$lo"); his+=("$hi")
|
||||
done < "$registry"
|
||||
|
||||
fail=0
|
||||
for i in "${!mods[@]}"; do
|
||||
for j in "${!mods[@]}"; do
|
||||
[ "$i" -lt "$j" ] && [ "${mods[$i]}" != "${mods[$j]}" ] || continue
|
||||
if [ "${los[$i]}" -le "${his[$j]}" ] && [ "${los[$j]}" -le "${his[$i]}" ]; then
|
||||
echo "FEHLER register: ${mods[$i]} ${los[$i]}-${his[$i]} ueberschneidet ${mods[$j]} ${los[$j]}-${his[$j]}" >&2
|
||||
fail=1
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
in_range() {
|
||||
local i
|
||||
for i in "${!mods[@]}"; do
|
||||
[ "${mods[$i]}" = "$1" ] && [ "$2" -ge "${los[$i]}" ] && [ "$2" -le "${his[$i]}" ] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
module_known() {
|
||||
local m
|
||||
for m in "${mods[@]}"; do [ "$m" = "$1" ] && return 0; done
|
||||
return 1
|
||||
}
|
||||
|
||||
while IFS= read -r file; do
|
||||
rel="${file#"$root"/}"
|
||||
case "$rel" in
|
||||
cmd/*) mod=core ;;
|
||||
*/cmd/*) mod="${rel%%/*}" ;;
|
||||
esac
|
||||
if [ -z "${first[$mod]:-}" ]; then
|
||||
if ! module_known "$mod"; then
|
||||
echo "FEHLER $rel: modul \"$mod\" nicht im register" >&2
|
||||
fail=1
|
||||
continue
|
||||
fi
|
||||
for port in $(grep -oE '":[0-9]{2,5}"' "$file" | tr -d '":' | sort -u); do
|
||||
if [ "$port" -lt "${first[$mod]}" ] || [ "$port" -gt "${last[$mod]}" ]; then
|
||||
echo "FEHLER $rel: port $port ausserhalb ${first[$mod]}-${last[$mod]} ($mod)" >&2
|
||||
if ! in_range "$mod" "$port"; then
|
||||
echo "FEHLER $rel: port $port ausserhalb der Bereiche von $mod (deploy/ports.tsv)" >&2
|
||||
fail=1
|
||||
fi
|
||||
if [ -n "${owner[$port]:-}" ] && [ "${owner[$port]}" != "$rel" ]; then
|
||||
|
||||
@@ -17,20 +17,30 @@ put() { mkdir -p "$(dirname "$1")"; printf 'package main\nvar addr = "%s"\n' "$2
|
||||
expect_fail() { if "$check" "$1" >/dev/null 2>"$tmp/err"; then echo "FAIL: $2 nicht erkannt" >&2; exit 1; fi; grep -q "$3" "$tmp/err" || { echo "FAIL: $2: meldung fehlt ($3)" >&2; cat "$tmp/err" >&2; exit 1; }; }
|
||||
|
||||
ok="$(mk ok)"
|
||||
put "$ok/dms/cmd/app/main.go" ":8100"
|
||||
put "$ok/dms/cmd/worker/main.go" ":8101"
|
||||
put "$ok/dms/cmd/app/main.go" ":8600"
|
||||
put "$ok/dms/cmd/worker/main.go" ":8601"
|
||||
put "$ok/archive/cmd/scrub-metrics/main.go" ":8090"
|
||||
put "$ok/cmd/auditlog-devserver/main.go" ":8083"
|
||||
"$check" "$ok" >/dev/null || { echo "FAIL: sauberer baum abgelehnt" >&2; exit 1; }
|
||||
|
||||
dup="$(mk dup)"
|
||||
put "$dup/dms/cmd/app/main.go" ":8100"
|
||||
put "$dup/dms/cmd/worker/main.go" ":8100"
|
||||
put "$dup/dms/cmd/app/main.go" ":8600"
|
||||
put "$dup/dms/cmd/worker/main.go" ":8600"
|
||||
expect_fail "$dup" "duplikat" "doppelt vergeben"
|
||||
|
||||
range="$(mk range)"
|
||||
put "$range/dms/cmd/app/main.go" ":8090"
|
||||
expect_fail "$range" "bereichsverletzung" "ausserhalb 8100-8199"
|
||||
expect_fail "$range" "bereichsverletzung" "ausserhalb der Bereiche von dms"
|
||||
|
||||
overlap="$(mk overlap)"
|
||||
printf 'dms\t8600\t8699\nmail\t8650\t8750\n' >> "$overlap/deploy/ports.tsv"
|
||||
expect_fail "$overlap" "registerueberschneidung" "ueberschneidet"
|
||||
|
||||
# Ein Modul mit mehreren Bereichen: beide Bereiche gueltig.
|
||||
multi="$(mk multi)"
|
||||
put "$multi/cmd/a/main.go" ":8083"
|
||||
put "$multi/cmd/b/main.go" ":8093"
|
||||
"$check" "$multi" >/dev/null || { echo "FAIL: mehrere bereiche je modul abgelehnt" >&2; exit 1; }
|
||||
|
||||
unk="$(mk unk)"
|
||||
put "$unk/foo/cmd/app/main.go" ":9000"
|
||||
|
||||
Reference in new issue
Block a user