Antiscam / scripts /utils.sh
Sousaneitor30000's picture
Create scripts/utils.sh
4c709a6 verified
#!/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 "$@"