aircox-radiocampus/aircox/management/commands/archiver.py
2019-08-02 17:06:23 +02:00

57 lines
1.8 KiB
Python

"""
Handle archiving of logs in order to keep database light and fast. The
logs are archived in gzip files, per day.
"""
import logging
from argparse import RawTextHelpFormatter
from django.conf import settings as main_settings
from django.core.management.base import BaseCommand, CommandError
from django.utils import timezone as tz
import aircox.settings as settings
from aircox.models import Log, Station
logger = logging.getLogger('aircox.commands')
class Command (BaseCommand):
help = __doc__
def add_arguments(self, parser):
parser.formatter_class = RawTextHelpFormatter
group = parser.add_argument_group('actions')
group.add_argument(
'-a', '--age', type=int,
default=settings.AIRCOX_LOGS_ARCHIVES_MIN_AGE,
help='minimal age in days of logs to archive. Default is '
'settings.AIRCOX_LOGS_ARCHIVES_MIN_AGE'
)
group.add_argument(
'-f', '--force', action='store_true',
help='if an archive exists yet, force it to be updated'
)
group.add_argument(
'-k', '--keep', action='store_true',
help='keep logs in database instead of deleting them'
)
def handle(self, *args, age, force, keep, **options):
date = tz.now() - tz.timedelta(days=age)
while True:
date = date.replace(
hour=0, minute=0, second=0, microsecond=0
)
logger.info('archive log at date %s', date)
for station in Station.objects.all():
Log.objects.make_archive(
station, date, force=force, keep=keep
)
qs = Log.objects.filter(date__lt=date)
if not qs.exists():
break
date = qs.order_by('-date').first().date