From 09d3313e15ef437637077e1085dba78a5f3a8ea0 Mon Sep 17 00:00:00 2001 From: MacRimi Date: Thu, 29 Jan 2026 17:59:04 +0100 Subject: [PATCH] Update flask_server.py --- AppImage/scripts/flask_server.py | 50 +++++++++++++------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/AppImage/scripts/flask_server.py b/AppImage/scripts/flask_server.py index 0edb591c..55d1a867 100644 --- a/AppImage/scripts/flask_server.py +++ b/AppImage/scripts/flask_server.py @@ -15,14 +15,14 @@ import logging from flask import Flask, jsonify, send_file, send_from_directory from flask_cors import CORS -# --- Importar Blueprints Existentes (Los que ya tenías y no hemos tocado) --- +# --- Importar Blueprints Existentes --- from flask_auth_routes import auth_bp from flask_health_routes import health_bp from flask_proxmenux_routes import proxmenux_bp -from flask_terminal_routes import terminal_bp, init_terminal_routes +from flask_terminal_routes import init_terminal_routes +# Nota: No importamos terminal_bp aquí porque init_terminal_routes ya lo registra -# --- Importar Nuevos Blueprints (Los 5 módulos que acabas de crear) --- -# Asegúrate de que los archivos .py se llamen exactamente así para que funcionen los imports: +# --- Importar Nuevos Blueprints --- from flask_system_routes import system_bp from flask_storage_routes import storage_bp from flask_network_routes import network_bp @@ -39,42 +39,40 @@ logger = logging.getLogger("proxmenux.server") # Inicializar Flask app = Flask(__name__) -CORS(app) # Habilitar CORS para permitir peticiones desde el frontend +CORS(app) # Habilitar CORS # ------------------------------------------------------------------- # Registro de Módulos (Blueprints) -# Aquí es donde "conectamos" todos los archivos separados a la app principal # ------------------------------------------------------------------- # 1. Módulos de Utilidad y Autenticación app.register_blueprint(auth_bp) app.register_blueprint(health_bp) app.register_blueprint(proxmenux_bp) -app.register_blueprint(terminal_bp) +# ELIMINADO: app.register_blueprint(terminal_bp) -> Se registra dentro de init_terminal_routes() -# 2. Módulos Principales de Monitorización (Nuevos) -app.register_blueprint(system_bp) # Rutas: /api/system, /api/logs, /api/events -app.register_blueprint(storage_bp) # Rutas: /api/storage, /api/backups -app.register_blueprint(network_bp) # Rutas: /api/network -app.register_blueprint(vm_bp) # Rutas: /api/vms -app.register_blueprint(hardware_bp) # Rutas: /api/hardware, /api/gpu -app.register_blueprint(script_bp) # Rutas: /api/scripts +# 2. Módulos Principales de Monitorización +app.register_blueprint(system_bp) # /api/system, /api/logs +app.register_blueprint(storage_bp) # /api/storage, /api/backups +app.register_blueprint(network_bp) # /api/network +app.register_blueprint(vm_bp) # /api/vms +app.register_blueprint(hardware_bp) # /api/hardware, /api/gpu +app.register_blueprint(script_bp) # /api/scripts # Inicializar WebSocket para la terminal y ejecución de scripts +# Esta función registra el blueprint 'terminal' internamente init_terminal_routes(app) # ------------------------------------------------------------------- -# Rutas del Frontend (Servir Dashboard Next.js estático) +# Rutas del Frontend # ------------------------------------------------------------------- @app.route('/') def serve_dashboard(): """Sirve la página principal (index.html) del dashboard.""" try: - # Detectar la raíz del AppImage o directorio actual appimage_root = os.environ.get('APPDIR') if not appimage_root: - # Fallback para desarrollo: detectar ruta relativa base_dir = os.path.dirname(os.path.abspath(__file__)) if base_dir.endswith('usr/bin'): appimage_root = os.path.dirname(os.path.dirname(base_dir)) @@ -86,12 +84,10 @@ def serve_dashboard(): if os.path.exists(index_path): return send_file(index_path) - # Si no encuentra el dashboard, mostrar mensaje de error útil en el navegador return f"""

ProxMenux Monitor

Dashboard not found at: {index_path}

-

The API is running correctly. Check your AppImage build structure.

""", 404 @@ -100,7 +96,7 @@ def serve_dashboard(): @app.route('/_next/') def serve_next_static(filename): - """Sirve archivos estáticos de Next.js (_next/static/...).""" + """Sirve archivos estáticos de Next.js.""" try: appimage_root = os.environ.get('APPDIR') if not appimage_root: @@ -134,7 +130,7 @@ def serve_images(filename): @app.route('/') def serve_static_files(filename): - """Sirve archivos raíz (favicon, manifest, etc.).""" + """Sirve archivos raíz.""" try: appimage_root = os.environ.get('APPDIR') if not appimage_root: @@ -151,29 +147,23 @@ def serve_static_files(filename): @app.route('/api/info', methods=['GET']) def api_info(): - """Endpoint raíz de la API para verificar funcionamiento y listar endpoints disponibles.""" + """Endpoint raíz de la API.""" return jsonify({ 'name': 'ProxMenux Monitor API', 'version': '1.0.3 (Modular)', 'status': 'online', 'endpoints': [ - '/api/system', - '/api/storage', - '/api/network', - '/api/vms', - '/api/hardware', - '/api/gpu/realtime' + '/api/system', '/api/storage', '/api/network', + '/api/vms', '/api/hardware', '/api/gpu/realtime' ] }) if __name__ == '__main__': - # Silenciar banner de Flask CLI para mantener logs limpios en la consola import sys try: cli = sys.modules['flask.cli'] cli.show_server_banner = lambda *x: None except: pass - # Iniciar servidor en el puerto 8008 print("🚀 ProxMenux Monitor API (Modular) running on port 8008...") app.run(host='0.0.0.0', port=8008, debug=False) \ No newline at end of file