mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-07-10 10:14:23 +02:00
Perform backup tasks
This commit is contained in:
parent
a12a126d38
commit
aaed53ec5f
8 changed files with 189 additions and 10 deletions
|
@ -1,11 +1,14 @@
|
|||
from django.shortcuts import render
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from django.db.models import Q
|
||||
from django.http import JsonResponse
|
||||
from django.utils import timezone
|
||||
|
||||
from backup.models import BackupProfile
|
||||
from backup_data.models import RouterBackup
|
||||
from router_manager.models import Router, BackupSchedule
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from django.utils import timezone
|
||||
from routerlib.backup_functions import perform_backup
|
||||
|
||||
|
||||
def next_weekday(now, weekday, hour):
|
||||
|
@ -69,7 +72,7 @@ def calculate_next_backup(backup_profile):
|
|||
return next_daily_backup, next_weekly_backup, next_monthly_backup
|
||||
|
||||
|
||||
def generate_backup_schedule(request):
|
||||
def view_generate_backup_schedule(request):
|
||||
data = {
|
||||
'backup_schedule_created': 0,
|
||||
'daily_backup_schedule_created': 0,
|
||||
|
@ -137,4 +140,98 @@ def generate_backup_schedule(request):
|
|||
schedule.next_monthly_backup = None
|
||||
schedule.save()
|
||||
data['monthly_backup_schedule_removed'] += 1
|
||||
return JsonResponse(data)
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
def create_backup_tasks_from_schedule_list(schedule_list, schedule_type):
|
||||
tasks_created = 0
|
||||
for schedule in schedule_list:
|
||||
if schedule_type == 'daily':
|
||||
schedule_time = schedule.next_daily_backup
|
||||
schedule.next_daily_backup = None
|
||||
elif schedule_type == 'weekly':
|
||||
schedule_time = schedule.next_weekly_backup
|
||||
schedule.next_weekly_backup = None
|
||||
elif schedule_type == 'monthly':
|
||||
schedule_time = schedule.next_monthly_backup
|
||||
schedule.next_monthly_backup = None
|
||||
else:
|
||||
return
|
||||
schedule.save()
|
||||
|
||||
backup = RouterBackup.objects.create(
|
||||
router=schedule.router, schedule_time=schedule_time, schedule_type=schedule_type
|
||||
)
|
||||
tasks_created += 1
|
||||
backup.save()
|
||||
backup.router.routerstatus.backup_lock = backup.schedule_time
|
||||
backup.router.routerstatus.save()
|
||||
|
||||
return tasks_created
|
||||
|
||||
|
||||
def view_create_backup_tasks(request):
|
||||
data = {
|
||||
'daily_backup_tasks_created': 0,
|
||||
'weekly_backup_tasks_created': 0,
|
||||
'monthly_backup_tasks_created': 0
|
||||
}
|
||||
# Priorize monthly, then weekly, then daily.
|
||||
monthly_pending_schedule_list = BackupSchedule.objects.filter(
|
||||
next_monthly_backup__lte=timezone.now(), router__enabled=True, router__routerstatus__backup_lock__isnull=True
|
||||
).filter(
|
||||
Q(router__monitoring=False) | Q(router__monitoring=True, router__routerstatus__status_online=True)
|
||||
)
|
||||
data['monthly_backup_tasks_created'] = create_backup_tasks_from_schedule_list(
|
||||
monthly_pending_schedule_list, 'monthly'
|
||||
)
|
||||
|
||||
weekly_pending_schedule_list = BackupSchedule.objects.filter(
|
||||
next_weekly_backup__lte=timezone.now(), router__enabled=True, router__routerstatus__backup_lock__isnull=True
|
||||
).filter(
|
||||
Q(router__monitoring=False) | Q(router__monitoring=True, router__routerstatus__status_online=True)
|
||||
)
|
||||
data['weekly_backup_tasks_created'] = create_backup_tasks_from_schedule_list(
|
||||
weekly_pending_schedule_list, 'weekly'
|
||||
)
|
||||
|
||||
daily_pending_schedule_list = BackupSchedule.objects.filter(
|
||||
next_daily_backup__lte=timezone.now(), router__enabled=True, router__routerstatus__backup_lock__isnull=True
|
||||
).filter(
|
||||
Q(router__monitoring=False) | Q(router__monitoring=True, router__routerstatus__status_online=True)
|
||||
)
|
||||
data['daily_backup_tasks_created'] = create_backup_tasks_from_schedule_list(
|
||||
daily_pending_schedule_list, 'daily'
|
||||
)
|
||||
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
def view_perform_backup_tasks(request):
|
||||
data = {
|
||||
'backup_tasks_performed': 0
|
||||
}
|
||||
max_execution_time = 45 # seconds
|
||||
execution_start_time = timezone.now()
|
||||
pending_backup_list = RouterBackup.objects.filter(success=False, error=False).filter(
|
||||
Q(schedule_time__lte=timezone.now(), next_retry__isnull=True) | Q(next_retry__lte=timezone.now())
|
||||
).filter(
|
||||
Q(router__monitoring=False) | Q(router__monitoring=True, router__routerstatus__status_online=True)
|
||||
)
|
||||
|
||||
for backup in pending_backup_list:
|
||||
perform_backup(backup)
|
||||
data['backup_tasks_performed'] += 1
|
||||
if backup.router.backup_profile.backup_interval >= 60:
|
||||
break
|
||||
else:
|
||||
if timezone.now() - execution_start_time > timedelta(seconds=max_execution_time):
|
||||
break
|
||||
else:
|
||||
if backup.router.backup_profile.backup_interval > 0:
|
||||
time.sleep(backup.router.backup_profile.backup_interval)
|
||||
if timezone.now() - execution_start_time > timedelta(seconds=max_execution_time):
|
||||
break
|
||||
|
||||
return JsonResponse(data)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue