rewrite platform-admin page to use new non-stats endpoints

had to change because format from api is slightly different
This commit is contained in:
Leo Hemsted
2016-08-23 17:38:27 +01:00
parent bcfe2a90e1
commit 7864f9455d
2 changed files with 49 additions and 32 deletions

View File

@@ -1,3 +1,4 @@
import itertools
from datetime import datetime from datetime import datetime
import pytz import pytz
@@ -7,7 +8,7 @@ from flask_login import login_required
from app import statistics_api_client, service_api_client from app import statistics_api_client, service_api_client
from app.main import main from app.main import main
from app.utils import user_has_permissions 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") @main.route("/platform-admin")
@@ -21,30 +22,46 @@ def platform_admin():
def get_statistics(): def get_statistics():
day = datetime.now(tz=pytz.timezone('Europe/London')).date() services = service_api_client.get_services({'detailed': True})['data']
all_stats = statistics_api_client.get_statistics_for_all_services_for_day(day)['data'] service_stats = format_stats_by_service(services)
services = service_api_client.get_services()['data']
service_stats = format_stats_by_service(all_stats, services)
return { return {
'global_stats': add_rates_to(sum_of_statistics(all_stats)), 'global_stats': create_global_stats(services),
'service_stats': service_stats 'service_stats': service_stats
} }
def format_stats_by_service(all_stats, services): def create_global_stats(services):
services = {service['id']: service for service in services} stats = {
return [ 'email': {
{ 'delivered': 0,
'id': stats['service'], 'failed': 0,
'name': services[stats['service']]['name'], 'requested': 0
'sending': ( },
(stats['sms_requested'] - stats['sms_delivered'] - stats['sms_failed']) + 'sms': {
(stats['emails_requested'] - stats['emails_delivered'] - stats['emails_failed']) 'delivered': 0,
), 'failed': 0,
'delivered': stats['sms_delivered'] + stats['emails_delivered'], 'requested': 0
'failed': stats['sms_failed'] + stats['emails_failed'], }
'restricted': services[stats['service']]['restricted'], }
'research_mode': services[stats['service']]['research_mode'] 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
]

View File

@@ -26,20 +26,20 @@
<div class="grid-row bottom-gutter"> <div class="grid-row bottom-gutter">
<div class="column-half"> <div class="column-half">
{{ big_number_with_status( {{ big_number_with_status(
global_stats.emails_delivered, global_stats.email.delivered,
message_count_label(global_stats.emails_delivered, 'email'), message_count_label(global_stats.email.delivered, 'email'),
global_stats.emails_failed, global_stats.email.failed,
global_stats.emails_failure_rate, global_stats.email.failure_rate,
global_stats.emails_failure_rate|float > 3, global_stats.email.failure_rate|float > 3,
) }} ) }}
</div> </div>
<div class="column-half"> <div class="column-half">
{{ big_number_with_status( {{ big_number_with_status(
global_stats.sms_delivered, global_stats.sms.delivered,
message_count_label(global_stats.sms_delivered, 'sms'), message_count_label(global_stats.sms.delivered, 'sms'),
global_stats.sms_failed, global_stats.sms.failed,
global_stats.sms_failure_rate, global_stats.sms.failure_rate,
global_stats.sms_failure_rate|float > 3, global_stats.sms.failure_rate|float > 3,
) }} ) }}
</div> </div>
</div> </div>