Server IP : 85.214.239.14 / Your IP : 18.219.13.74 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /srv/modoboa/env/lib64/python3.5/site-packages/modoboa_amavis/management/commands/ |
Upload File : |
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function, unicode_literals import time from django.core.management.base import BaseCommand from django.db.models import Count from modoboa.parameters import tools as param_tools from ...models import Maddr, Msgrcpt, Msgs from ...modo_extension import Amavis class Command(BaseCommand): args = "" help = "Amavis quarantine cleanup" # NOQA:A003 def add_arguments(self, parser): """Add extra arguments to command line.""" parser.add_argument( "--debug", action="store_true", default=False, help="Activate debug output") parser.add_argument( "--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): Amavis().load() if options["debug"]: import logging log = logging.getLogger("django.db.backends") log.setLevel(logging.DEBUG) log.addHandler(logging.StreamHandler()) self.verbose = options["verbose"] conf = dict(param_tools.get_global_parameters("modoboa_amavis")) flags = ["D"] if conf["released_msgs_cleanup"]: flags += ["R"] self.__vprint("Deleting marked messages...") ids = Msgrcpt.objects.filter(rs__in=flags).values("mail_id").distinct() for msg in Msgs.objects.filter(mail_id__in=ids): if not msg.msgrcpt_set.exclude(rs__in=flags).count(): msg.delete() self.__vprint( "Deleting messages older than {} days...".format( conf["max_messages_age"])) limit = int(time.time()) - (conf["max_messages_age"] * 24 * 3600) Msgs.objects.filter(time_num__lt=limit).delete() self.__vprint("Deleting unreferenced e-mail addresses...") Maddr.objects.annotate( msgs_count=Count("msgs"), msgrcpt_count=Count("msgrcpt") ).filter(msgs_count=0, msgrcpt_count=0).delete() self.__vprint("Done.")