fetch notification stats by user

This commit is contained in:
Beverly Nguyen
2024-06-12 14:32:25 -07:00
parent 749935e94d
commit 0fa6e59a49
4 changed files with 38 additions and 12 deletions

View File

@@ -12,7 +12,7 @@
labels: [], labels: [],
datasets: [ datasets: [
{ {
label: 'Delivered', label: 'Requested',
data: [], data: [],
backgroundColor: '#0076d6', backgroundColor: '#0076d6',
stack: 'Stack 0' stack: 'Stack 0'
@@ -29,23 +29,24 @@
}); });
var socket = io(); var socket = io();
var serviceId = ctx.getAttribute('data-service-id');
socket.on('connect', function() { socket.on('connect', function() {
socket.emit('fetch_daily_stats', serviceId); socket.emit('fetch_daily_stats_by_user');
console.log('connected')
}); });
socket.on('daily_stats_update', function(data) { socket.on('daily_stats_by_user_update', function(data) {
console.log('Data received:', data);
var labels = []; var labels = [];
var deliveredData = []; var requestedData = [];
for (var date in data) { for (var date in data) {
labels.push(date); labels.push(date);
deliveredData.push(data[date].sms.delivered); requestedData.push(data[date].sms.requested);
} }
myBarChart.data.labels = labels; myBarChart.data.labels = labels;
myBarChart.data.datasets[0].data = deliveredData; myBarChart.data.datasets[0].data = requestedData;
myBarChart.update(); myBarChart.update();
}); });
@@ -56,7 +57,8 @@
var sevenDaysButton = document.getElementById('sevenDaysButton'); var sevenDaysButton = document.getElementById('sevenDaysButton');
if (sevenDaysButton) { if (sevenDaysButton) {
sevenDaysButton.addEventListener('click', function() { sevenDaysButton.addEventListener('click', function() {
socket.emit('fetch_daily_stats', serviceId); socket.emit('fetch_daily_stats_by_user');
console.log('clicked')
}); });
} }
} }

View File

@@ -35,7 +35,8 @@ from notifications_utils.recipients import format_phone_number_human_readable
@socketio.on("fetch_daily_stats") @socketio.on("fetch_daily_stats")
def handle_fetch_daily_stats(service_id): def handle_fetch_daily_stats():
service_id = session.get('service_id')
if service_id: if service_id:
date_range = get_stats_date_range() date_range = get_stats_date_range()
daily_stats = service_api_client.get_service_notification_statistics_by_day( daily_stats = service_api_client.get_service_notification_statistics_by_day(
@@ -46,6 +47,20 @@ def handle_fetch_daily_stats(service_id):
emit("error", {"error": "No service_id provided"}) emit("error", {"error": "No service_id provided"})
@socketio.on("fetch_daily_stats_by_user")
def handle_fetch_daily_stats_by_user():
service_id = session.get('service_id')
user_id = session.get('user_id')
if service_id and user_id:
date_range = get_stats_date_range()
daily_stats_by_user = service_api_client.get_user_service_notification_statistics_by_day(
service_id, user_id, start_date=date_range["start_date"], days=date_range["days"]
)
emit("daily_stats_by_user_update", daily_stats_by_user)
else:
emit("error", {"error": "No service_id provided"})
@main.route("/services/<uuid:service_id>/dashboard") @main.route("/services/<uuid:service_id>/dashboard")
@user_has_permissions("view_activity", "send_messages") @user_has_permissions("view_activity", "send_messages")
def old_service_dashboard(service_id): def old_service_dashboard(service_id):
@@ -98,7 +113,6 @@ def service_dashboard(service_id):
partials=get_dashboard_partials(service_id), partials=get_dashboard_partials(service_id),
job_and_notifications=job_and_notifications, job_and_notifications=job_and_notifications,
service_data_retention_days=service_data_retention_days, service_data_retention_days=service_data_retention_days,
service_id=service_id,
) )

View File

@@ -53,6 +53,16 @@ class ServiceAPIClient(NotifyAdminAPIClient):
"/service/{0}/statistics/{1}/{2}".format(service_id, start_date, days), "/service/{0}/statistics/{1}/{2}".format(service_id, start_date, days),
)["data"] )["data"]
def get_user_service_notification_statistics_by_day(
self, service_id, user_id, start_date=None, days=None
):
if start_date is None:
start_date = datetime.now().strftime("%Y-%m-%d")
return self.get(
"/service/{0}/statistics/user/{1}/{2}/{3}".format(service_id, user_id, start_date, days),
)["data"]
def get_services(self, params_dict=None): def get_services(self, params_dict=None):
""" """
Retrieve a list of services. Retrieve a list of services.

View File

@@ -22,8 +22,8 @@
Messages sent Messages sent
</h2> </h2>
<!-- <button id="sevenDaysButton">7 Days</button> <button id="sevenDaysButton">7 Days</button>
<canvas id="myChart" data-service-id="{{ service_id }}"></canvas> --> <canvas id="myChart"></canvas>
{{ ajax_block(partials, updates_url, 'inbox') }} {{ ajax_block(partials, updates_url, 'inbox') }}
{{ ajax_block(partials, updates_url, 'totals') }} {{ ajax_block(partials, updates_url, 'totals') }}