#!/usr/bin/env bash
source "$(dirname "${BASH_SOURCE[0]}")/lib-core.sh"
check_root
load_env
ensure_dirs
CMD="${1:-status}"
action_status() {
log_info "Проверка состояния системы..."
# Services
local errors=0
for svc in wg-quick@wg0 wg-obfuscator phobos-http; do
if systemctl is-active --quiet "$svc"; then
log_success "Служба $svc активна"
else
log_error "Служба $svc ОСТАНОВЛЕНА"
((errors++))
fi
done
# Ports
if ss -ulpn | grep -q ":$OBFUSCATOR_PORT "; then
log_success "Порт Obfuscator ($OBFUSCATOR_PORT/udp) прослушивается"
else
log_error "Порт Obfuscator НЕ доступен"
((errors++))
fi
# Disk
local free_mb=$(df -m / | awk 'NR==2 {print $4}')
if [[ "$free_mb" -lt 500 ]]; then
log_warn "Мало места на диске: ${free_mb}MB"
else
log_success "Свободное место: ${free_mb}MB"
fi
if [[ "$errors" -eq 0 ]]; then
echo "Система работает нормально."
else
echo "Обнаружены проблемы ($errors)."
exit 1
fi
}
action_cleanup() {
log_info "Очистка системы..."
local now=$(date +%s)
# 1. Tokens
if [[ -f "$TOKENS_FILE" ]] && command -v jq >/dev/null; then
local expired=$(jq -r ".[] | select(.expires < $now) | .token" "$TOKENS_FILE")
for t in $expired; do
log_info "Удаление просроченного токена: $t"
rm -f "$WWW_DIR/init/$t.sh"
rm -rf "$WWW_DIR/packages/$t"
done
# Update JSON
jq "[.[] | select(.expires >= $now)]" "$TOKENS_FILE" > "$TOKENS_FILE.tmp" && mv "$TOKENS_FILE.tmp" "$TOKENS_FILE"
fi
if [[ -d "$WWW_DIR/packages" ]]; then
for d in "$WWW_DIR/packages"/*; do
if [[ -d "$d" ]]; then
local t=$(basename "$d")
local in_json=false
if [[ -f "$TOKENS_FILE" ]]; then
in_json=$(jq -r --arg t "$t" 'map(select(.token == $t)) | length > 0' "$TOKENS_FILE" 2>/dev/null || echo false)
fi
if [[ "$in_json" == "false" ]]; then
log_warn "Найден осиротевший каталог: $t"
rm -rf "$d"
rm -f "$WWW_DIR/init/$t.sh"
fi
fi
done
fi
log_success "Очистка завершена."
}
action_monitor() {
echo "Мониторинг клиентов (Live)..."
echo "Ctrl+C для выхода"
watch -n 2 "wg show wg0; echo ''; echo '--- Connections ---'; ss -un state established '( dport = :$OBFUSCATOR_PORT )'"
}
case "$CMD" in
status|health) action_status ;;
cleanup) action_cleanup ;;
monitor) action_monitor ;;
*)
echo "Usage: $0 {status|cleanup|monitor}"
exit 1
;;
esac