Saltar a contenido

Workflows: Modos de Ejecución


Modo Orquestador (Recomendado)

Integración completa vía singularity.py. La interfaz te guía paso a paso sin necesidad de configuración manual.

Ventajas

✅ Configuración centralizada desde .env
✅ Interfaz interactiva con validaciones
✅ Gestión automática de credenciales (COOKIE, API_KEYS)
✅ Logging unificado a través de status_manager.py
✅ Sin archivos config.py dispersos

Pasos

1. Preparar Credenciales en .env

En la raíz del proyecto, edita o crea .env:

# Credenciales del Tracker UNIT3D
UNIT3D_BASE_URL=https://tu-tracker.org
UNIT3D_USERNAME=TuUsuario
UNIT3D_COOKIE_NAME=milnueve_session    # O el nombre específico del tracker
UNIT3D_COOKIE_VALUE=abc123xyz789...    # Extraída de DevTools

# Metadatos para inyección
UNIT3D_MSG_NUEVO="[center][b]🌱 ¡Mantén viva la comunidad compartiendo![/b][/center]"
UNIT3D_BANNER_URL="https://i.ibb.co/banner.webp"

# APIs para resurrección de imágenes
IMGBB_API=tu_api_key_aqui
PTSCREENS_API=opcional_api_key

# Rutas locales
TMPDIR_PATH=/app/RawLoadrr/tmp

2. Lanzar singularity.py

python3 singularity.py

3. Seleccionar Opción

En el menú principal, elige:

[3] UNIT3D Edition (Orquestador 01-04)

4. Configurar Masa de Edición

El orquestador preguntará:

┌─────────────────────────────────────────┐
│ UNIT3D Mass Edition - Configuración     │
├─────────────────────────────────────────┤
│ Banner a inyectar [URL/None]: [INPUT]   │
│ ID inicio [1]: [INPUT]                  │
│ ID fin [500]: [INPUT]                   │
│ Ejecutar fase 01 (Scraper)? [S/n]: S   │
│ Ejecutar fase 02 (Indexer)? [S/n]: S   │
│ Ejecutar fase 03 (Updater)? [S/n]: S   │
│ Ejecutar fase 04 (Resurrector)? [S/n]: S│
└─────────────────────────────────────────┘

Selección Granular

Puedes ejecutar solo algunas fases. Por ejemplo, si ya tienes ids.txt y mapeo_maestro.json del Modo Manual, salta a la fase 03.

5. Monitoreo en Tiempo Real

  • Dashboard: Abre http://localhost:8000 para ver progreso en vivo
  • Logs: Revisa logs/unit3d_mass_edition.log para detalles
  • Status Manager: Actualización automática cada 5 segundos

6. Resumen Final

═══════════════════════════════════════════════════
✅ UNIT3D Mass Edition - Ejecución Completada
═══════════════════════════════════════════════════
Fase 01 (Scraper):     ✅ 523 IDs extraídos
Fase 02 (Indexer):     ✅ 518 torrents mapeados
Fase 03 (Updater):     ✅ 510 metadatos restaurados
Fase 04 (Resurrector): ✅ 510 imágenes reparadas

⏱️  Tiempo total: 2h 14m 32s
📊 Tasa media: 1 torrent cada 15.5s
═══════════════════════════════════════════════════

Modo Manual (Standalone)

Para ejecuciones aisladas, debugging o si no usas singularity.py.

Pre-requisitos

  1. ✅ Python 3.8+
  2. ✅ Dependencias instaladas: pip install -r requirements.txt
  3. ✅ Variables de entorno configuradas (o archivo config.py)

Estructura de Directorios

extras/MASS-EDITION-UNIT3D/
├── 01_scraper.py
├── 02_indexer.py
├── 03_mass_updater.py
├── 04_image_resurrector.py
├── config.py                    # ← Creas este
├── ids.txt                       # ← Generado por 01
├── mapeo_maestro.json            # ← Generado por 02
├── completados.txt               # ← Generado por 03
├── completados_resurrector.txt   # ← Generado por 04
└── requirements.txt

Paso 1: Crear config.py

En extras/MASS-EDITION-UNIT3D/, crea config.py:

# config.py
import os
from pathlib import Path

# ===== CREDENCIALES DEL TRACKER =====
BASE_URL = os.getenv("UNIT3D_BASE_URL", "https://tu-tracker.org")
USERNAME = os.getenv("UNIT3D_USERNAME", "TuUsuario")
COOKIE_NAME = os.getenv("UNIT3D_COOKIE_NAME", "session_cookie")
COOKIE_VALUE = os.getenv("UNIT3D_COOKIE_VALUE", "abc123xyz789...")

# ===== METADATOS DE INYECCIÓN =====
MSG_VIEJO = "[center][b]PLEASE SEED TRACKER[/b][/center]"
MSG_NUEVO = os.getenv("UNIT3D_MSG_NUEVO", 
    "[center][b]¡Quédate seeding para mantener viva la comunidad![/b][/center]")
BANNER_VIEJO = "https://old-banner-url.com/banner.png"
BANNER_NUEVO = os.getenv("UNIT3D_BANNER_URL", 
    "https://i.ibb.co/banner-nuevo.png")

# ===== RUTAS LOCALES =====
TMP_ROOT = os.getenv("TMPDIR_PATH", "/app/RawLoadrr/tmp")

# ===== APIs PARA IMÁGENES =====
IMGBB_API = os.getenv("IMGBB_API", "")
PTSCREENS_API = os.getenv("PTSCREENS_API", "")

# ===== VALIDACIONES =====
if not COOKIE_VALUE or COOKIE_VALUE == "abc123xyz789...":
    raise ValueError("❌ COOKIE_VALUE no configurada en config.py o .env")
if not os.path.exists(TMP_ROOT):
    raise ValueError(f"❌ TMP_ROOT no existe: {TMP_ROOT}")

Manejo de Secretos

Nunca hagas commit de config.py con valores reales. Usa variables de entorno:

export UNIT3D_COOKIE_VALUE="tu_cookie_real"
python3 01_scraper.py

Paso 2: Configurar Variables de Entorno (Opcional)

Define el rango de IDs a procesar (usado por algunos scripts avanzados):

export ID_START=1
export ID_END=500

Si no se definen, los scripts procesan el rango completo encontrado.

Paso 3: Ejecutar en Orden Estricto

cd extras/MASS-EDITION-UNIT3D/

# Fase 01: Extraer IDs
python3 01_scraper.py
# Resultado: ids.txt

# Fase 02: Indexar
python3 02_indexer.py
# Resultado: mapeo_maestro.json

# Fase 03: Actualizar Metadatos
python3 03_mass_updater.py
# Resultado: completados.txt
# Checkpoint: Puedes reintentar si falla

# Fase 04: Resucitar Imágenes
python3 04_image_resurrector.py
# Resultado: completados_resurrector.txt
# + Descripciones sincronizadas

Paso 4: Monitoreo Manual

Sin dashboard, revisa:

# Ver progreso en tiempo real (tail -f)
tail -f completados.txt
tail -f completados_resurrector.txt

# Contar torrents procesados
wc -l completados.txt

# Buscar errores en stdout (guarda output)
python3 03_mass_updater.py 2>&1 | tee updater.log

Reanudación Automática

Si se interrumpe la fase 03:

# El script detecta completados.txt y salta IDs ya procesados
python3 03_mass_updater.py
# ℹ️ Total: 523 | ✅ Completados: 150 | ⏳ Pendientes: 373

Análogamente para fase 04 con completados_resurrector.txt.

Paso 5: Limpieza (Opcional)

Después de verificar que todo es correcto:

# Backup de archivos de control
mkdir backups/
mv completados.txt backups/completados_$(date +%Y%m%d_%H%M%S).txt
mv completados_resurrector.txt backups/

# Limpiar si necesitas reprocesar (CUIDADO)
rm ids.txt mapeo_maestro.json completados.txt completados_resurrector.txt

Tabla Comparativa: Orquestador vs Manual

Aspecto Orquestador Manual
Setup singularity.py → 1 minuto config.py → 5 minutos
Credenciales Centralizadas en .env Distribuidas en config.py + exports
Logging Dashboard en localhost:8000 tail -f + archivos log
Reanudación Automática, interfaz amigable Semi-automática, manual
Granularidad Seleccionar fases por menú Control exacto por terminal
Debugging Verbose logs en dashboard Directo en stdout
Recomendado para Usuarios GUI, automatización CI/CD Desarrolladores, troubleshooting

Flujo de Trabajo Recomendado

Para Producción (500+ torrents)

Orquestador + Dashboard
├─ Configurar .env una sola vez
├─ Lanzar singularity.py
├─ Seleccionar UNIT3D Edition
├─ Dejar corriendo (≈3-4 horas para 1000 torrents)
└─ Revisar dashboard cada hora para alertas

Para Debugging / Pequeña Escala (< 50 torrents)

Modo Manual
├─ Crear config.py
├─ python3 01_scraper.py (editar ids.txt manualmente si es preciso)
├─ python3 02_indexer.py (verificar mapeo_maestro.json)
├─ python3 03_mass_updater.py (inspeccionar completados.txt)
└─ python3 04_image_resurrector.py (validar sincronización)

Para CI/CD (Automatización Noctuna)

#!/bin/bash
set -e

# Cargar credenciales del vault
source /secure/vault/.env

# Ejecutar pipeline completo
cd /app/RawLoadrr/extras/MASS-EDITION-UNIT3D/
python3 01_scraper.py
python3 02_indexer.py
python3 03_mass_updater.py
python3 04_image_resurrector.py

# Enviar reporte por email
mail -s "UNIT3D Edition: Completado" admin@tracker.org < completados.txt

Script de Automatización

Guarda este script como run_full_pipeline.sh en el directorio del proyecto para ejecutar el pipeline completo sin intervención.