mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-16 20:49:00 -04:00
Check if any jobs exist before querying jobs
At the moment the dashboard does two API calls to find out if a service has: 1. Scheduled jobs 2. Normal jobs API calls are slow because they are synchronous, go over the network and touch the database. We can’t cache these API calls because: - a scheduled job could become a normal job at any time - the statistics on a normal job are constantly updating However there are plenty of services which don’t have any jobs, and probably never will. And finding out if a service has any jobs is reliably cacheable (because as soon as a service creates its first job it has some jobs). So this commit: - refactors the way we get scheduled/normal jobs into the job_api_client to make the view a bit slimmer - makes an additional, Redis-wrapped call to find out if any jobs exist before trying to get the jobs This should result in a speedup on the dashboard, and can be used in the future if there’s anywhere else we want to show or hide something depending on whether a service has created any jobs (I have some ideas).
This commit is contained in:
@@ -275,21 +275,18 @@ def aggregate_usage(template_statistics, sort_key='count'):
|
||||
|
||||
|
||||
def get_dashboard_partials(service_id):
|
||||
# all but scheduled and cancelled
|
||||
statuses_to_display = job_api_client.JOB_STATUSES - {'scheduled', 'cancelled'}
|
||||
|
||||
template_statistics = aggregate_usage(
|
||||
template_statistics_client.get_template_statistics_for_service(service_id, limit_days=7)
|
||||
)
|
||||
|
||||
scheduled_jobs = sorted(
|
||||
job_api_client.get_jobs(service_id, statuses=['scheduled'])['data'],
|
||||
key=lambda job: job['scheduled_for']
|
||||
)
|
||||
immediate_jobs = [
|
||||
add_rate_to_job(job)
|
||||
for job in job_api_client.get_jobs(service_id, limit_days=7, statuses=statuses_to_display)['data']
|
||||
]
|
||||
scheduled_jobs, immediate_jobs = [], []
|
||||
if job_api_client.has_jobs(service_id):
|
||||
scheduled_jobs = job_api_client.get_scheduled_jobs(service_id)
|
||||
immediate_jobs = [
|
||||
add_rate_to_job(job)
|
||||
for job in job_api_client.get_immediate_jobs(service_id)
|
||||
]
|
||||
|
||||
stats = service_api_client.get_service_statistics(service_id, today_only=False)
|
||||
column_width, max_notifiction_count = get_column_properties(
|
||||
number_of_columns=(
|
||||
|
||||
@@ -42,9 +42,7 @@ from app.utils import (
|
||||
@user_has_permissions('view_activity')
|
||||
def view_jobs(service_id):
|
||||
page = int(request.args.get('page', 1))
|
||||
# all but scheduled and cancelled
|
||||
statuses_to_display = job_api_client.JOB_STATUSES - {'scheduled', 'cancelled'}
|
||||
jobs_response = job_api_client.get_jobs(service_id, statuses=statuses_to_display, page=page)
|
||||
jobs_response = job_api_client.get_page_of_jobs(service_id, page=page)
|
||||
jobs = [
|
||||
add_rate_to_job(job) for job in jobs_response['data']
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user