Merge pull request #1618 from GSA/1612-add-in-new-endpoint-for-weekly-by-user_id

1612 add in new endpoint for week stats by user
This commit is contained in:
Carlo Costino
2024-07-03 14:21:49 -04:00
committed by GitHub
6 changed files with 139 additions and 23 deletions

View File

@@ -29,13 +29,13 @@
});
var socket = io();
var serviceId = ctx.getAttribute('data-service-id');
socket.on('connect', function() {
socket.emit('fetch_daily_stats', serviceId);
socket.emit('fetch_daily_stats_by_user');
});
socket.on('daily_stats_update', function(data) {
socket.on('daily_stats_by_user_update', function(data) {
// console.log('Data received:', data);
var labels = [];
var deliveredData = [];
@@ -50,13 +50,14 @@
});
socket.on('error', function(data) {
console.log('Error:', data);
// console.log('Error:', data);
});
var sevenDaysButton = document.getElementById('sevenDaysButton');
if (sevenDaysButton) {
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")
def handle_fetch_daily_stats(service_id):
def handle_fetch_daily_stats():
service_id = session.get('service_id')
if service_id:
date_range = get_stats_date_range()
daily_stats = service_api_client.get_service_notification_statistics_by_day(
@@ -46,6 +47,25 @@ def handle_fetch_daily_stats(service_id):
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 or user_id provided"})
@main.route("/services/<uuid:service_id>/dashboard")
@user_has_permissions("view_activity", "send_messages")
def old_service_dashboard(service_id):
@@ -98,7 +118,6 @@ def service_dashboard(service_id):
partials=get_dashboard_partials(service_id),
job_and_notifications=job_and_notifications,
service_data_retention_days=service_data_retention_days,
service_id=service_id,
)

View File

@@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone
from app.extensions import redis_client
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
@@ -53,6 +53,18 @@ class ServiceAPIClient(NotifyAdminAPIClient):
"/service/{0}/statistics/{1}/{2}".format(service_id, start_date, days),
)["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(timezone.utc).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):
"""
Retrieve a list of services.

View File

@@ -23,7 +23,7 @@
</h2>
<!-- <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, 'totals') }}