2016-08-23 17:38:27 +01:00
|
|
|
import itertools
|
2016-05-25 16:51:09 +01:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
import pytz
|
2016-05-24 15:52:44 +01:00
|
|
|
from flask import render_template
|
2016-05-31 11:08:22 +01:00
|
|
|
from flask_login import login_required
|
2016-05-24 15:52:44 +01:00
|
|
|
|
2016-08-24 16:26:08 +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
|
2016-08-23 17:38:27 +01:00
|
|
|
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():
|
2016-08-24 17:37:36 +01:00
|
|
|
services = service_api_client.get_services({'detailed': True})['data']
|
2016-05-24 15:52:44 +01:00
|
|
|
return render_template(
|
2016-05-25 16:51:09 +01:00
|
|
|
'views/platform-admin.html',
|
2016-09-12 11:40:21 +01:00
|
|
|
**get_statistics(sorted(
|
|
|
|
|
services,
|
|
|
|
|
key=lambda service: service['created_at'],
|
|
|
|
|
reverse=True
|
|
|
|
|
))
|
2016-05-24 15:52:44 +01:00
|
|
|
)
|
2016-05-25 16:51:09 +01:00
|
|
|
|
|
|
|
|
|
2016-08-24 17:37:36 +01:00
|
|
|
def get_statistics(services):
|
2016-05-31 11:08:22 +01:00
|
|
|
return {
|
2016-08-23 17:38:27 +01:00
|
|
|
'global_stats': create_global_stats(services),
|
2016-09-12 11:38:16 +01:00
|
|
|
'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']
|
|
|
|
|
]),
|
2016-05-31 11:08:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-08-23 17:38:27 +01:00
|
|
|
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'],
|
2016-09-12 11:40:21 +01:00
|
|
|
'research_mode': service['research_mode'],
|
|
|
|
|
'created_at': service['created_at']
|
2016-05-31 11:08:22 +01:00
|
|
|
}
|