forked from rc/aircox
add archiver
This commit is contained in:
parent
7683a485cf
commit
01325a258a
57
aircox/management/commands/archiver.py
Normal file
57
aircox/management/commands/archiver.py
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
"""
|
||||||
|
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.tools')
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
|
@ -20,9 +20,9 @@ ensure('AIRCOX_DEFAULT_USER_GROUPS', {
|
||||||
'add_comment', 'edit_comment', 'delete_comment',
|
'add_comment', 'edit_comment', 'delete_comment',
|
||||||
),
|
),
|
||||||
# ensure user can log in using Wagtail
|
# ensure user can log in using Wagtail
|
||||||
'Editors': None
|
'Editors': None,
|
||||||
# ensure user can publish
|
# ensure user can publish
|
||||||
'Moderators': None
|
'Moderators': None,
|
||||||
})
|
})
|
||||||
|
|
||||||
# Directory for the programs data
|
# Directory for the programs data
|
||||||
|
|
|
@ -8,3 +8,8 @@ scripts/launch_in_venv ./manage.py diffusions --update --clean --check --mode au
|
||||||
scripts/launch_in_venv ./manage.py diffusions --update --next-month --mode auto
|
scripts/launch_in_venv ./manage.py diffusions --update --next-month --mode auto
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
|
# - archiver monitoring for the next month
|
||||||
|
scripts/launch_in_venv ./manage.py archiver -a 60
|
||||||
|
cd -
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user