From 7864f9455d38d13b4812e514bb6b15b53b6b527b Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Tue, 23 Aug 2016 17:38:27 +0100 Subject: [PATCH] rewrite platform-admin page to use new non-stats endpoints had to change because format from api is slightly different --- app/main/views/platform_admin.py | 61 ++++++++++++++++--------- app/templates/views/platform-admin.html | 20 ++++---- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 39745d996..4263d87a9 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -1,3 +1,4 @@ +import itertools from datetime import datetime import pytz @@ -7,7 +8,7 @@ from flask_login import login_required from app import statistics_api_client, service_api_client from app.main import main from app.utils import user_has_permissions -from app.statistics_utils import sum_of_statistics, add_rates_to +from app.statistics_utils import get_formatted_percentage @main.route("/platform-admin") @@ -21,30 +22,46 @@ def platform_admin(): def get_statistics(): - day = datetime.now(tz=pytz.timezone('Europe/London')).date() - all_stats = statistics_api_client.get_statistics_for_all_services_for_day(day)['data'] - services = service_api_client.get_services()['data'] - service_stats = format_stats_by_service(all_stats, services) + services = service_api_client.get_services({'detailed': True})['data'] + service_stats = format_stats_by_service(services) return { - 'global_stats': add_rates_to(sum_of_statistics(all_stats)), + 'global_stats': create_global_stats(services), 'service_stats': service_stats } -def format_stats_by_service(all_stats, services): - services = {service['id']: service for service in services} - return [ - { - 'id': stats['service'], - 'name': services[stats['service']]['name'], - 'sending': ( - (stats['sms_requested'] - stats['sms_delivered'] - stats['sms_failed']) + - (stats['emails_requested'] - stats['emails_delivered'] - stats['emails_failed']) - ), - 'delivered': stats['sms_delivered'] + stats['emails_delivered'], - 'failed': stats['sms_failed'] + stats['emails_failed'], - 'restricted': services[stats['service']]['restricted'], - 'research_mode': services[stats['service']]['research_mode'] +def create_global_stats(services): + stats = { + 'email': { + 'delivered': 0, + 'failed': 0, + 'requested': 0 + }, + 'sms': { + 'delivered': 0, + 'failed': 0, + 'requested': 0 + } + } + for service in services: + for msg_type, status in itertools.product(('sms', 'email'), ('delivered', 'failed', 'requested')): + stats[msg_type][status] += service['statistics'][msg_type][status] + + for stat in stats.values(): + stat['failure_rate'] = get_formatted_percentage(stat['failed'], stat['requested']) + + return stats + + +def format_stats_by_service(services): + for service in services: + stats = service['statistics'].values() + yield { + 'id': service['id'], + 'name': service['name'], + 'sending': sum((stat['requested'] - stat['delivered'] - stat['failed']) for stat in stats), + 'delivered': sum(stat['delivered'] for stat in stats), + 'failed': sum(stat['failed'] for stat in stats), + 'restricted': service['restricted'], + 'research_mode': service['research_mode'] } - for stats in all_stats - ] diff --git a/app/templates/views/platform-admin.html b/app/templates/views/platform-admin.html index 05e66bcc4..f8c93e534 100644 --- a/app/templates/views/platform-admin.html +++ b/app/templates/views/platform-admin.html @@ -26,20 +26,20 @@
{{ big_number_with_status( - global_stats.emails_delivered, - message_count_label(global_stats.emails_delivered, 'email'), - global_stats.emails_failed, - global_stats.emails_failure_rate, - global_stats.emails_failure_rate|float > 3, + global_stats.email.delivered, + message_count_label(global_stats.email.delivered, 'email'), + global_stats.email.failed, + global_stats.email.failure_rate, + global_stats.email.failure_rate|float > 3, ) }}
{{ big_number_with_status( - global_stats.sms_delivered, - message_count_label(global_stats.sms_delivered, 'sms'), - global_stats.sms_failed, - global_stats.sms_failure_rate, - global_stats.sms_failure_rate|float > 3, + global_stats.sms.delivered, + message_count_label(global_stats.sms.delivered, 'sms'), + global_stats.sms.failed, + global_stats.sms.failure_rate, + global_stats.sms.failure_rate|float > 3, ) }}