Files
attack-defense-platform/panel/team_footprint.sh
T
Cyrene 0a56906b18 test(team-delete): verify DELETE /api/teams/{idx} tears a team down completely
Created a scratch team 5, booted all 16 of its containers, snapshotted its
footprint, deleted it via the API, and re-snapshotted:

  before: 16 containers, 1 sidecar, team5_default network, teams/team5 dir
  after : 0 containers, 0 sidecars, network gone, dir GONE, 34 UFW ports
          closed, Traefik domain removed, 0 score rows
  took 102s; the other 4 teams (64 containers, receivers active) were
  untouched and still at 64/64 SLA.

Adds panel/team_footprint.sh (before/after proof of a delete),
team_health.sh, watch_load.sh.
2026-09-26 15:48:07 +08:00

16 lines
1.0 KiB
Bash

#!/usr/bin/env bash
# Team footprint snapshot: everything a team owns, so a delete can be proven
# rather than assumed. Usage: ./team_footprint.sh <idx> [label]
set -uo pipefail
IDX=${1:-5}
LABEL=${2:-team$IDX}
echo "=== $LABEL ($IDX) ==="
echo " containers : $(docker ps --format '{{.Names}}' | grep -c "_container_team${IDX}\$")"
echo " sidecars : $(docker ps --format '{{.Names}}' | grep -c "team${IDX}-.*-1\$")"
echo " network : $(docker network ls --format '{{.Name}}' | grep -c "^team${IDX}_default\$")"
echo " volumes : $(docker volume ls --format '{{.Name}}' | grep -c "^team${IDX}")"
echo " dir : $([ -d "/opt/gemastik18-final/teams/team${IDX}" ] && echo present || echo GONE)"
echo " recv unit : $(systemctl is-active "gemastik-receiver-team${IDX}.service" 2>/dev/null || echo GONE)"
echo " ufw rules : $(ufw status | grep -cE " 3${IDX}0[0-9]{2}/tcp| 3${IDX}[1-9][0-9]{2}/tcp")"
echo " traefik : $(grep -c "team${IDX}" /data/coolify/proxy/dynamic/attackdefense-teams.yaml 2>/dev/null || echo 0)"