10 KiB
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
-
Threading Daemon
- Dashboard se cierra automáticamente con main.py
- No impide el cierre del programa
-
Lock File
- Evita múltiples instancias de main.py
- Protección automática via
fcntl
-
Error Handling
- Dashboard puede fallar sin afectar main
- Logging detallado de errores
-
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! 🚀