From ebb13a12519d4f6ef185a72635f8b388fb4d5034 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Thu, 11 Aug 2016 17:24:44 +0100 Subject: [PATCH] create initial stats query get statistics for all services, for today only --- app/dao/services_dao.py | 20 ++++++++++++++++++++ app/service/rest.py | 15 +++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/dao/services_dao.py b/app/dao/services_dao.py index eff4679dd..5015ba363 100644 --- a/app/dao/services_dao.py +++ b/app/dao/services_dao.py @@ -180,3 +180,23 @@ def dao_fetch_weekly_historical_stats_for_service(service_id): ).order_by( asc(monday_of_notification_week), NotificationHistory.status ).all() + + +@statsd(namespace='dao') +def dao_fetch_todays_stats_for_all_services(): + return db.session.query( + Notification.notification_type, + Notification.status, + func.count(Notification.id).label('count') + ).select_from( + Service + ).join( + # don't want to create a relationship in case we accidentally lazily load it, so manually define the join term + Notification + ).filter( + func.date(Notification.created_at) == date.today() + ).group_by( + Notification.notification_type, + Notification.status, + Notification.service_id + ) diff --git a/app/service/rest.py b/app/service/rest.py index 1c0096000..6445a8311 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -52,6 +52,8 @@ def get_services(): if user_id: services = dao_fetch_all_services_by_user(user_id) else: + if request.args.get('detailed') == 'True': + return get_detailed_services() services = dao_fetch_all_services() data = service_schema.dump(services, many=True).data return jsonify(data=data) @@ -245,3 +247,16 @@ def get_detailed_service(service_id, today_only=False): data = detailed_service_schema.dump(service).data return jsonify(data=data) + + +def get_detailed_services(): + services = {service.id: service for service in dao_fetch_all_services()} + stats = dao_fetch_todays_stats_for_all_services(service_id) + + for row in stats: + services[row.service_id].statistics + # todo: how do we separate rows of statistics by service? + service.statistics = statistics.format_statistics(stats) + + data = detailed_service_schema.dump(service).data + return jsonify(data=data)