From af8395956ed2ace4d12c4717189f9b31bd65cd00 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Wed, 12 Feb 2020 11:42:06 +0000 Subject: [PATCH] Cache returned letter summary in Redis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We’re going to start using the returned letters summary to show some info on the dashboard. This means we will be accessing it more often than it changes. And we know exactly when it changes because it’s us manually submitting the references we get from DVLA. This makes it a good candidate for being cached, and Redis is where we cache stuff that we’d otherwise go to the API for. --- app/main/views/platform_admin.py | 3 +++ app/notify_client/service_api_client.py | 1 + tests/app/main/views/test_platform_admin.py | 5 ++++- .../notify_client/test_service_api_client.py | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 2598a4eb6..25b727630 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -360,6 +360,9 @@ def platform_admin_returned_letters(): try: letter_jobs_client.submit_returned_letters(references) + redis_client.delete_cache_keys_by_pattern( + 'service-????????-????-????-????-????????????-returned-letters-summary' + ) except HTTPError as error: if error.status_code == 400: error_references = [ diff --git a/app/notify_client/service_api_client.py b/app/notify_client/service_api_client.py index eaaf5b59e..b89e5c196 100644 --- a/app/notify_client/service_api_client.py +++ b/app/notify_client/service_api_client.py @@ -569,6 +569,7 @@ class ServiceAPIClient(NotifyAdminAPIClient): def get_service_data_retention(self, service_id): return self.get("/service/{}/data-retention".format(service_id)) + @cache.set('service-{service_id}-returned-letters-summary') def get_returned_letter_summary(self, service_id): return self.get("service/{}/returned-letter-summary".format(service_id)) diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index cd22eb384..fb13306d1 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -680,6 +680,7 @@ def test_platform_admin_displays_stats_in_right_boxes_and_with_correct_styling( def test_platform_admin_submit_returned_letters(mocker, platform_admin_client): + redis = mocker.patch('app.main.views.platform_admin.redis_client') mock_client = mocker.patch('app.letter_jobs_client.submit_returned_letters') response = platform_admin_client.post( @@ -688,7 +689,9 @@ def test_platform_admin_submit_returned_letters(mocker, platform_admin_client): ) mock_client.assert_called_once_with(['REF1', 'REF2']) - + redis.delete_cache_keys_by_pattern.assert_called_once_with( + 'service-????????-????-????-????-????????????-returned-letters-summary' + ) assert response.status_code == 302 assert response.location == url_for('main.platform_admin_returned_letters', _external=True) diff --git a/tests/app/notify_client/test_service_api_client.py b/tests/app/notify_client/test_service_api_client.py index 1a1ee7c3a..de7e731be 100644 --- a/tests/app/notify_client/test_service_api_client.py +++ b/tests/app/notify_client/test_service_api_client.py @@ -316,6 +316,25 @@ def test_client_returns_count_of_service_templates( ], {'data_from': 'api'}, ), + ( + service_api_client.get_returned_letter_summary, + [SERVICE_ONE_ID], + [ + call('service-{}-returned-letters-summary'.format(SERVICE_ONE_ID)) + ], + None, + [ + call('service/{}/returned-letter-summary'.format(SERVICE_ONE_ID)) + ], + [ + call( + 'service-{}-returned-letters-summary'.format(SERVICE_ONE_ID), + '{"data_from": "api"}', + ex=604800, + ) + ], + {'data_from': 'api'}, + ), ] ) def test_returns_value_from_cache(