#!/bin/bash # 🛡️ AntiScam AI Pro - Scripts de Utilidad # Conjunto de scripts para mantenimiento y operaciones # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Funciones de utilidad log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # Backup de base de datos backup_database() { log_info "Iniciando backup de base de datos..." timestamp=$(date +%Y%m%d_%H%M%S) backup_dir="backups" mkdir -p $backup_dir if [ -f "antiscam_pro.db" ]; then # SQLite backup cp antiscam_pro.db "$backup_dir/antiscam_pro_$timestamp.db" gzip "$backup_dir/antiscam_pro_$timestamp.db" log_success "SQLite backup: $backup_dir/antiscam_pro_$timestamp.db.gz" fi # PostgreSQL backup (si se usa) if command -v pg_dump &> /dev/null; then pg_dump $DATABASE_URL > "$backup_dir/postgres_$timestamp.sql" gzip "$backup_dir/postgres_$timestamp.sql" log_success "PostgreSQL backup: $backup_dir/postgres_$timestamp.sql.gz" fi # Limpiar backups antiguos (mantener últimos 7 días) find $backup_dir -name "*.gz" -mtime +7 -delete log_info "Backups antiguos limpiados" } # Limpieza de archivos temporales cleanup_temp_files() { log_info "Limpiando archivos temporales..." # Limpiar uploads antiguos if [ -d "uploads" ]; then find uploads -type f -mtime +1 -delete log_info "Uploads antiguos limpiados" fi # Limpiar logs antiguos if [ -d "logs" ]; then find logs -name "*.log" -mtime +30 -delete log_info "Logs antiguos limpiados" fi # Limpiar cache de Python find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null find . -name "*.pyc" -delete log_info "Cache de Python limpiado" log_success "Limpieza completada" } # Verificar salud del sistema check_system_health() { log_info "Verificando salud del sistema..." # Verificar uso de disco disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $disk_usage -gt 85 ]; then log_warning "Uso de disco alto: ${disk_usage}%" else log_success "Uso de disco OK: ${disk_usage}%" fi # Verificar memoria mem_usage=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}') if [ $mem_usage -gt 85 ]; then log_warning "Uso de memoria alto: ${mem_usage}%" else log_success "Uso de memoria OK: ${mem_usage}%" fi # Verificar CPU cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}') if (( $(echo "$cpu_usage > 80" | bc -l) )); then log_warning "Uso de CPU alto: ${cpu_usage}%" else log_success "Uso de CPU OK: ${cpu_usage}%" fi # Verificar servicios Docker if command -v docker &> /dev/null; then if docker ps --filter "name=antiscam" --format "table {{.Names}}\t{{.Status}}" | grep -q "Up"; then log_success "Servicios Docker corriendo" else log_error "Algunos servicios Docker no están corriendo" fi fi } # Actualizar certificados SSL update_ssl_certificates() { log_info "Actualizando certificados SSL..." # Renovar con Certbot (Let's Encrypt) if command -v certbot &> /dev/null; then certbot renew --quiet if [ $? -eq 0 ]; then log_success "Certificados SSL renovados" # Recargar Nginx if command -v docker &> /dev/null; then docker exec antiscam-nginx nginx -s reload else systemctl reload nginx fi else log_error "Error renovando certificados SSL" fi else log_warning "Certbot no instalado" fi } # Optimizar base de datos optimize_database() { log_info "Optimizando base de datos..." # SQLite optimization if [ -f "antiscam_pro.db" ]; then sqlite3 antiscam_pro.db "VACUUM;" sqlite3 antiscam_pro.db "REINDEX;" log_success "SQLite optimizado" fi # PostgreSQL optimization (si se usa) if command -v psql &> /dev/null && [ ! -z "$DATABASE_URL" ]; then psql $DATABASE_URL -c "VACUUM ANALYZE;" log_success "PostgreSQL optimizado" fi } # Generar reporte de uso generate_usage_report() { log_info "Generando reporte de uso..." report_file="reports/usage_$(date +%Y%m%d).txt" mkdir -p reports { echo "🛡️ AntiScam AI Pro - Reporte de Uso" echo "Fecha: $(date)" echo "==================================" echo "" # Estadísticas de usuarios if [ -f "antiscam_pro.db" ]; then echo "📊 ESTADÍSTICAS DE USUARIOS:" sqlite3 antiscam_pro.db "SELECT COUNT(*) as 'Total Usuarios' FROM users;" sqlite3 antiscam_pro.db "SELECT COUNT(*) as 'Usuarios Pro' FROM users WHERE is_pro = 1;" sqlite3 antiscam_pro.db "SELECT COUNT(*) as 'Usuarios Verificados' FROM users WHERE is_verified = 1;" echo "" echo "📈 ANÁLISIS REALIZADOS:" sqlite3 antiscam_pro.db "SELECT COUNT(*) as 'Total Análisis' FROM analyses;" sqlite3 antiscam_pro.db "SELECT risk_level, COUNT(*) as 'Cantidad' FROM analyses GROUP BY risk_level;" echo "" echo "💰 INFORMACIÓN DE PAGOS:" sqlite3 antiscam_pro.db "SELECT COUNT(*) as 'Total Pagos' FROM payments WHERE status = 'completed';" sqlite3 antiscam_pro.db "SELECT SUM(amount) as 'Ingresos Total' FROM payments WHERE status = 'completed';" echo "" fi echo "🖥️ SALUD DEL SISTEMA:" echo "Uso de disco: $(df / | awk 'NR==2 {print $5}')" echo "Uso de memoria: $(free | awk 'NR==2{printf "%.0f%%", $3*100/$2}')" echo "Uptime: $(uptime -p)" } > $report_file log_success "Reporte generado: $report_file" } # Rotar logs rotate_logs() { log_info "Rotando logs..." log_dir="logs" mkdir -p $log_dir # Rotar logs de aplicación if [ -f "app.log" ]; then mv app.log "$log_dir/app_$(date +%Y%m%d_%H%M%S).log" touch app.log fi # Comprimir logs antiguos find $log_dir -name "*.log" -mtime +1 -exec gzip {} \; # Eliminar logs muy antiguos find $log_dir -name "*.gz" -mtime +30 -delete log_success "Logs rotados" } # Reiniciar servicios restart_services() { log_info "Reiniciando servicios..." if command -v docker-compose &> /dev/null; then docker-compose restart antiscam-ai log_success "Servicios Docker reiniciados" elif command -v systemctl &> /dev/null; then systemctl restart antiscam-ai log_success "Servicio systemd reiniciado" else log_error "No se puede reiniciar servicios automáticamente" fi } # Verificar actualizaciones de dependencias check_updates() { log_info "Verificando actualizaciones..." if [ -f "requirements.txt" ]; then pip list --outdated --format=columns log_info "Ejecuta 'pip install -U [paquete]' para actualizar" fi } # Función principal main() { case $1 in "backup") backup_database ;; "cleanup") cleanup_temp_files ;; "health") check_system_health ;; "ssl") update_ssl_certificates ;; "optimize") optimize_database ;; "report") generate_usage_report ;; "rotate-logs") rotate_logs ;; "restart") restart_services ;; "updates") check_updates ;; "maintenance") log_info "Ejecutando mantenimiento completo..." backup_database cleanup_temp_files optimize_database rotate_logs check_system_health generate_usage_report log_success "Mantenimiento completado" ;; *) echo "🛡️ AntiScam AI Pro - Scripts de Utilidad" echo "" echo "Uso: ./utils.sh [COMANDO]" echo "" echo "Comandos disponibles:" echo " backup - Backup de base de datos" echo " cleanup - Limpiar archivos temporales" echo " health - Verificar salud del sistema" echo " ssl - Actualizar certificados SSL" echo " optimize - Optimizar base de datos" echo " report - Generar reporte de uso" echo " rotate-logs - Rotar logs" echo " restart - Reiniciar servicios" echo " updates - Verificar actualizaciones" echo " maintenance - Mantenimiento completo" echo "" ;; esac } # Ejecutar función principal main "$@"