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>
67 lines
1.8 KiB
Bash
Executable File
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"
|