Added cleanup process for message history.

fix #3638
This commit is contained in:
Antoine Nguyen
2025-08-08 14:33:34 +02:00
parent d16b9292a7
commit 73c3f6fc6a
4 changed files with 26 additions and 0 deletions
+1
View File
@@ -188,6 +188,7 @@ class CoreGlobalParametersSerializer(serializers.Serializer):
inactive_account_threshold = serializers.IntegerField(default=30)
top_notifications_check_interval = serializers.IntegerField(default=30)
log_maximum_age = serializers.IntegerField(default=365)
message_history_maximum_age = serializers.IntegerField(default=180)
items_per_page = serializers.IntegerField(default=30)
default_top_redirection = serializers.ChoiceField(
default="user", choices=[("user", _("User profile"))], required=False
+11
View File
@@ -720,6 +720,17 @@ GLOBAL_PARAMETERS_STRUCT = collections.OrderedDict(
),
},
),
(
"message_history_maximum_age",
{
"label": gettext_lazy(
"Retention time in message history"
),
"help_text": gettext_lazy(
"Retention time (in days) of a message in the message history section"
),
},
),
(
"items_per_page",
{
@@ -5,6 +5,7 @@ from django.core.management.base import BaseCommand
from django.utils import timezone
from modoboa.core.models import Log
from modoboa.maillog.models import Maillog
from modoboa.parameters import tools as param_tools
@@ -41,4 +42,12 @@ class Command(BaseCommand):
self.__vprint(f"Deleting logs older than {log_maximum_age} days...")
limit = timezone.now() - datetime.timedelta(log_maximum_age)
Log.objects.filter(date_created__lt=limit).delete()
message_history_maximum_age = param_tools.get_global_parameter(
"message_history_maximum_age"
)
self.__vprint(
f"Deleting messages in history older than {message_history_maximum_age} days..."
)
limit = timezone.now() - datetime.timedelta(message_history_maximum_age)
Maillog.objects.filter(date__lt=limit).delete()
self.__vprint("Done.")
+5
View File
@@ -16,6 +16,7 @@ from django.urls import reverse
from django.utils import timezone
from modoboa.lib.tests import ModoTestCase, SimpleModoTestCase
from modoboa.maillog import factories as maillog_factories, models as maillog_models
from .. import factories, mocks, models
@@ -60,12 +61,16 @@ class ManagementCommandsTestCase(SimpleModoTestCase):
def test_clean_logs(self):
"""Run cleanlogs command."""
management.call_command("load_initial_data", "--no-frontend")
log1 = factories.LogFactory()
factories.LogFactory()
log1.date_created -= relativedelta(years=2)
log1.save(update_fields=["date_created"])
maillog_factories.MaillogFactory(date=timezone.now() - relativedelta(days=190))
maillog_factories.MaillogFactory()
management.call_command("cleanlogs")
self.assertEqual(models.Log.objects.count(), 1)
self.assertEqual(maillog_models.Maillog.objects.count(), 1)
def test_init_data_non_duplicate_client_creation(self):
"""Test that the load_initial_data command does not create duplicates