From 63f80851acfc7d8fcb0b53635ec6e0349b2c63bf Mon Sep 17 00:00:00 2001 From: Christophe Siraut Date: Wed, 2 Sep 2020 08:47:32 +0200 Subject: [PATCH] misc: add logtracker.hourly timer --- debian/logtracker.cron.hourly | 3 --- debian/logtracker.logtracker-hourly.service | 19 ++++++++++++++ debian/logtracker.logtracker-hourly.timer | 8 ++++++ debian/rules | 4 +++ .../commands/{purge.py => clean_journal.py} | 2 +- .../mail/management/commands/clean_mail.py | 16 ++++++++++++ .../mail/management/commands/collect.py | 25 ------------------- .../mail/management/commands/collect_mail.py | 8 ++++++ 8 files changed, 56 insertions(+), 29 deletions(-) delete mode 100644 debian/logtracker.cron.hourly create mode 100644 debian/logtracker.logtracker-hourly.service create mode 100644 debian/logtracker.logtracker-hourly.timer rename logtracker/journal/management/commands/{purge.py => clean_journal.py} (88%) create mode 100644 logtracker/mail/management/commands/clean_mail.py delete mode 100644 logtracker/mail/management/commands/collect.py create mode 100644 logtracker/mail/management/commands/collect_mail.py diff --git a/debian/logtracker.cron.hourly b/debian/logtracker.cron.hourly deleted file mode 100644 index 5abda1c..0000000 --- a/debian/logtracker.cron.hourly +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -sudo -u logtracker logtracker purge diff --git a/debian/logtracker.logtracker-hourly.service b/debian/logtracker.logtracker-hourly.service new file mode 100644 index 0000000..a58bd95 --- /dev/null +++ b/debian/logtracker.logtracker-hourly.service @@ -0,0 +1,19 @@ +[Unit] +Description=logtracker hourly tasks +After=network.target logtracker.service + +[Service] +Type=oneshot +Environment=LANG=C.UTF-8 +User=logtracker +Group=logtracker +ExecStart=/usr/bin/logtracker-manage collect_mail +ExecStart=/usr/bin/logtracker-manage clean_mail +ExecStart=/usr/bin/logtracker-manage clean_journal +ExecReload=/bin/kill -HUP $MAINPID +KillSignal=SIGQUIT +ProtectSystem=strict +ProtectHome=yes +ProtectDevices=yes +NoNewPrivileges=yes +PrivateTmp=yes diff --git a/debian/logtracker.logtracker-hourly.timer b/debian/logtracker.logtracker-hourly.timer new file mode 100644 index 0000000..ab507ef --- /dev/null +++ b/debian/logtracker.logtracker-hourly.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Run logtracker tasks + +[Timer] +OnCalendar=hourly + +[Install] +WantedBy=timers.target diff --git a/debian/rules b/debian/rules index 6e88e10..5da2f35 100755 --- a/debian/rules +++ b/debian/rules @@ -8,3 +8,7 @@ export PYBUILD_INSTALL_ARGS_python3=--install-scripts=/usr/lib/logtracker/ %: dh $@ --with python3 --buildsystem=pybuild + +override_dh_installsystemd: + dh_installsystemd + dh_installsystemd -p logtracker --name=logtracker-hourly diff --git a/logtracker/journal/management/commands/purge.py b/logtracker/journal/management/commands/clean_journal.py similarity index 88% rename from logtracker/journal/management/commands/purge.py rename to logtracker/journal/management/commands/clean_journal.py index f930abf..8abc23f 100644 --- a/logtracker/journal/management/commands/purge.py +++ b/logtracker/journal/management/commands/clean_journal.py @@ -11,6 +11,6 @@ class Command(BaseCommand): def handle(self, *args, **options): with connection.cursor() as cursor: cursor.execute( - "DELETE FROM journal_entry WHERE id not in (SELECT id FROM journal_entry ORDER BY id desc LIMIT %s)", + "DELETE FROM journal_entry WHERE id not in (SELECT id FROM journal_entry ORDER BY timestamp desc LIMIT %s)", [options['keep']], ) diff --git a/logtracker/mail/management/commands/clean_mail.py b/logtracker/mail/management/commands/clean_mail.py new file mode 100644 index 0000000..a9c065f --- /dev/null +++ b/logtracker/mail/management/commands/clean_mail.py @@ -0,0 +1,16 @@ +from django.core.management.base import BaseCommand, CommandError +from django.db import connection + + +class Command(BaseCommand): + help = "Remove old entries" + + def add_arguments(self, parser): + parser.add_argument("--keep", type=int, default="100000") + + def handle(self, *args, **options): + with connection.cursor() as cursor: + cursor.execute( + "DELETE FROM mail_mail WHERE id not in (SELECT id FROM journal_entry ORDER BY timestamp desc LIMIT %s)", + [options['keep']], + ) diff --git a/logtracker/mail/management/commands/collect.py b/logtracker/mail/management/commands/collect.py deleted file mode 100644 index 95bdcc8..0000000 --- a/logtracker/mail/management/commands/collect.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.core.management.base import BaseCommand, CommandError -from logtracker.data.models import Entry, Mail, Sender -from logtracker.collectors import parse -from logtracker.utils import lock - - -class Command(BaseCommand): - help = 'Collect entries from exim4 log' - - def add_arguments(self, parser): - parser.add_argument('-l', '--logfile', default='/var/log/exim4/mainlog') - parser.add_argument('--lockfile', default='/var/lock/mainlog.lock') - - def handle(self, logfile, *args, **options): - with lock(options.get('lockfile')): - new_mails = [] - for stamp, identifier, action, data in parse(logfile): - mail, created = Mail.objects.get_or_create(identifier=identifier) - entry = Entry(mail=mail, action=action, data=data, stamp=stamp) - entry.save() - if created: - new_mails.append(mail) - - for mail in new_mails: - mail.handle_exim_data() diff --git a/logtracker/mail/management/commands/collect_mail.py b/logtracker/mail/management/commands/collect_mail.py new file mode 100644 index 0000000..60a4db4 --- /dev/null +++ b/logtracker/mail/management/commands/collect_mail.py @@ -0,0 +1,8 @@ +from django.core.management.base import BaseCommand, CommandError +from logtracker.mail.utils import extract_exim_emails + +class Command(BaseCommand): + help = 'Collect exim entries from journal entries' + + def handle(self, *args, **options): + extract_exim_emails()