from flask import Blueprint, jsonify, request, current_app from ..utils import get_db_connection fuenf_minuten_bp = Blueprint('fuenf_minuten', __name__, url_prefix='/fuenf_minuten') @fuenf_minuten_bp.route('/', strict_slashes=False) def fuenf_minuten(): # Abrufen der Filterparameter aus der Anfrage start_date = request.args.get('start_date') end_date = request.args.get('end_date') start_time = request.args.get('start_time', '00:00') end_time = request.args.get('end_time', '23:59') # Validierung der Eingabewerte if not start_date or not end_date: return jsonify({'error': 'Bitte sowohl Start- als auch End-Datum auswählen.'}) # Aufbau der Verbindung zur Datenbank conn = get_db_connection() cursor = conn.cursor() # SQL-Abfrage zur Generierung der 5-Minuten-Intervalle und Zählung der Übertragungen query = """ WITH RECURSIVE seq AS ( SELECT 0 AS n UNION ALL SELECT n + 5 FROM seq WHERE n + 5 <= TIMESTAMPDIFF(MINUTE, %s, %s) ), time_slots AS ( SELECT DATE_FORMAT(create_time, '%Y-%m-%d %H:%i') AS time_slot, COUNT(*) AS transmission_count FROM gi_debugger_entry WHERE webservice_id = %s AND create_time BETWEEN %s AND %s GROUP BY time_slot ), all_times AS ( SELECT DATE_FORMAT(TIMESTAMPADD(MINUTE, n, %s), '%Y-%m-%d %H:%i') AS time_slot FROM seq ) SELECT all_times.time_slot, COALESCE(time_slots.transmission_count, 0) AS transmission_count FROM all_times LEFT JOIN time_slots ON all_times.time_slot = time_slots.time_slot ORDER BY all_times.time_slot; """ # Setzen der Parameter für die SQL-Abfrage start_datetime = f"{start_date} {start_time}" end_datetime = f"{end_date} {end_time}" try: # Ausführen der SQL-Abfrage cursor.execute(query, ( start_datetime, end_datetime, current_app.config['WEB_SERVICE_ID'], start_datetime, end_datetime, start_datetime )) results = cursor.fetchall() conn.close() # Formatierung der Ergebnisse für die API-Antwort return jsonify([{'time_slot': row[0], 'transmission_count': row[1]} for row in results]) except Exception as e: # Fehlerbehandlung conn.close() return jsonify({'error': str(e)})