mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-12 14:34:05 -05:00
Other than which services are live it’s also interesting to know what services are getting created on Notify. So let’s put the newest ones at the top of the page.
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
import itertools
|
|
from datetime import datetime
|
|
|
|
import pytz
|
|
from flask import render_template
|
|
from flask_login import login_required
|
|
|
|
from app import service_api_client
|
|
from app.main import main
|
|
from app.utils import user_has_permissions
|
|
from app.statistics_utils import get_formatted_percentage
|
|
|
|
|
|
@main.route("/platform-admin")
|
|
@login_required
|
|
@user_has_permissions(admin_override=True)
|
|
def platform_admin():
|
|
services = service_api_client.get_services({'detailed': True})['data']
|
|
return render_template(
|
|
'views/platform-admin.html',
|
|
**get_statistics(sorted(
|
|
services,
|
|
key=lambda service: service['created_at'],
|
|
reverse=True
|
|
))
|
|
)
|
|
|
|
|
|
def get_statistics(services):
|
|
return {
|
|
'global_stats': create_global_stats(services),
|
|
'live_services': format_stats_by_service([
|
|
service for service in services if not service['restricted']
|
|
]),
|
|
'trial_mode_services': format_stats_by_service([
|
|
service for service in services if service['restricted']
|
|
]),
|
|
}
|
|
|
|
|
|
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'],
|
|
'created_at': service['created_at']
|
|
}
|