241 lines
10 KiB
Markdown
241 lines
10 KiB
Markdown
# 🏗️ 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
|
|
```python
|
|
# 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
|
|
```bash
|
|
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
|
|
```bash
|
|
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!** 🚀
|