Files
nexarch/scripts/check-port-defaults.sh
patrickandClaude Sonnet 5 459b280d08 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>
2026-09-18 22:04:55 +02:00

67 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Prueft die Standard-Ports (":NNNN"-Literale) in cmd/**/main.go gegen deploy/ports.tsv.
set -euo pipefail
root="${1:-.}"
registry="$root/deploy/ports.tsv"
[ -f "$registry" ] || { echo "register fehlt: $registry" >&2; exit 2; }
declare -A owner
mods=(); los=(); his=()
while IFS=$'\t' read -r mod lo hi; do
case "$mod" in ''|'#'*) continue ;; esac
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 ! 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 ! 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
echo "FEHLER $rel: port $port doppelt vergeben (auch ${owner[$port]})" >&2
fail=1
fi
owner[$port]="$rel"
done
done < <(find "$root" \( -path '*/cmd/*/main.go' -o -path "$root/cmd/*/main.go" \) -not -path '*/node_modules/*' | sort)
[ "$fail" -eq 0 ] && echo "port-defaults ok"
exit "$fail"