diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 74072aa2b..c4958ae49 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -2,6 +2,7 @@ from datetime import datetime, date, timedelta from collections import namedtuple from itertools import groupby +import dateutil from flask import ( render_template, url_for, @@ -9,7 +10,6 @@ from flask import ( jsonify, current_app ) - from flask_login import login_required from app.main import main @@ -90,20 +90,10 @@ def usage(service_id): @login_required @user_has_permissions('manage_settings', admin_override=True) def weekly(service_id): - - earliest_date = date(2016, 4, 1) # start of tax year - while earliest_date.weekday() != 0: # 0 for monday - earliest_date -= timedelta(days=1) - + stats = statistics_api_client.get_weekly_notification_stats(service_id)['data'] return render_template( 'views/weekly.html', - days=( - add_rates_to(day) for day in - statistics_api_client.get_7_day_aggregate_for_service( - service_id, - date_from=earliest_date - )['data'] - ), + days=format_stats_to_list(stats), now=datetime.utcnow() ) @@ -199,3 +189,22 @@ def calculate_usage(usage): 'sms_chargeable': max(0, sms_sent - sms_free_allowance), 'sms_rate': sms_rate } + + +def format_stats_to_list(historical_stats): + out = [] + for week, weekly_stats in historical_stats.items(): + for stats in weekly_stats.values(): + stats['failure_rate'] = get_formatted_percentage(stats['failed'], stats['requested']) + + week_start = dateutil.parser.parse(week) + week_end = week_start + timedelta(days=6) + item = { + 'week_start': week_start.isoformat(), + 'week_end': week_end.isoformat(), + 'week_end_datetime': week_end, + } + item.update(weekly_stats) + out.append(item) + + return sorted(out, key=lambda x: x['week_start'], reverse=True) diff --git a/app/notify_client/statistics_api_client.py b/app/notify_client/statistics_api_client.py index cc3fdc480..47f5b89e4 100644 --- a/app/notify_client/statistics_api_client.py +++ b/app/notify_client/statistics_api_client.py @@ -23,16 +23,8 @@ class StatisticsApiClient(BaseAPIClient): else: raise e - def get_7_day_aggregate_for_service(self, service_id, date_from=None, week_count=None): - params = {} - if date_from is not None: - params['date_from'] = date_from - if week_count is not None: - params['week_count'] = week_count - return self.get( - url='/service/{}/notifications-statistics/seven_day_aggregate'.format(service_id), - params=params - ) + def get_weekly_notification_stats(self, service_id): + return self.get(url='/service/{}/notifications/weekly'.format(service_id)) def get_statistics_for_all_services_for_day(self, day): params = { diff --git a/app/templates/views/weekly.html b/app/templates/views/weekly.html index 10a516290..4e413203c 100644 --- a/app/templates/views/weekly.html +++ b/app/templates/views/weekly.html @@ -33,16 +33,16 @@ {% endif %} {% endcall %} {% call field(align='right') %} - {{ item.emails_requested }} + {{ item.email.requested }} {% endcall %} {% call field(align='right') %} - {{ item.emails_failure_rate }}% + {{ item.email.failure_rate }}% {% endcall %} {% call field(align='right') %} - {{ item.sms_requested }} + {{ item.sms.requested }} {% endcall %} {% call field(align='right') %} - {{ item.sms_failure_rate }}% + {{ item.sms.failure_rate }}% {% endcall %} {% endcall %}