Perform backup tasks

This commit is contained in:
Eduardo Silva 2024-04-03 11:12:11 -03:00
parent a12a126d38
commit aaed53ec5f
8 changed files with 189 additions and 10 deletions

View file

@ -0,0 +1,18 @@
# Generated by Django 5.0.3 on 2024-04-03 11:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('router_manager', '0010_alter_router_router_type'),
]
operations = [
migrations.AddField(
model_name='routerstatus',
name='backup_lock',
field=models.DateTimeField(blank=True, null=True),
),
]

View file

@ -0,0 +1,18 @@
# Generated by Django 5.0.3 on 2024-04-03 14:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('router_manager', '0011_routerstatus_backup_lock'),
]
operations = [
migrations.AlterField(
model_name='router',
name='router_type',
field=models.CharField(choices=[('monitoring', 'Monitoring Only'), ('routeros', 'Mikrotik (RouterOS)')], max_length=100),
),
]

View file

@ -26,7 +26,7 @@ class Router(models.Model):
monitoring = models.BooleanField(default=True)
backup_profile = models.ForeignKey(BackupProfile, on_delete=models.SET_NULL, null=True, blank=True)
router_type = models.CharField(max_length=100, choices=(('monitoring', 'Monitoring Only'), ('routeros', 'Mikrotik (RouterOS)'), ('openwrt', 'OpenWRT')))
router_type = models.CharField(max_length=100, choices=(('monitoring', 'Monitoring Only'), ('routeros', 'Mikrotik (RouterOS)')))
enabled = models.BooleanField(default=True)
updated = models.DateTimeField(auto_now=True)
@ -43,6 +43,7 @@ class RouterStatus(models.Model):
last_status_change = models.DateTimeField(blank=True, null=True)
last_backup = models.DateTimeField(blank=True, null=True)
last_backup_failed = models.DateTimeField(blank=True, null=True)
backup_lock = models.DateTimeField(blank=True, null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)

View file

@ -1,6 +1,9 @@
from django.contrib import messages
from django.utils import timezone
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from backup_data.models import RouterBackup
from .models import Router, RouterGroup, RouterStatus, SSHKey, BackupSchedule
from .forms import RouterForm, RouterGroupForm, SSHKeyForm
@ -145,3 +148,25 @@ def view_manage_sshkey(request):
'instance': sshkey
}
return render(request, 'generic_form.html', context=context)
@login_required()
def view_create_instant_backup_task(request):
router = get_object_or_404(Router, uuid=request.GET.get('uuid'))
router_details_url = f'/router/details/?uuid={router.uuid}'
if RouterBackup.objects.filter(router=router, success=False, error=False).exists():
messages.warning(request, 'Backup task not created|Active router backup task already exists')
return redirect(router_details_url)
if router.routerstatus.backup_lock is not None:
messages.warning(request, 'Backup task not created|Router backup is currently locked')
return redirect(router_details_url)
if not router.backup_profile:
messages.warning(request, 'Backup task not created|Router has no backup profile')
return redirect(router_details_url)
router_backup = RouterBackup.objects.create(router=router, schedule_time=timezone.now(), schedule_type='instant')
router.routerstatus.backup_lock = router_backup.schedule_time
router.routerstatus.save()
messages.success(request, 'Backup task created successfully')
return redirect(router_details_url)