Initial work on caching activity feed

Server side that is. Ref #162.
This commit is contained in:
2020-05-30 15:50:32 +01:00
parent e45324f5b4
commit 6867359146
6 changed files with 33 additions and 2 deletions

View File

@@ -150,6 +150,14 @@ LOGGING = {
}
}
# Caching
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'cache_table',
}
}
RAVEN_CONFIG = {
'dsn': os.environ.get('RAVEN_DSN'),
# If you are using git, you can also automatically configure the

View File

@@ -10,6 +10,7 @@ from PyPDF2 import PdfFileReader, PdfFileMerger
from django.conf import settings
from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.mail import EmailMessage, EmailMultiAlternatives
from django.core.cache import cache
from django.template.loader import get_template
from django.urls import reverse
from django.utils import timezone
@@ -18,6 +19,7 @@ from premailer import Premailer
from z3c.rml import rml2pdf
from RIGS import models
from versioning.versioning import models_for_feed
def send_eventauthorisation_success_email(instance):
@@ -138,3 +140,13 @@ def send_admin_awaiting_approval_email(user, request, **kwargs):
user_activated.connect(send_admin_awaiting_approval_email)
# TODO Move
def update_cache(sender, instance, created, **kwargs):
cache.clear()
for model in models_for_feed():
post_save.connect(update_cache, sender=model)

View File

@@ -1,4 +1,5 @@
{% extends 'base_rigs.html' %}
{% block title %}RIGS{% endblock %}
{% block content %}

View File

@@ -7,6 +7,7 @@ from PyRIGS.decorators import (api_key_required, has_oembed,
permission_required_with_403)
from RIGS import finance, ical, models, rigboard, views
from versioning import versioning
from django.views.decorators.cache import cache_page
urlpatterns = [
path('', login_required(views.Index.as_view()), name='index'),
@@ -68,7 +69,7 @@ urlpatterns = [
path('rigboard/activity/', permission_required_with_403('RIGS.view_event')(versioning.ActivityTable.as_view()),
name='activity_table'),
path('rigboard/activity/feed/',
permission_required_with_403('RIGS.view_event')(versioning.ActivityFeed.as_view()),
cache_page(60 * 10)(permission_required_with_403('RIGS.view_event')(versioning.ActivityFeed.as_view())),
name='activity_feed'),
path('event/<int:pk>/', has_oembed(oembed_view="event_oembed")(rigboard.EventDetail.as_view()),

View File

@@ -21,12 +21,17 @@ from assets import models as asset_models
from functools import reduce
from PyRIGS.views import GenericListView
from django.views.decorators.cache import never_cache
from django.utils.decorators import method_decorator
"""
Displays the current rig count along with a few other bits and pieces
"""
# Disable browser based caching
@method_decorator(never_cache, name='dispatch')
class Index(generic.TemplateView):
template_name = 'index.html'

View File

@@ -235,6 +235,10 @@ class ActivityTable(generic.ListView):
return context
def models_for_feed():
return [models.Event, models.Venue, models.Person, models.Organisation, models.EventAuthorisation, models.RiskAssessment, asset_models.Asset, asset_models.Supplier]
# Appears on homepage
class ActivityFeed(generic.ListView):
model = RIGSVersion
@@ -243,7 +247,7 @@ class ActivityFeed(generic.ListView):
def get_queryset(self):
versions = RIGSVersion.objects.get_for_multiple_models(
[models.Event, models.Venue, models.Person, models.Organisation, models.EventAuthorisation, models.RiskAssessment, asset_models.Asset, asset_models.Supplier])
models_for_feed())
return versions.order_by("-revision__date_created")
def get_context_data(self, **kwargs):