Files
usefulscripts/plesk/domainstatus.sh

149 lines
5.2 KiB
Bash

#!/bin/bash
# --- CONFIGURACIÓN DE COLORES ---
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# --- CONFIGURACIÓN DE LÍMITES ---
DEFAULT_UPLOAD="8" #MB
DEFAULT_POST="8" #MB
DEFAULT_TIME="30"
RAM_HIGH="256"
PROCESS_LIMIT=5 # Límite para marcar en rojo los procesos
SERVER=$(curl -s --connect-timeout 2 -4 ifconfig.me || hostname -I | awk '{print $1}') # Auto-detectar IP servidor
# --- PRE-CALCULO DE PROCESOS PHP-FPM ---
declare -A PROCESS_MAP
echo "Analyzing PHP-FPM processes..."
while read -r count domain; do
domain=$(echo "$domain" | xargs)
PROCESS_MAP["$domain"]=$count
done < <(ps aux | grep 'php-fpm: pool' | grep -v grep | awk '{print $NF}' | sort | uniq -c)
# --- OBTENER DOMINIOS ---
if command -v plesk &> /dev/null; then
DOMAINS=$(plesk bin site --list)
else
DOMAINS=$(ls /var/www/vhosts/ | grep "\.")
fi
# --- IMPRIMIR CABECERA ---
printf "%-30s %-8s %-12s %-12s %-12s %-10s %-10s %-20s %-15s\n" "DOMAIN" "PROCS" "RAM (Lim)" "UPLOAD" "POST" "TIME" "PHP VER" "HANDLER" "IP (DNS)"
printf "%s\n" "------------------------------------------------------------------------------------------------------------------------------------------------"
for DOMAIN in $DOMAINS; do
# Ignorar carpetas del sistema
if [[ "$DOMAIN" == "system" || "$DOMAIN" == "chroot" || "$DOMAIN" == "default" ]]; then continue; fi
# 1. BUSCAR PHP.INI
if [ -f "/var/www/vhosts/system/$DOMAIN/etc/php.ini" ]; then
PHP_CONFIG="/var/www/vhosts/system/$DOMAIN/etc/php.ini"
elif [ -f "/var/www/vhosts/$DOMAIN/etc/php.ini" ]; then
PHP_CONFIG="/var/www/vhosts/$DOMAIN/etc/php.ini"
else
PHP_CONFIG=""
fi
# 2. OBTENER VERSIÓN DE PHP Y HANDLER (Vía Plesk DB)
if command -v plesk &> /dev/null; then
HANDLER_RAW=$(plesk db "select h.php_handler_id from domains d join hosting h on h.dom_id=d.id WHERE d.name='$DOMAIN'" -N 2>/dev/null | grep -v "^\+" | sed 's/|//g' | xargs)
# Extraemos solo los números para la lógica de colores
PHP_RAW_VER=$(echo "$HANDLER_RAW" | grep -o "[0-9]*" | head -1)
if [ -z "$PHP_RAW_VER" ]; then
PHP_DISPLAY="?"
PHP_RAW_VER=0
else
# Formatear 74 -> 7.4, 81 -> 8.1
if [ ${#PHP_RAW_VER} -ge 2 ]; then
PHP_DISPLAY="${PHP_RAW_VER:0:1}.${PHP_RAW_VER:1:1}"
else
PHP_DISPLAY="$PHP_RAW_VER"
fi
fi
else
PHP_DISPLAY="No CLI"
HANDLER_RAW="-"
PHP_RAW_VER=0
fi
# 3. LEER DATOS
if [ ! -z "$PHP_CONFIG" ]; then
MEMORY_LIMIT=$(grep -i "^memory_limit" "$PHP_CONFIG" | cut -d= -f2 | tr -d '[:space:]')
UPLOAD_MAX=$(grep -i "^upload_max_filesize" "$PHP_CONFIG" | cut -d= -f2 | tr -d '[:space:]')
UPLOAD_NUM=${UPLOAD_MAX//[!0-9]/}
[ -z "$UPLOAD_NUM" ] && UPLOAD_NUM=0
POST_MAX=$(grep -i "^post_max_size" "$PHP_CONFIG" | cut -d= -f2 | tr -d '[:space:]')
POST_NUM=${POST_MAX//[!0-9]/}
[ -z "$POST_NUM" ] && POST_NUM=0
MAX_EXEC=$(grep -i "^max_execution_time" "$PHP_CONFIG" | cut -d= -f2 | tr -d '[:space:]')
[ -z "$MAX_EXEC" ] && MAX_EXEC=0
else
MEMORY_LIMIT="No ini"
UPLOAD_MAX="0"; UPLOAD_NUM=0
POST_MAX="0"; POST_NUM=0
MAX_EXEC="0"
fi
# 4. OBTENER PROCESOS DEL ARRAY
PROC_COUNT=${PROCESS_MAP["$DOMAIN"]}
if [ -z "$PROC_COUNT" ]; then PROC_COUNT=0; fi
# --- LÓGICA DE COLORES ---
# A) Procesos
COLOR_PROC=$NC
if [ "$PROC_COUNT" -gt "$PROCESS_LIMIT" ]; then COLOR_PROC=$RED; fi
# B) RAM
COLOR_RAM=$NC
if [[ "$MEMORY_LIMIT" != "No ini" ]]; then
if [[ "$MEMORY_LIMIT" == *"-1"* ]]; then
COLOR_RAM=$GREEN
else
RAM_VAL=$(echo "$MEMORY_LIMIT" | sed 's/[^0-9]*//g')
if [[ "$MEMORY_LIMIT" == *"G"* ]]; then RAM_VAL=$((RAM_VAL * 1024)); fi
if [ "$RAM_VAL" -gt "$RAM_HIGH" ] 2>/dev/null; then COLOR_RAM=$RED; fi
fi
fi
# C) Upload y Time
COLOR_UPLOAD=$NC
if [ "$UPLOAD_NUM" -gt "$DEFAULT_UPLOAD" ] && [ "$UPLOAD_MAX" != "-" ]; then COLOR_UPLOAD=$BLUE; fi
COLOR_POST=$NC
if [ "$POST_NUM" -gt "$DEFAULT_POST" ] && [ "$POST_MAX" != "-" ]; then COLOR_POST=$BLUE; fi
COLOR_TIME=$NC
if [ "$MAX_EXEC" -gt "$DEFAULT_TIME" ] && [ "$MAX_EXEC" != "-" ]; then COLOR_TIME=$BLUE; fi
# D) PHP Version (Rojo si es 7.4 o inferior)
COLOR_PHP=$GREEN
if [ "$PHP_RAW_VER" -ne 0 ] && [ "$PHP_RAW_VER" -le 74 ] 2>/dev/null; then
COLOR_PHP=$RED
fi
# E) NSLOOKUP
DOMAIN_IP=$(nslookup -type=A "$DOMAIN" 8.8.8.8 2>/dev/null | grep "Address:" | tail -n +2 | head -1 | awk '{print $2}')
if [ -z "$DOMAIN_IP" ]; then DOMAIN_IP="-"; fi
COLOR_IP=$NC
if [ "$DOMAIN_IP" != "$SERVER" ] && [ "$DOMAIN_IP" != "-" ]; then
COLOR_IP=$RED
fi
# --- IMPRIMIR ---
# Se añade HANDLER_RAW al final
printf "%-30s ${COLOR_PROC}%-8s${NC} ${COLOR_RAM}%-12s${NC} ${COLOR_UPLOAD}%-12s${NC} ${COLOR_POST}%-12s${NC} ${COLOR_TIME}%-10s${NC} ${COLOR_PHP}%-10s${NC} %-20s ${COLOR_IP}%-15s${NC}\n" \
"${DOMAIN:0:29}" "$PROC_COUNT" "$MEMORY_LIMIT" "$UPLOAD_MAX" "$POST_MAX" "$MAX_EXEC" "$PHP_DISPLAY" "$HANDLER_RAW" "$DOMAIN_IP"
done