forked from rc/aircox
		
	- !88 pytest on existing tests - !89 reorganise settings (! see notes for deployment) Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: rc/aircox#92
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Handle archiving of logs in order to keep database light and fast.
 | 
						|
 | 
						|
The logs are archived in gzip files, per day.
 | 
						|
"""
 | 
						|
import datetime
 | 
						|
import logging
 | 
						|
from argparse import RawTextHelpFormatter
 | 
						|
 | 
						|
from django.core.management.base import BaseCommand
 | 
						|
from django.utils import timezone as tz
 | 
						|
 | 
						|
from aircox.conf import settings
 | 
						|
from aircox.models import Log
 | 
						|
from aircox.models.log import LogArchiver
 | 
						|
 | 
						|
logger = logging.getLogger("aircox.commands")
 | 
						|
 | 
						|
 | 
						|
__all__ = ("Command",)
 | 
						|
 | 
						|
 | 
						|
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.LOGS_ARCHIVES_AGE,
 | 
						|
            help="minimal age in days of logs to archive. Default is "
 | 
						|
            "settings.LOGS_ARCHIVES_AGE",
 | 
						|
        )
 | 
						|
        group.add_argument(
 | 
						|
            "-k",
 | 
						|
            "--keep",
 | 
						|
            action="store_true",
 | 
						|
            help="keep logs in database instead of deleting them",
 | 
						|
        )
 | 
						|
 | 
						|
    def handle(self, *args, age, keep, **options):
 | 
						|
        date = datetime.date.today() - tz.timedelta(days=age)
 | 
						|
        # FIXME: mysql support?
 | 
						|
        logger.info("archive logs for %s and earlier", date)
 | 
						|
        count = LogArchiver().archive(Log.objects.filter(date__date__lte=date))
 | 
						|
        logger.info("total log archived %d", count)
 |