Housekeeping tasks

This commit is contained in:
Eduardo Silva 2024-04-03 12:54:59 -03:00
parent aaed53ec5f
commit fe604a8a49
3 changed files with 46 additions and 2 deletions

View file

@ -7,7 +7,7 @@ from django.utils import timezone
from backup.models import BackupProfile
from backup_data.models import RouterBackup
from router_manager.models import Router, BackupSchedule
from router_manager.models import Router, BackupSchedule, RouterStatus
from routerlib.backup_functions import perform_backup
@ -235,3 +235,44 @@ def view_perform_backup_tasks(request):
return JsonResponse(data)
def view_housekeeping(requests):
max_backup_task_age = timezone.now() - timedelta(hours=18)
data = {
'backup_tasks_expired': 0,
'backup_locks_removed': 0
}
for backup in RouterBackup.objects.filter(created__lt=max_backup_task_age, success=False, error=False):
backup.error = True
backup.error_message = 'Backup task expired'
backup.save()
backup.router.routerstatus.last_backup_failed = timezone.now()
backup.router.routerstatus.save()
if not RouterBackup.objects.filter(router=backup.router, success=False, error=False).exists():
backup.router.routerstatus.backup_lock = None
backup.router.routerstatus.save()
data['backup_tasks_expired'] += 1 # Do not count locks removed for expired tasks
for router_status in RouterStatus.objects.filter(backup_lock__lt=max_backup_task_age):
if not RouterBackup.objects.filter(router=router_status.router, success=False, error=False).exists():
router_status.backup_lock = None
router_status.last_backup_failed = timezone.now()
router_status.save()
data['backup_locks_removed'] += 1
for backup_profile in BackupProfile.objects.all():
if backup_profile.name == 'default':
backup_list = RouterBackup.objects.filter(Q(router__backup_profile=backup_profile) | Q(router__backup_profile__isnull=True))
else:
backup_list = RouterBackup.objects.filter(router__backup_profile=backup_profile)
if backup_profile.retain_backups_on_error:
backup_list = backup_list.filter(router__routerstatus__last_backup_failed__isnull=True)
backup_list.filter(schedule_type='instant', created__lt=timezone.now() - timedelta(days=backup_profile.instant_retention)).delete()
backup_list.filter(schedule_type='monthly', created__lt=timezone.now() - timedelta(days=backup_profile.monthly_retention)).delete()
backup_list.filter(schedule_type='weekly', created__lt=timezone.now() - timedelta(days=backup_profile.weekly_retention)).delete()
backup_list.filter(schedule_type='daily', created__lt=timezone.now() - timedelta(days=backup_profile.daily_retention)).delete()
return JsonResponse(data)

View file

@ -6,7 +6,7 @@ from accounts.views import view_login, view_logout, view_create_first_user
from router_manager.views import view_router_list, view_manage_router, view_router_group_list, view_ssh_key_list, view_manage_router_group, view_manage_sshkey, view_router_details, view_create_instant_backup_task
from backup.views import view_backup_profile_list, view_manage_backup_profile, view_backup_list, view_backup_details, view_debug_run_backups, view_compare_backups, view_backup_download, view_backup_delete
from monitoring.views import view_export_router_list, view_update_router_status
from backup_data.views import view_generate_backup_schedule, view_create_backup_tasks, view_perform_backup_tasks
from backup_data.views import view_generate_backup_schedule, view_create_backup_tasks, view_perform_backup_tasks, view_housekeeping
urlpatterns = [
@ -39,4 +39,5 @@ urlpatterns = [
path('cron/generate_backup_schedule/', view_generate_backup_schedule, name='generate_backup_schedule'),
path('cron/create_backup_tasks/', view_create_backup_tasks, name='create_backup_tasks'),
path('cron/perform_backup_tasks/', view_perform_backup_tasks, name='perform_backup_tasks'),
path('cron/housekeeping/', view_housekeeping, name='housekeeping'),
]

View file

@ -45,6 +45,8 @@ def perform_backup(router_backup: RouterBackup):
router_backup.error_message = ''
router_backup.success = True
router_backup.save()
router_backup.router.routerstatus.last_backup = timezone.now()
router_backup.router.routerstatus.last_backup_failed = None
router_backup.router.routerstatus.backup_lock = None
router_backup.router.routerstatus.save()
else: