Files
cbc2027/ARQUITECTURA.md
2025-12-16 22:32:27 +00:00

10 KiB

🏗️ Arquitectura del Sistema Integrado

📊 Diagrama General

┌─────────────────────────────────────────────────────────────────────────────┐
│                           SISTEMA COMPLETO                                  │
│                                                                             │
│  ┌──────────────┐                         ┌──────────────┐                  │
│  │   SERVICIO   │                         │  DASHBOARD   │                  │
│  │   PRINCIPAL  │◄────── Comparte ───────►│     WEB      │                  │
│  │   (main.py)  │        contexto         │ (dashboard)  │                  │
│  └──────┬───────┘                         └──────┬───────┘                  │
│         │                                         │                          │
│         │ Polling cada 5s                        │ API REST                 │
│         ▼                                         ▼                          │
│  ┌──────────────────────────────────────────────────────────┐               │
│  │            PROCESAMIENTO AUTOMÁTICO                      │               │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐   │               │
│  │  │   AUDIO  │ │    PDF   │ │   TXT    │ │  WEBDAV  │   │               │
│  │  │Whisper+IA│ │  OCR+IA  │ │   IA     │ │ Sync     │   │               │
│  │  └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘   │               │
│  └──────┼─────────────┼─────────────┼────────────┼─────────┘               │
│         │             │             │            │                          │
│         └─────────────┴─────────────┴────────────┘                          │
│                           │                                              │
│                           ▼                                              │
│                  ┌────────────────┐                                     │
│                  │  NEXTCLOUD     │                                     │
│                  │     (WebDAV)   │                                     │
│                  └────────────────┘                                     │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

🔄 Flujo de Datos

1. Servicio Principal (main.py)

Inicio → start_dashboard() → main() [Bucle infinito]
  ↓              ↓              ↓
Dashboard    Hilo separado   Polling 5s
Web (5000)    (daemon)       ↓
                           Check Archivos
                           ↓
                           Procesar
                           ↓
                           Subir a Nextcloud

2. Dashboard Web (dashboard.py)

HTTP Request → Flask App → API Endpoints
     ↓              ↓           ↓
localhost:5000   Routing    file_manager
     ↓              ↓           ↓
  Browser      Python Code  Operar archivos

📡 Comunicación entre Componentes

Imports Compartidos

# main.py importa del dashboard
import dashboard
dashboard.app.run()  # En hilo separado

# dashboard.py importa de main
from main import (
    AUDIO_EXTENSIONS,
    LOCAL_DOWNLOADS_PATH,
    load_processed_files,
    process_audio_file
)

Estado Compartido

  • Variables de configuración
  • Funciones de procesamiento
  • Registro de archivos procesados
  • Conexión WebDAV a Nextcloud

🎯 Modos de Ejecución

Modo 1: Servicio Completo

python3 main.py
┌─────────────────────────────────────┐
│  THREAD PRINCIPAL                   │
│  ┌──────────────────────────────┐  │
│  │  main() - Bucle principal   │  │
│  │  - Polling Nextcloud        │  │
│  │  - Procesar archivos        │  │
│  └──────────────────────────────┘  │
└─────────────────────────────────────┘
              │
              │ threading.Thread
              ▼
┌─────────────────────────────────────┐
│  DASHBOARD THREAD (daemon)          │
│  ┌──────────────────────────────┐  │
│  │  Flask Web Server           │  │
│  │  - Puerto 5000              │  │
│  │  - API REST                 │  │
│  │  - Interfaz web             │  │
│  └──────────────────────────────┘  │
└─────────────────────────────────────┘

Modo 2: Solo Dashboard

python3 main.py dashboard-only
┌─────────────────────────────────────┐
│  MAIN THREAD                        │
│  ┌──────────────────────────────┐  │
│  │  Flask Web Server ONLY      │  │
│  │  - Puerto 5000              │  │
│  │  - Sin bucle principal      │  │
│  └──────────────────────────────┘  │
└─────────────────────────────────────┘

🗂️ Estructura de Archivos

/home/ren/cbc/
├── main.py                 # Servicio principal + integra dashboard
├── dashboard.py            # Aplicación Flask independiente
├── test_dashboard.py       # Script de pruebas
├── templates/
│   └── index.html         # Interfaz web del dashboard
├── downloads/             # Archivos temporales locales
├── processed_files.txt    # Registro de procesados
├── QUICKSTART.md          # Guía de inicio rápido
├── DASHBOARD_INSTRUCTIONS.md  # Manual detallado
└── ARQUITECTURA.md        # Este archivo

🔌 API Endpoints del Dashboard

Método Endpoint Función
GET / Página principal
GET /api/files Obtener lista de archivos
POST /api/reprocess Reprocesar archivo
POST /api/mark-unprocessed Marcar como no procesado
GET /api/refresh Refrescar lista
GET /health Health check
GET /downloads/<archivo> Descargar archivo

🚀 Proceso de Inicio

1. Usuario ejecuta: python3 main.py
   │
   ├─► main.py inicia
   │   │
   │   ├─► acquire_lock()  [Evitar múltiples instancias]
   │   │
   │   ├─► start_dashboard()  [INICIA DASHBOARD]
   │   │   │
   │   │   ├─► import dashboard
   │   │   │
   │   │   ├─► threading.Thread(target=run_dashboard)
   │   │   │
   │   │   ├─► dashboard_thread.start()
   │   │   │
   │   │   └─► ✅ Dashboard en http://localhost:5000
   │   │
   │   ├─► time.sleep(2)  [Pausa para dashboard]
   │   │
   │   └─► main()  [INICIA BUCLE PRINCIPAL]
   │       │
   │       └─► while True:
   │           │
   │           ├─► Polling Nextcloud
   │           ├─► Verificar archivos nuevos
   │           ├─► Procesar automáticamente
   │           └─► sleep(5)  [esperar 5s]
   │
   └─► Servicio corriendo indefinidamente
       │
       ├─► Dashboard accesible
       └─► Procesamiento activo

🔐 Características de Seguridad

  1. Threading Daemon

    • Dashboard se cierra automáticamente con main.py
    • No impide el cierre del programa
  2. Lock File

    • Evita múltiples instancias de main.py
    • Protección automática via fcntl
  3. Error Handling

    • Dashboard puede fallar sin afectar main
    • Logging detallado de errores
  4. CORS Enabled

    • Flask-CORS configurado
    • Acceso desde cualquier origen

💡 Ventajas de la Integración

Beneficios

  • Un solo comando para todo
  • Contexto compartido (config, funciones)
  • Cierre automático (hilo daemon)
  • Logs unificados (consola única)
  • Sin dependencias externas (todo en main.py)

Rendimiento

  • Dashboard: ~5-10MB RAM
  • Main: Variable según procesamiento
  • Comunicación: Directa (mismo proceso)
  • Latencia: Mínima (sin red)

🛠️ Mantenimiento

  • Código unificado en main.py
  • Menos archivos de configuración
  • Debugging simplificado (una sola consola)
  • Actualización fácil (un solo archivo)

🎉 Resumen

El sistema está completamente integrado:

  • Un solo comando: python3 main.py
  • Dashboard automático en puerto 5000
  • Servicio principal procesando 24/7
  • Interfaz web moderna y responsive
  • API REST completa
  • Gestión de archivos en tiempo real

¡Simplemente ejecuta python3 main.py y visita http://localhost:5000! 🚀