mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-08-02 01:04:26 +02:00
Housekeeping tasks
This commit is contained in:
parent
aaed53ec5f
commit
fe604a8a49
3 changed files with 46 additions and 2 deletions
|
@ -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)
|
||||
|
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue