From 441a2717f2b71f6887423148d4a84484ed7700bb Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Wed, 5 Oct 2016 09:59:46 +0100 Subject: [PATCH] make dashboard jobs list hit job api twice once for scheduled jobs, once for past jobs this ensures that if you have lots of scheduled jobs it can still return your last 50 jobs --- app/main/views/dashboard.py | 26 +++++++++++++++----------- app/main/views/jobs.py | 7 +++---- tests/conftest.py | 2 +- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index c243f02ba..88b7f46af 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -1,6 +1,4 @@ from datetime import datetime, timedelta -from collections import namedtuple -from itertools import groupby import dateutil from flask import ( @@ -20,7 +18,7 @@ from app import ( service_api_client, template_statistics_client ) -from app.statistics_utils import add_rates_to, get_formatted_percentage, add_rate_to_jobs +from app.statistics_utils import get_formatted_percentage, add_rate_to_job from app.utils import user_has_permissions @@ -117,20 +115,26 @@ def aggregate_usage(template_statistics): def get_dashboard_partials(service_id): + # all but scheduled and cancelled + statuses_to_display = [ + 'pending', + 'in progress', + 'finished', + 'sending limits exceeded', + ] template_statistics = aggregate_usage( template_statistics_client.get_template_statistics_for_service(service_id, limit_days=7) ) - jobs = add_rate_to_jobs([ - job for job in job_api_client.get_jobs(service_id, limit_days=7)['data'] - if job['original_file_name'] != current_app.config['TEST_MESSAGE_FILENAME'] - ]) - scheduled_jobs = sorted([ - job for job in jobs if job['job_status'] == 'scheduled' - ], key=lambda job: job['scheduled_for']) + scheduled_jobs = sorted( + job_api_client.get_jobs(service_id, statuses=['scheduled'])['data'], + key=lambda job: job['scheduled_for'] + ) immediate_jobs = [ - job for job in jobs if job['job_status'] not in ['scheduled', 'cancelled'] + add_rate_to_job(job) + for job in job_api_client.get_jobs(service_id, statuses=statuses_to_display)['data'] + if job['original_file_name'] != current_app.config['TEST_MESSAGE_FILENAME'] ] service = service_api_client.get_detailed_service(service_id) diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index 2c4d3b798..e50996c66 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -32,7 +32,6 @@ from app.utils import ( generate_previous_next_dict, user_has_permissions, generate_notifications_csv) -from app.statistics_utils import add_rate_to_jobs from app.utils import get_help_argument @@ -67,10 +66,10 @@ def _set_status_filters(filter_args): def view_jobs(service_id): return render_template( 'views/jobs/jobs.html', - jobs=add_rate_to_jobs([ - job for job in job_api_client.get_jobs(service_id)['data'] + jobs=[ + add_rate_to_job(job) for job in job_api_client.get_jobs(service_id)['data'] if job['job_status'] not in ['scheduled', 'cancelled'] - ]) + ] ) diff --git a/tests/conftest.py b/tests/conftest.py index 5ab5ee18a..1f9f82579 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -901,7 +901,7 @@ def mock_get_job_in_progress(mocker, api_user_active): @pytest.fixture(scope='function') def mock_get_jobs(mocker, api_user_active): - def _get_jobs(service_id, limit_days=None): + def _get_jobs(service_id, limit_days=None, statuses=None): return {"data": [ job_json( service_id,