Spaces:
Running
Running
# 🛡️ 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 "$@" |