Initial commit
This commit is contained in:
240
ARQUITECTURA.md
Normal file
240
ARQUITECTURA.md
Normal file
@@ -0,0 +1,240 @@
|
||||
# 🏗️ 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!** 🚀
|
||||
Reference in New Issue
Block a user