Merge pull request #2769 from alphagov/delete-redis-button

Clear redis cache page
This commit is contained in:
Leo Hemsted
2019-02-19 16:20:55 +00:00
committed by GitHub
23 changed files with 201 additions and 62 deletions

View File

@@ -4,12 +4,8 @@ import pytz
from flask import abort, redirect, render_template, request, session, url_for
from flask_login import current_user
from app import (
convert_to_boolean,
current_service,
service_api_client,
zendesk_client,
)
from app import convert_to_boolean, current_service, service_api_client
from app.extensions import zendesk_client
from app.main import main
from app.main.forms import Feedback, Problem, SupportType, Triage

View File

@@ -1,5 +1,6 @@
import itertools
import re
from collections import OrderedDict
from datetime import datetime
from flask import abort, flash, redirect, render_template, request, url_for
@@ -8,14 +9,19 @@ from notifications_python_client.errors import HTTPError
from requests import RequestException
from app import (
antivirus_client,
complaint_api_client,
letter_jobs_client,
platform_stats_api_client,
service_api_client,
)
from app.extensions import antivirus_client, redis_client
from app.main import main
from app.main.forms import DateFilterForm, PDFUploadForm, ReturnedLettersForm
from app.main.forms import (
ClearCacheForm,
DateFilterForm,
PDFUploadForm,
ReturnedLettersForm,
)
from app.statistics_utils import (
get_formatted_percentage,
get_formatted_percentage_two_dp,
@@ -281,6 +287,56 @@ def platform_admin_letter_validation_preview():
)
@main.route("/platform-admin/clear-cache", methods=['GET', 'POST'])
@login_required
@user_is_platform_admin
def clear_cache():
# note: `service-{uuid}-templates` cache is cleared for both services and templates.
CACHE_KEYS = OrderedDict([
('user', [
'user-????????-????-????-????-????????????',
]),
('service', [
'has_jobs-????????-????-????-????-????????????',
'service-????????-????-????-????-????????????',
'service-????????-????-????-????-????????????-templates',
'service-????????-????-????-????-????????????-data-retention',
'service-????????-????-????-????-????????????-template-folders',
]),
('template', [
'service-????????-????-????-????-????????????-templates',
'template-????????-????-????-????-????????????-version-*',
'template-????????-????-????-????-????????????-versions',
]),
('email_branding', [
'email_branding',
'email_branding-????????-????-????-????-????????????',
]),
('letter_branding', [
'letter_branding',
'letter_branding-????????-????-????-????-????????????',
])
])
form = ClearCacheForm()
form.model_type.choices = [(key, key.replace('_', ' ').title()) for key in CACHE_KEYS]
if form.validate_on_submit():
to_delete = form.model_type.data
num_deleted = max(
redis_client.delete_cache_keys_by_pattern(pattern)
for pattern in CACHE_KEYS[to_delete]
)
msg = 'Removed {} {} object{} from redis'
flash(msg.format(num_deleted, to_delete, 's' if num_deleted != 1 else ''), category='default')
return render_template(
'views/platform-admin/clear-cache.html',
form=form
)
def sum_service_usage(service):
total = 0
for notification_type in service['statistics'].keys():

View File

@@ -23,8 +23,8 @@ from app import (
organisations_client,
service_api_client,
user_api_client,
zendesk_client,
)
from app.extensions import zendesk_client
from app.main import main
from app.main.forms import (
BrandingOptionsEmail,