mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-09 06:33:52 -05:00
* Refactored reports to use pregenerated docs instead * Fixed e2e test * Fixed anothr bug * Cleanup * Fixed timezone conversion * Updated ref files * Updated reference files, refreshed ui/ux for report generation. Buttons toggle on and off based on if report exists * Fixed linting errors, removed pytz * Fixed test failure * e2e test fix * Speeding up unit tests * Removed python time library that was causing performance issues with unit tests * Updated poetry lock * Unit test improvements * Made change that ken reccomended
82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
from datetime import datetime
|
|
from functools import reduce
|
|
|
|
from dateutil import parser
|
|
|
|
from app.utils.csv import get_user_preferred_timezone_obj
|
|
|
|
|
|
def sum_of_statistics(delivery_statistics):
|
|
statistics_keys = (
|
|
"emails_delivered",
|
|
"emails_requested",
|
|
"emails_failed",
|
|
"sms_requested",
|
|
"sms_delivered",
|
|
"sms_failed",
|
|
)
|
|
|
|
if not delivery_statistics or not delivery_statistics[0]:
|
|
return {key: 0 for key in statistics_keys}
|
|
|
|
return reduce(
|
|
lambda x, y: {key: x.get(key, 0) + y.get(key, 0) for key in statistics_keys},
|
|
delivery_statistics,
|
|
)
|
|
|
|
|
|
def add_rates_to(delivery_statistics):
|
|
preferred_tz = get_user_preferred_timezone_obj()
|
|
return dict(
|
|
emails_failure_rate=get_formatted_percentage(
|
|
delivery_statistics["emails_failed"],
|
|
delivery_statistics["emails_requested"],
|
|
),
|
|
sms_failure_rate=get_formatted_percentage(
|
|
delivery_statistics["sms_failed"], delivery_statistics["sms_requested"]
|
|
),
|
|
week_end_datetime=parser.parse(
|
|
delivery_statistics.get("week_end", str(datetime.now(preferred_tz)))
|
|
),
|
|
**delivery_statistics
|
|
)
|
|
|
|
|
|
def get_formatted_percentage(x, tot):
|
|
"""
|
|
Return a percentage to one decimal place (respecting )
|
|
"""
|
|
return "{0:.1f}".format((float(x) / tot * 100)) if tot else "0"
|
|
|
|
|
|
def get_formatted_percentage_two_dp(x, tot):
|
|
"""
|
|
Return a percentage to two decimal places
|
|
"""
|
|
return "{0:.2f}".format((float(x) / tot * 100)) if tot else "0"
|
|
|
|
|
|
def statistics_by_state(statistics):
|
|
return {
|
|
"sms": {
|
|
"processed": statistics["sms_requested"],
|
|
"sending": (
|
|
statistics["sms_requested"]
|
|
- statistics["sms_failed"]
|
|
- statistics["sms_delivered"]
|
|
),
|
|
"delivered": statistics["sms_delivered"],
|
|
"failed": statistics["sms_failed"],
|
|
},
|
|
"email": {
|
|
"processed": statistics["emails_requested"],
|
|
"sending": (
|
|
statistics["emails_requested"]
|
|
- statistics["emails_failed"]
|
|
- statistics["emails_delivered"]
|
|
),
|
|
"delivered": statistics["emails_delivered"],
|
|
"failed": statistics["emails_failed"],
|
|
},
|
|
}
|