79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
# dashboard/app.py
|
|
import sys
|
|
sys.path.append('/workspace')
|
|
|
|
from dash import Dash, html, dcc, page_container
|
|
from flask import Flask
|
|
import dash_bootstrap_components as dbc
|
|
import dash_mantine_components as dmc
|
|
from components.header import Header
|
|
import callbacks.ui_callbacks
|
|
import dashboard.callbacks.overview_callbacks
|
|
import dashboard.callbacks.appointments_callbacks
|
|
import dashboard.callbacks.appointment_modal_callbacks
|
|
from config import SECRET_KEY, ENV
|
|
import os
|
|
import threading
|
|
import logging
|
|
|
|
# Logging konfigurieren
|
|
logging.basicConfig(
|
|
level=logging.DEBUG if ENV == "development" else logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
server = Flask(__name__)
|
|
server.secret_key = SECRET_KEY
|
|
|
|
# Flask's eigene Logs aktivieren
|
|
if ENV == "development":
|
|
logging.getLogger('werkzeug').setLevel(logging.INFO)
|
|
|
|
app = Dash(
|
|
__name__,
|
|
server=server,
|
|
use_pages=True,
|
|
external_stylesheets=[dbc.themes.BOOTSTRAP],
|
|
suppress_callback_exceptions=True,
|
|
serve_locally=True,
|
|
meta_tags=[
|
|
{"name": "viewport", "content": "width=device-width, initial-scale=1"},
|
|
{"charset": "utf-8"}
|
|
]
|
|
)
|
|
|
|
app.layout = dmc.MantineProvider([
|
|
Header(),
|
|
html.Div([
|
|
html.Div(id="sidebar"),
|
|
html.Div(page_container, className="page-content"),
|
|
dcc.Store(id="sidebar-state", data={"collapsed": False}),
|
|
], style={"display": "flex"}),
|
|
])
|
|
|
|
# def open_browser():
|
|
# """Öffnet die HTTPS-URL im Standardbrowser."""
|
|
# os.system('$BROWSER https://localhost:8050') # Entferne das "&", um sicherzustellen, dass der Browser korrekt geöffnet wird
|
|
|
|
print("Testausgabe: Debug-Print funktioniert!") # Testausgabe
|
|
|
|
if __name__ == "__main__":
|
|
debug_mode = ENV == "development"
|
|
|
|
logger.info(f"Starting application in {'DEBUG' if debug_mode else 'PRODUCTION'} mode")
|
|
logger.info(f"Environment: {ENV}")
|
|
logger.info("🔧 Debug features: print(), logging, hot reload all active")
|
|
logger.info("🚀 Dashboard starting up...")
|
|
|
|
# Browser nur einmal öffnen, nicht bei Reload-Prozessen
|
|
# if debug_mode and os.environ.get("WERKZEUG_RUN_MAIN") != "true":
|
|
# threading.Timer(1.0, open_browser).start()
|
|
|
|
app.run(
|
|
host="0.0.0.0",
|
|
port=8050,
|
|
debug=debug_mode,
|
|
ssl_context=("/workspace/certs/dev.crt", "/workspace/certs/dev.key"),
|
|
use_reloader=False # Verhindert doppeltes Öffnen durch Dash
|
|
) |