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

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!** 🚀