summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2026-08-11 09:48:08 +0000
committerMagnus Hagander2026-08-11 09:48:08 +0000
commitc8650e629e2063c423895d8a9ed2d6bf584ef980 (patch)
tree932e57644de6d01e56ecb55493b0ae143fdc7e4d
parent1db54294310c5eddef3e3bd114238079ea0da42b (diff)
Consistently use xkey purges in varnishHEADmaster
We used a mix of xkey (for redirector) and bans (for main page). Instead, add xkey tags to existing indexes (which is the main page and the RSS feeds) as well as the feeds list, and do purges just on xkey. This also means we can do fewer purges, since xkey can do more than one at a time.
-rw-r--r--hamnadmin/hamnadmin/register/feeds.py5
-rw-r--r--hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py4
-rw-r--r--hamnadmin/hamnadmin/register/views.py18
-rw-r--r--hamnadmin/hamnadmin/util/varnish.py18
4 files changed, 29 insertions, 16 deletions
diff --git a/hamnadmin/hamnadmin/register/feeds.py b/hamnadmin/hamnadmin/register/feeds.py
index 5c02972..7bf3f06 100644
--- a/hamnadmin/hamnadmin/register/feeds.py
+++ b/hamnadmin/hamnadmin/register/feeds.py
@@ -45,3 +45,8 @@ class PostFeed(Feed):
return "Unable to clean HTML"
else:
return item.txt
+
+ def __call__(self, request, *args, **kwargs):
+ r = super().__call__(request, *args, **kwargs)
+ r['xkey'] = 'index'
+ return r
diff --git a/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py b/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py
index 13e8faf..d0bfad4 100644
--- a/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py
+++ b/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py
@@ -11,7 +11,7 @@ from datetime import datetime
from hamnadmin.register.models import Blog, Post, AggregatorLog
from hamnadmin.util.aggregate import FeedFetcher, ParserGotRedirect
from hamnadmin.mailqueue.util import send_simple_mail
-from hamnadmin.util.varnish import purge_root_and_feeds
+from hamnadmin.util.varnish import purge_xkey
class BreakoutException(Exception):
@@ -232,7 +232,7 @@ class Command(BaseCommand):
pass
if total_entries > 0 and not self.debug:
- purge_root_and_feeds()
+ purge_xkey('index')
def _fetch_one_feed(self, fetcher):
if self.full:
diff --git a/hamnadmin/hamnadmin/register/views.py b/hamnadmin/hamnadmin/register/views.py
index db08753..e8c2474 100644
--- a/hamnadmin/hamnadmin/register/views.py
+++ b/hamnadmin/hamnadmin/register/views.py
@@ -8,7 +8,7 @@ from django.contrib import messages
from hamnadmin.register.models import Post, Blog, Team, AggregatorLog, AuditEntry, ModeratorNotes
from hamnadmin.mailqueue.util import send_simple_mail
-from hamnadmin.util.varnish import purge_url, purge_xkey, purge_root_and_feeds
+from hamnadmin.util.varnish import xkey, purge_xkey
import datetime
@@ -16,6 +16,7 @@ from .forms import BlogEditForm, ModerateRejectForm
# Public planet
+@xkey('index')
def planet_home(request):
statdate = datetime.datetime.now() - datetime.timedelta(days=61)
posts = Post.objects.select_related('feed', 'feed__team').filter(hidden=False, feed__approved=True).order_by('-dat')[:30]
@@ -29,6 +30,7 @@ def planet_home(request):
})
+@xkey('feedlist')
def planet_feeds(request):
return render(request, 'feeds.tmpl', {
'feeds': Blog.objects.filter(approved=True, archived=False),
@@ -119,8 +121,7 @@ def edit(request, id=None):
messages.warning(request, "Blog has been resubmitted for moderation, and is temporarily disabled.")
- purge_root_and_feeds()
- purge_url('/feeds.html')
+ purge_xkey("index feedlist")
return HttpResponseRedirect("/register/edit/{0}/".format(obj.id))
@@ -173,8 +174,7 @@ def delete(request, id):
)
blog.delete()
messages.info(request, "Blog deleted.")
- purge_root_and_feeds()
- purge_url('/feeds.html')
+ purge_xkey('index feedlist')
return HttpResponseRedirect("/register/")
@@ -252,8 +252,7 @@ def __setposthide(request, blogid, postid, status):
post.save(update_fields=['hidden'])
AuditEntry(request.user.username, 'Set post %s on blog %s visibility to %s' % (postid, blogid, status)).save()
messages.info(request, 'Set post "%s" to %s' % (post.title, status and "hidden" or "visible"), extra_tags="top")
- purge_root_and_feeds()
- purge_xkey('post_{}'.format(post.id))
+ purge_xkey('index post_{}'.format(post.id))
return HttpResponseRedirect("/register/edit/{0}/".format(blogid))
@@ -284,7 +283,7 @@ def blogpost_delete(request, blogid, postid):
post.delete()
AuditEntry(request.user.username, 'Deleted post %s from blog %s' % (postid, blogid)).save()
messages.info(request, 'Deleted post "%s". It will be reloaded on the next scheduled crawl.' % title)
- purge_root_and_feeds()
+ purge_xkey('index')
return HttpResponseRedirect("/register/edit/{0}/".format(blogid))
@@ -376,7 +375,6 @@ def moderate_approve(request, blogid):
messages.info(request, "Blog {0} approved, notification sent to moderators and owner.".format(blog.feedurl))
- purge_root_and_feeds()
- purge_url('/feeds.html')
+ purge_xkey('index feedlist')
return HttpResponseRedirect("/register/moderate/")
diff --git a/hamnadmin/hamnadmin/util/varnish.py b/hamnadmin/hamnadmin/util/varnish.py
index d2f6fe6..4accd00 100644
--- a/hamnadmin/hamnadmin/util/varnish.py
+++ b/hamnadmin/hamnadmin/util/varnish.py
@@ -3,6 +3,20 @@ from django.conf import settings
import requests
+def xkey(key):
+ "Add a specific xkey to the page"
+ def _xkey(fn):
+ def __xkey(request, *_args, **_kwargs):
+ resp = fn(request, *_args, **_kwargs)
+ if 'xkey' in resp:
+ resp['xkey'] += ' ' + key
+ else:
+ resp['xkey'] = key
+ return resp
+ return __xkey
+ return _xkey
+
+
def purge_url(url):
if not settings.VARNISH_URL:
print("Not purging {0}".format(url))
@@ -29,7 +43,3 @@ def purge_xkey(xkey):
raise Exception("Invalid response code %s" % r.status_code)
except Exception as e:
raise Exception("Failed to purge xkey '{0}': {1}'".format(xkey, e))
-
-
-def purge_root_and_feeds():
- purge_url('/(|rss20.*)$')