# server/wsgi.py import glob import os from flask import Flask, jsonify, send_from_directory, request from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine, and_ from models import Client, Base, Event DB_USER = os.getenv("DB_USER") DB_PASSWORD = os.getenv("DB_PASSWORD") DB_HOST = os.getenv("DB_HOST") DB_NAME = os.getenv("DB_NAME") # Datenbank-Engine und Session anlegen (passe ggf. die DB-URL an) DB_URL = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}/{DB_NAME}" engine = create_engine(DB_URL, echo=False) Session = sessionmaker(bind=engine) app = Flask(__name__) @app.route("/health") def health(): return jsonify(status="ok") # Optional: Test-Route @app.route("/") def index(): return "Hello from Infoscreen‐API!" # (Weitere Endpunkte, Blueprints, Datenbank-Initialisierung usw. kommen hierher) @app.route("/screenshots/") def get_screenshot(uuid): """Liefert den aktuellen Screenshot für die angegebene UUID zurück.""" print(f"Anfrage für Screenshot mit UUID: {uuid}") pattern = os.path.join("screenshots", f"{uuid}*.jpg") files = glob.glob(pattern) if not files: return jsonify({"error": "Screenshot not found"}), 404 # Es gibt nur eine Datei pro UUID filename = os.path.basename(files[0]) print(filename) print("Arbeitsverzeichnis:", os.getcwd()) print("Suchmuster:", pattern) print("Gefundene Dateien:", files) return send_from_directory("screenshots", filename) @app.route("/api/clients") def get_clients(): # from models import Client # Import lokal, da im selben Container print("Abrufen der Clients aus der Datenbank...") session = Session() clients = session.query(Client).all() result = [ { "uuid": c.uuid, "location": c.location, "hardware_hash": c.hardware_hash, "ip_address": c.ip_address, "last_alive": c.last_alive.isoformat() if c.last_alive else None } for c in clients ] session.close() return jsonify(result) @app.route("/api/events") def get_events(): """ Liefert Events für einen Zeitraum (start, end) als FullCalendar-kompatible Objekte. Query-Parameter: start, end (ISO-Format), optional: client_uuid """ session = Session() start = request.args.get("start") end = request.args.get("end") client_uuid = request.args.get("client_uuid") query = session.query(Event).filter(Event.is_active == True) if start and end: query = query.filter(and_(Event.start < end, Event.end > start)) if client_uuid: query = query.filter(Event.client_uuid == client_uuid) events = query.all() result = [] for e in events: result.append({ "id": str(e.id), "title": e.title, "start": e.start.isoformat() if e.start else None, "end": e.end.isoformat() if e.end else None, "allDay": False, "classNames": [e.event_type.value] if e.event_type else [], "extendedProps": { "description": e.description, "client_uuid": e.client_uuid, "event_type": e.event_type.value if e.event_type else None, "created_by": e.created_by, "updated_by": e.updated_by, } }) session.close() return jsonify(result) if __name__ == "__main__": app.run(host="0.0.0.0", port=8000, debug=True)