mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-07 15:18:24 -04:00
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:
@@ -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
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user