Files
notifications-admin/app/main/views/platform_admin.py

77 lines
2.3 KiB
Python
Raw Normal View History

import itertools
from datetime import datetime
import pytz
2016-05-24 15:52:44 +01:00
from flask import render_template
from flask_login import login_required
2016-05-24 15:52:44 +01:00
from app import service_api_client
2016-05-24 15:52:44 +01:00
from app.main import main
from app.utils import user_has_permissions
from app.statistics_utils import get_formatted_percentage
2016-05-26 14:36:23 +01:00
2016-05-24 15:52:44 +01:00
@main.route("/platform-admin")
@login_required
@user_has_permissions(admin_override=True)
def platform_admin():
services = service_api_client.get_services({'detailed': True})['data']
2016-05-24 15:52:44 +01:00
return render_template(
'views/platform-admin.html',
**get_statistics(sorted(
services,
key=lambda service: service['created_at'],
reverse=True
))
2016-05-24 15:52:44 +01:00
)
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']
}