Files
wevads-platform/scripts/monitoring/ip_rotation.sh
2026-02-26 04:53:11 +01:00

83 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# ============================================
# WEVADS IP Rotation Manager
# Rotation automatique si réputation baisse
# ============================================
BOT_TOKEN="8544624912:AAEm9ttXK6JeFqAL-gcvB5sreCBhXzzQwrs"
CHAT_ID="7605775322"
LOG_FILE="/opt/wevads/logs/ip_rotation.log"
# Seuils
BOUNCE_THRESHOLD=10 # % bounce max
COMPLAINT_THRESHOLD=1 # % complaints max
send_telegram() {
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}" \
-d "text=$1" > /dev/null 2>&1
}
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# Créer table rotation si n'existe pas
psql -U postgres -d adx_system << 'SQLEOF' 2>/dev/null
CREATE TABLE IF NOT EXISTS mta.ip_rotation (
id SERIAL PRIMARY KEY,
ip_address VARCHAR(45) NOT NULL,
server_id INTEGER,
rotation_reason VARCHAR(100),
old_status VARCHAR(20),
new_status VARCHAR(20),
rotated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS mta.ip_reputation (
id SERIAL PRIMARY KEY,
ip_address VARCHAR(45) NOT NULL,
bounce_rate DECIMAL(5,2) DEFAULT 0,
complaint_rate DECIMAL(5,2) DEFAULT 0,
sent_count INTEGER DEFAULT 0,
last_check TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'good',
UNIQUE(ip_address)
);
SQLEOF
# Vérifier les réputations
REPUTATIONS=$(psql -U postgres -d adx_system -t -c "
SELECT ip_address, bounce_rate, complaint_rate
FROM mta.ip_reputation
WHERE status = 'good' AND (bounce_rate > $BOUNCE_THRESHOLD OR complaint_rate > $COMPLAINT_THRESHOLD)
" 2>/dev/null)
while IFS='|' read -r IP BOUNCE COMPLAINT; do
IP=$(echo "$IP" | xargs)
BOUNCE=$(echo "$BOUNCE" | xargs)
COMPLAINT=$(echo "$COMPLAINT" | xargs)
[ -z "$IP" ] && continue
REASON=""
[ $(echo "$BOUNCE > $BOUNCE_THRESHOLD" | bc -l) -eq 1 ] && REASON="High bounce: ${BOUNCE}%"
[ $(echo "$COMPLAINT > $COMPLAINT_THRESHOLD" | bc -l) -eq 1 ] && REASON="$REASON High complaints: ${COMPLAINT}%"
log "ROTATION: $IP - $REASON"
# Marquer IP comme "rotating"
psql -U postgres -d adx_system -c "UPDATE mta.ip_reputation SET status = 'rotating' WHERE ip_address = '$IP'" 2>/dev/null
# Enregistrer rotation
psql -U postgres -d adx_system -c "INSERT INTO mta.ip_rotation (ip_address, rotation_reason, old_status, new_status) VALUES ('$IP', '$REASON', 'good', 'rotating')" 2>/dev/null
# Alerte
send_telegram "🔄 ROTATION IP: $IP
Raison: $REASON
L'IP sera mise en pause et remplacée."
done <<< "$REPUTATIONS"
log "IP rotation check completed"