#!/bin/bash

# Script per configurare crontab per il sistema DDoS Detection
# Eseguire con: chmod +x setup_crontab.sh && ./setup_crontab.sh

# Colori per output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}🔧 CONFIGURAZIONE CRONTAB SISTEMA DDoS DETECTION${NC}"
echo "=================================================="

# Rileva percorso corrente
CURRENT_DIR=$(pwd)
echo -e "${YELLOW}📁 Directory corrente: ${CURRENT_DIR}${NC}"

# Percorsi dei log
TRAINING_LOG="/root/training.log"
DETECT_LOG="/root/detect.log"
CRON_LOG="/root/cron_ddos.log"

echo -e "${YELLOW}📄 Log files:${NC}"
echo -e "   • Training: ${TRAINING_LOG}"
echo -e "   • Detection: ${DETECT_LOG}"
echo -e "   • Crontab: ${CRON_LOG}"

# Crea backup del crontab esistente
echo -e "\n${BLUE}💾 Backup crontab esistente...${NC}"
crontab -l > /tmp/crontab_backup_$(date +%Y%m%d_%H%M%S) 2>/dev/null || echo "Nessun crontab esistente"

# Crea il nuovo crontab
echo -e "\n${BLUE}⚙️  Configurazione nuovo crontab...${NC}"

cat > /tmp/new_crontab << EOF
# ============================================
# SISTEMA DDoS DETECTION - CONFIGURAZIONE AUTOMATICA
# ============================================

# Training ogni 12 ore (alle 00:00 e 12:00)
0 */12 * * * cd ${CURRENT_DIR} && python3 analisys_02.py --training-hours 0.01 --max-records 500000 --force-training >> ${TRAINING_LOG} 2>&1

# Verifica processo detect ogni 5 minuti (riavvia se non attivo)
*/5 * * * * ${CURRENT_DIR}/check_detect.sh >> ${CRON_LOG} 2>&1

# Pulizia log settimanale (ogni domenica alle 02:00)
0 2 * * 0 find /root -name "*.log" -size +100M -exec truncate -s 50M {} \; >> ${CRON_LOG} 2>&1

# Restart completo del sistema ogni settimana (domenica alle 03:00)
0 3 * * 0 ${CURRENT_DIR}/restart_detect.sh >> ${CRON_LOG} 2>&1
EOF

# Installa il nuovo crontab
crontab /tmp/new_crontab

echo -e "${GREEN}✅ Crontab configurato con successo!${NC}"

# Crea script di controllo detect
echo -e "\n${BLUE}📜 Creazione script di controllo detect...${NC}"

cat > check_detect.sh << 'EOF'
#!/bin/bash

# Script per verificare e riavviare il processo detect se necessario
DETECT_LOG="/root/detect.log"
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PIDFILE="/tmp/detect_ddos.pid"

# Funzione per avviare detect
start_detect() {
    echo "$(date): Avvio processo detect..." >> "$DETECT_LOG"
    cd "$CURRENT_DIR"
    nohup python3 detect_multi_03.py --ciclo --pausa 5 --batch-size 20000 --sensibility 1 --cleanup --retention-days 0 >> "$DETECT_LOG" 2>&1 &
    echo $! > "$PIDFILE"
    echo "$(date): Processo detect avviato con PID $(cat $PIDFILE)" >> "$DETECT_LOG"
}

# Verifica se il processo è attivo
if [ -f "$PIDFILE" ]; then
    PID=$(cat "$PIDFILE")
    if ps -p "$PID" > /dev/null 2>&1; then
        # Processo attivo, verifica se sta scrivendo nel log
        if [ -f "$DETECT_LOG" ]; then
            # Se il log non è stato modificato negli ultimi 10 minuti, riavvia
            if [ $(find "$DETECT_LOG" -mmin +10 | wc -l) -gt 0 ]; then
                echo "$(date): Log non aggiornato, riavvio processo..." >> "$DETECT_LOG"
                kill "$PID" 2>/dev/null
                sleep 5
                start_detect
            fi
        fi
    else
        echo "$(date): Processo detect non trovato, riavvio..." >> "$DETECT_LOG"
        start_detect
    fi
else
    echo "$(date): File PID non trovato, avvio processo detect..." >> "$DETECT_LOG"
    start_detect
fi
EOF

chmod +x check_detect.sh

# Crea script di restart completo
echo -e "\n${BLUE}🔄 Creazione script di restart...${NC}"

cat > restart_detect.sh << 'EOF'
#!/bin/bash

# Script per restart completo del sistema detect
DETECT_LOG="/root/detect.log"
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PIDFILE="/tmp/detect_ddos.pid"

echo "$(date): === RESTART SETTIMANALE SISTEMA DETECT ===" >> "$DETECT_LOG"

# Termina processo esistente
if [ -f "$PIDFILE" ]; then
    PID=$(cat "$PIDFILE")
    if ps -p "$PID" > /dev/null 2>&1; then
        echo "$(date): Terminazione processo esistente PID $PID" >> "$DETECT_LOG"
        kill -TERM "$PID"
        sleep 10
        # Force kill se necessario
        if ps -p "$PID" > /dev/null 2>&1; then
            kill -KILL "$PID"
        fi
    fi
    rm -f "$PIDFILE"
fi

# Pulizia file temporanei
echo "$(date): Pulizia file temporanei..." >> "$DETECT_LOG"
find /tmp -name "*detect*" -mtime +1 -delete 2>/dev/null
find "$CURRENT_DIR" -name "*.pyc" -delete 2>/dev/null

# Riavvio processo
echo "$(date): Riavvio processo detect..." >> "$DETECT_LOG"
cd "$CURRENT_DIR"
./check_detect.sh
EOF

chmod +x restart_detect.sh

# Avvio immediato del processo detect
echo -e "\n${BLUE}🚀 Avvio immediato processo detect...${NC}"
./check_detect.sh

echo -e "\n${GREEN}✅ CONFIGURAZIONE COMPLETATA!${NC}"
echo ""
echo -e "${YELLOW}📋 COMANDI UTILI:${NC}"
echo -e "   • Visualizza log detect:     ${BLUE}tail -f ${DETECT_LOG}${NC}"
echo -e "   • Visualizza log training:   ${BLUE}tail -f ${TRAINING_LOG}${NC}"
echo -e "   • Visualizza log crontab:    ${BLUE}tail -f ${CRON_LOG}${NC}"
echo -e "   • Stato crontab:             ${BLUE}crontab -l${NC}"
echo -e "   • Stato processo detect:     ${BLUE}ps aux | grep detect_multi${NC}"
echo -e "   • Restart manuale detect:    ${BLUE}./restart_detect.sh${NC}"
echo ""
echo -e "${YELLOW}⚠️  IMPORTANTE:${NC}"
echo -e "   • Il training verrà eseguito ogni 12 ore"
echo -e "   • Il detect viene monitorato ogni 5 minuti"
echo -e "   • Restart automatico ogni domenica alle 03:00"
echo -e "   • I log vengono puliti automaticamente se > 100MB"
echo ""
echo -e "${GREEN}🎉 Sistema DDoS Detection configurato per l'esecuzione automatica!${NC}" 