diff --git a/modoboa/core/api/v2/serializers.py b/modoboa/core/api/v2/serializers.py index 745c88216..9b4ae1672 100644 --- a/modoboa/core/api/v2/serializers.py +++ b/modoboa/core/api/v2/serializers.py @@ -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 diff --git a/modoboa/core/app_settings.py b/modoboa/core/app_settings.py index e919d9a07..2741107ba 100644 --- a/modoboa/core/app_settings.py +++ b/modoboa/core/app_settings.py @@ -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", { diff --git a/modoboa/core/management/commands/cleanlogs.py b/modoboa/core/management/commands/cleanlogs.py index f44d6dabd..46f3d2ac5 100644 --- a/modoboa/core/management/commands/cleanlogs.py +++ b/modoboa/core/management/commands/cleanlogs.py @@ -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.") diff --git a/modoboa/core/tests/test_core.py b/modoboa/core/tests/test_core.py index e234ad88a..77cec3457 100644 --- a/modoboa/core/tests/test_core.py +++ b/modoboa/core/tests/test_core.py @@ -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