73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
from datetime import timedelta
|
|
|
|
from flask import Blueprint, jsonify, request
|
|
|
|
from app.routes.auth_decorators import require_auth
|
|
from app.services.feed_quality.evaluator import reevaluate_feed_alerts_for_period
|
|
from app.services.feed_quality.query import feed_alerts_summary, list_feed_alerts
|
|
from app.services.feed_quality.settings_store import (
|
|
normalize_settings,
|
|
save_feed_quality_settings,
|
|
settings_for_api,
|
|
)
|
|
from app.timeutil import utc_now_naive
|
|
|
|
bp = Blueprint("feed_quality", __name__, url_prefix="/api/feed-quality")
|
|
|
|
|
|
@bp.get("/settings")
|
|
@require_auth
|
|
def get_settings():
|
|
return jsonify(settings_for_api())
|
|
|
|
|
|
@bp.put("/settings")
|
|
@require_auth
|
|
def put_settings():
|
|
body = request.get_json(silent=True) or {}
|
|
partial = body.get("settings") if isinstance(body.get("settings"), dict) else body
|
|
try:
|
|
saved = save_feed_quality_settings(normalize_settings(partial))
|
|
except (TypeError, ValueError) as exc:
|
|
return jsonify({"error": True, "message": str(exc)}), 400
|
|
|
|
today = utc_now_naive().date()
|
|
week_ago = today - timedelta(days=7)
|
|
reevaluated = reevaluate_feed_alerts_for_period(
|
|
date_from=week_ago.isoformat(),
|
|
date_to=today.isoformat(),
|
|
limit=500,
|
|
)
|
|
return jsonify({"saved": True, "settings": saved, "reevaluatedReports": reevaluated})
|
|
|
|
|
|
@bp.get("/alerts/summary")
|
|
@require_auth
|
|
def alerts_summary():
|
|
return jsonify(
|
|
feed_alerts_summary(
|
|
date_from=request.args.get("date_from"),
|
|
date_to=request.args.get("date_to"),
|
|
dispenser_id=request.args.get("dispenser_id"),
|
|
)
|
|
)
|
|
|
|
|
|
@bp.get("/alerts")
|
|
@require_auth
|
|
def alerts_list():
|
|
try:
|
|
limit = int(request.args.get("limit", 200))
|
|
except (TypeError, ValueError):
|
|
limit = 200
|
|
return jsonify(
|
|
list_feed_alerts(
|
|
date_from=request.args.get("date_from"),
|
|
date_to=request.args.get("date_to"),
|
|
severity=request.args.get("severity"),
|
|
event_type=request.args.get("event_type"),
|
|
dispenser_id=request.args.get("dispenser_id"),
|
|
limit=limit,
|
|
)
|
|
)
|