From d78d05060d6c74c04f6f19d1fd3da86544ca2ec0 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Sat, 18 May 2013 10:32:32 +0200 Subject: [PATCH] New management command to clean logs. fixes #320 --- modoboa/admin/app_settings.py | 6 +++ modoboa/lib/management/__init__.py | 0 modoboa/lib/management/commands/__init__.py | 0 modoboa/lib/management/commands/cleanlogs.py | 46 ++++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 modoboa/lib/management/__init__.py create mode 100644 modoboa/lib/management/commands/__init__.py create mode 100644 modoboa/lib/management/commands/cleanlogs.py diff --git a/modoboa/admin/app_settings.py b/modoboa/admin/app_settings.py index 4baa7f38c..9ef123652 100644 --- a/modoboa/admin/app_settings.py +++ b/modoboa/admin/app_settings.py @@ -156,6 +156,12 @@ class GeneralParametersForm(parameters.AdminParametersForm): sep3 = SeparatorField(label=ugettext_lazy("Miscellaneous")) + log_maximum_age = forms.IntegerField( + label=ugettext_lazy("Maximum log record age"), + initial=365, + help_text=ugettext_lazy("The maximum age in days of a log record") + ) + items_per_page = forms.IntegerField( label=ugettext_lazy("Items per page"), initial=30, diff --git a/modoboa/lib/management/__init__.py b/modoboa/lib/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/lib/management/commands/__init__.py b/modoboa/lib/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/lib/management/commands/cleanlogs.py b/modoboa/lib/management/commands/cleanlogs.py new file mode 100644 index 000000000..e25ba7604 --- /dev/null +++ b/modoboa/lib/management/commands/cleanlogs.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# coding: utf-8 + +import datetime +from optparse import make_option +from django.core.management.base import BaseCommand +from django.utils import timezone +from modoboa.lib import parameters +from modoboa.lib.models import Log +from modoboa.admin import AdminConsole + + +class Command(BaseCommand): + args = '' + help = 'Log table cleanup' + + option_list = BaseCommand.option_list + ( + make_option('--debug', + action='store_true', + default=False, + help='Activate debug output'), + make_option('--verbose', + action='store_true', + default=False, + help='Display informational messages') + ) + + def __vprint(self, msg): + if not self.verbose: + return + print msg + + def handle(self, *args, **options): + if options["debug"]: + import logging + l = logging.getLogger("django.db.backends") + l.setLevel(logging.DEBUG) + l.addHandler(logging.StreamHandler()) + self.verbose = options["verbose"] + + AdminConsole().load() + log_maximum_age = int(parameters.get_admin("LOG_MAXIMUM_AGE", app="admin")) + self.__vprint("Deleting logs older than %d days..." % log_maximum_age) + limit = timezone.now() - datetime.timedelta(log_maximum_age) + Log.objects.filter(date_created__lt=limit).delete() + self.__vprint("Done.")