feat: Admin-Route für Queue-Status-Monitoring (closes #3)
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
"""Flask-Blueprint für Admin-Route."""
|
||||||
|
|
||||||
|
from flask import Blueprint, current_app, jsonify
|
||||||
|
|
||||||
|
admin_bp = Blueprint("admin", __name__)
|
||||||
|
|
||||||
|
|
||||||
|
@admin_bp.route("/admin/queue", methods=["GET"])
|
||||||
|
def queue_status() -> tuple:
|
||||||
|
"""Gibt Queue-Status zurück."""
|
||||||
|
qh = current_app.queue_handler # type: ignore[attr-defined]
|
||||||
|
return jsonify({"queue_size": qh.queue_size(), "status": "ok"}), 200
|
||||||
|
|
||||||
|
|
||||||
|
@admin_bp.route("/admin/stats", methods=["GET"])
|
||||||
|
def stats() -> tuple:
|
||||||
|
"""Gibt System-Statistiken zurück."""
|
||||||
|
qh = current_app.queue_handler # type: ignore[attr-defined]
|
||||||
|
return jsonify(
|
||||||
|
{"queue_size": qh.queue_size(), "uptime": "placeholder", "version": "0.1.0"}
|
||||||
|
), 200
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
"""Tests für Admin-Route."""
|
||||||
|
|
||||||
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
|
from flask import Flask
|
||||||
|
|
||||||
|
from src.routes.admin import admin_bp
|
||||||
|
|
||||||
|
|
||||||
|
class TestAdminRoute:
|
||||||
|
"""Tests für Admin-Route."""
|
||||||
|
|
||||||
|
def setup_method(self) -> None:
|
||||||
|
"""Erstellt Flask-App mit mocktem QueueHandler."""
|
||||||
|
self.app = Flask(__name__)
|
||||||
|
self.app.queue_handler = MagicMock()
|
||||||
|
self.app.queue_handler.queue_size.return_value = 42
|
||||||
|
self.app.register_blueprint(admin_bp, url_prefix="/")
|
||||||
|
self.client = self.app.test_client()
|
||||||
|
|
||||||
|
def test_get_admin_queue_ergibt_200(self) -> None:
|
||||||
|
"""GET /admin/queue → 200 + JSON mit queue_size."""
|
||||||
|
response = self.client.get("/admin/queue")
|
||||||
|
assert response.status_code == 200
|
||||||
|
data = response.get_json()
|
||||||
|
assert "queue_size" in data
|
||||||
|
assert data["status"] == "ok"
|
||||||
|
|
||||||
|
def test_get_admin_queue_queue_size_ist_integer(self) -> None:
|
||||||
|
"""GET /admin/queue → queue_size ist Integer."""
|
||||||
|
response = self.client.get("/admin/queue")
|
||||||
|
data = response.get_json()
|
||||||
|
assert isinstance(data["queue_size"], int)
|
||||||
|
|
||||||
|
def test_get_admin_stats_ergibt_200(self) -> None:
|
||||||
|
"""GET /admin/stats → 200 + version '0.1.0'."""
|
||||||
|
response = self.client.get("/admin/stats")
|
||||||
|
assert response.status_code == 200
|
||||||
|
data = response.get_json()
|
||||||
|
assert data["version"] == "0.1.0"
|
||||||
|
|
||||||
|
def test_get_admin_stats_json_enhaelt_alle_keys(self) -> None:
|
||||||
|
"""GET /admin/stats → JSON enthält alle Keys."""
|
||||||
|
response = self.client.get("/admin/stats")
|
||||||
|
data = response.get_json()
|
||||||
|
assert "queue_size" in data
|
||||||
|
assert "uptime" in data
|
||||||
|
assert "version" in data
|
||||||
Reference in New Issue
Block a user