61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
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():
|
|
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')
|
|
|
|
if not start_date or not end_date:
|
|
return jsonify({'error': 'Bitte sowohl Start- als auch End-Datum auswählen.'})
|
|
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
|
|
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;
|
|
"""
|
|
|
|
start_datetime = f"{start_date} {start_time}"
|
|
end_datetime = f"{end_date} {end_time}"
|
|
|
|
try:
|
|
cursor.execute(query, (
|
|
start_datetime,
|
|
end_datetime,
|
|
current_app.config['WEB_SERVICE_ID'],
|
|
start_datetime,
|
|
end_datetime,
|
|
start_datetime
|
|
))
|
|
results = cursor.fetchall()
|
|
conn.close()
|
|
return jsonify([{'time_slot': row[0], 'transmission_count': row[1]} for row in results])
|
|
|
|
except Exception as e:
|
|
conn.close()
|
|
return jsonify({'error': str(e)})
|