from datetime import datetime, timedelta from itertools import groupby from operator import itemgetter from statistics import mean import pytz from flask import render_template from app import performance_dashboard_api_client, status_api_client from app.main import main from app.utils.csv import get_user_preferred_timezone @main.route("/performance") def performance(): preferred_tz = pytz.timezone(get_user_preferred_timezone()) stats = performance_dashboard_api_client.get_performance_dashboard_stats( start_date=(datetime.now(preferred_tz) - timedelta(days=7)).date(), end_date=datetime.now(preferred_tz).date(), ) stats["organizations_using_notify"] = sorted( [ { "organization_name": organization_name or "No organization", "count_of_live_services": len(list(group)), } for organization_name, group in groupby( stats["services_using_notify"], itemgetter("organization_name"), ) ], key=itemgetter("organization_name"), ) stats["average_percentage_under_10_seconds"] = mean( [row["percentage_under_10_seconds"] for row in stats["processing_time"]] or [0] ) stats["count_of_live_services_and_organizations"] = ( status_api_client.get_count_of_live_services_and_organizations() ) return render_template("views/performance.html", **stats)