Ground-Zerro / Phobos Public
Code Issues Pull requests Actions Releases View on GitHub ↗
2.8 KB bash
#!/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