[RFC 1/4] Automatically remove old events
Stephen Finucane
stephen at that.guru
Wed Jan 10 11:40:21 AEDT 2018
Events are created for most state changes in Patchwork which means
they're fairly numerous. Start removing them after a (configurable)
interval.
Signed-off-by: Stephen Finucane <stephen at that.guru>
---
docs/deployment/configuration.rst | 7 +++++++
docs/usage/overview.rst | 2 ++
patchwork/management/commands/cron.py | 2 ++
patchwork/notifications.py | 18 ++++++++++++++----
patchwork/settings/base.py | 3 +++
...tomatically-remove-old-events-4ee222aaf4a6ea6c.yaml | 8 ++++++++
6 files changed, 36 insertions(+), 4 deletions(-)
create mode 100644 releasenotes/notes/automatically-remove-old-events-4ee222aaf4a6ea6c.yaml
diff --git a/docs/deployment/configuration.rst b/docs/deployment/configuration.rst
index 34748563..3494bd39 100644
--- a/docs/deployment/configuration.rst
+++ b/docs/deployment/configuration.rst
@@ -51,6 +51,13 @@ This is customizable on a per-user basis from the user configuration page.
This option was previously named ``DEFAULT_PATCHES_PER_PAGE``. It was
renamed as cover letters are now supported also.
+``EVENT_VALIDITY_DAYS``
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The number of days to retain :ref:`events` for. After this interval, the
+:ref:`cron management command <deployment-final-steps>` will delete the
+request.
+
``CONFIRMATION_VALIDITY_DAYS``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/usage/overview.rst b/docs/usage/overview.rst
index 802de2f1..7ac265f7 100644
--- a/docs/usage/overview.rst
+++ b/docs/usage/overview.rst
@@ -207,6 +207,8 @@ To-do Lists
Patchwork users can store a to-do list of patches.
+.. _events:
+
Events
------
diff --git a/patchwork/management/commands/cron.py b/patchwork/management/commands/cron.py
index 2be234b1..653fb0b3 100644
--- a/patchwork/management/commands/cron.py
+++ b/patchwork/management/commands/cron.py
@@ -19,6 +19,7 @@
from django.core.management.base import BaseCommand
+from patchwork.notifications import expire_events
from patchwork.notifications import expire_notifications
from patchwork.notifications import send_notifications
@@ -34,3 +35,4 @@ class Command(BaseCommand):
(recipient.email, error))
expire_notifications()
+ expire_events()
diff --git a/patchwork/notifications.py b/patchwork/notifications.py
index 88e96628..b604d579 100644
--- a/patchwork/notifications.py
+++ b/patchwork/notifications.py
@@ -1,5 +1,6 @@
# Patchwork - automated patch tracking system
# Copyright (C) 2008 Jeremy Kerr <jk at ozlabs.org>
+# Copyright (C) 2017 Stephen Finucane <stephen at that.guru>
#
# This file is part of the Patchwork package.
#
@@ -31,6 +32,7 @@ from django.template.loader import render_to_string
from patchwork.models import EmailConfirmation
from patchwork.models import EmailOptout
+from patchwork.models import Event
from patchwork.models import PatchChangeNotification
@@ -109,8 +111,16 @@ def expire_notifications():
EmailConfirmation.objects.filter(q).delete()
# remove inactive users with no pending confirmation
- pending_confs = EmailConfirmation.objects.values('user')
- users = User.objects.filter(is_active=False).exclude(id__in=pending_confs)
+ pending_conf = EmailConfirmation.objects.values('user')
+ User.objects.filter(is_active=False).exclude(id__in=pending_conf).delete()
- # delete users
- users.delete()
+
+def expire_events():
+ """Drop excess events.
+
+ Events are generated for almost everything and shouldn't be allowed
+ to grow unchecked. This task cleans them up.
+ """
+ event_validity = datetime.timedelta(days=settings.EVENTS_VALIDITY_DAYS)
+ q = Q(date__lt=datetime.datetime.now() - event_validity)
+ Event.objects.filter(q).delete()
diff --git a/patchwork/settings/base.py b/patchwork/settings/base.py
index 4b0d5513..30734ece 100644
--- a/patchwork/settings/base.py
+++ b/patchwork/settings/base.py
@@ -204,9 +204,12 @@ LOGGING = {
#
# Patchwork settings
#
+# https://patchwork.readthedocs.io/en/latest/deployment/configuration/
DEFAULT_ITEMS_PER_PAGE = 100
+EVENTS_VALIDITY_DAYS = 14
+
CONFIRMATION_VALIDITY_DAYS = 7
NOTIFICATION_DELAY_MINUTES = 10
diff --git a/releasenotes/notes/automatically-remove-old-events-4ee222aaf4a6ea6c.yaml b/releasenotes/notes/automatically-remove-old-events-4ee222aaf4a6ea6c.yaml
new file mode 100644
index 00000000..92590e49
--- /dev/null
+++ b/releasenotes/notes/automatically-remove-old-events-4ee222aaf4a6ea6c.yaml
@@ -0,0 +1,8 @@
+---
+features:
+ - |
+ The ``EVENTS_VALIDITY_DAYS`` configuration option is added. This configures
+ the number of days that an event should be retained for.
+ - |
+ The ``cron`` management command will now remove events older than
+ ``EVENTS_VALIDITY_DAYS`` days.
--
2.14.3
More information about the Patchwork
mailing list