Backup data

This commit is contained in:
Eduardo Silva 2024-03-17 19:11:59 -03:00
parent cc54ba0f73
commit c9a7a69d4b
16 changed files with 207 additions and 7 deletions

View file

@ -1,4 +1,5 @@
from django.db import models
import uuid

View file

@ -4,6 +4,7 @@ from django.contrib import messages
from .models import BackupProfile
from .forms import BackupProfileForm
from router_manager.models import Router
from backup_data.models import RouterBackup
@login_required()
@ -46,3 +47,34 @@ def view_manage_backup_profile(request):
'instance': backup_profile
}
return render(request, 'backup/backup_profile_form.html', context=context)
@login_required()
def view_backup_list(request):
backup_list = RouterBackup.objects.all().order_by('-created')
if request.GET.get('type') == 'queue':
backup_list = backup_list.filter(error=False, success=False).order_by('next_retry')
view_type = 'queue'
elif request.GET.get('type') == 'errors':
backup_list = backup_list.filter(error=True).order_by('-created')
view_type = 'errors'
else:
backup_list = backup_list.filter(success=True).order_by('-created')
view_type = 'success'
context = {
'backup_list': backup_list,
'page_title': 'Backup List',
'view_type': view_type
}
return render(request, 'backup/backup_list.html', context)
@login_required()
def view_backup_details(request):
backup = get_object_or_404(RouterBackup, uuid=request.GET.get('uuid'))
context = {
'backup': backup,
'page_title': 'Backup Details'
}
return render(request, 'backup/backup_details.html', context)

0
backup_data/__init__.py Normal file
View file

11
backup_data/admin.py Normal file
View file

@ -0,0 +1,11 @@
from django.contrib import admin
from .models import RouterBackup
class RouterBackupAdmin(admin.ModelAdmin):
list_display = ('router', 'success', 'error', 'retry_count', 'next_retry', 'schedule_time', 'schedule_type', 'queue_length', 'finish_time', 'updated', 'created', 'uuid')
search_fields = ('router__name', 'error_message', 'backup_text')
list_filter = ('success', 'error', 'schedule_type')
admin.site.register(RouterBackup, RouterBackupAdmin)

6
backup_data/apps.py Normal file
View file

@ -0,0 +1,6 @@
from django.apps import AppConfig
class BackupDataConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'backup_data'

View file

@ -0,0 +1,37 @@
# Generated by Django 5.0.3 on 2024-03-17 21:51
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('router_manager', '0009_router_backup_profile'),
]
operations = [
migrations.CreateModel(
name='RouterBackup',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('success', models.BooleanField(default=False)),
('error', models.BooleanField(default=False)),
('error_message', models.TextField(blank=True, null=True)),
('retry_count', models.IntegerField(default=0)),
('next_retry', models.DateTimeField(blank=True, null=True)),
('schedule_time', models.DateTimeField(blank=True, null=True)),
('schedule_type', models.CharField(choices=[('daily', 'Daily'), ('weekly', 'Weekly'), ('monthly', 'Monthly'), ('instant', 'Instant')], max_length=10)),
('queue_length', models.IntegerField(default=0)),
('finish_time', models.DateTimeField(blank=True, null=True)),
('backup_text', models.TextField(blank=True, null=True)),
('updated', models.DateTimeField(auto_now=True)),
('created', models.DateTimeField(auto_now_add=True)),
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('router', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='router_manager.router')),
],
),
]

View file

23
backup_data/models.py Normal file
View file

@ -0,0 +1,23 @@
from django.db import models
from router_manager.models import Router
import uuid
class RouterBackup(models.Model):
router = models.ForeignKey(Router, on_delete=models.CASCADE)
success = models.BooleanField(default=False)
error = models.BooleanField(default=False)
error_message = models.TextField(blank=True, null=True)
retry_count = models.IntegerField(default=0)
next_retry = models.DateTimeField(blank=True, null=True)
schedule_time = models.DateTimeField(blank=True, null=True)
schedule_type = models.CharField(max_length=10, choices=(('daily', 'Daily'), ('weekly', 'Weekly'), ('monthly', 'Monthly'), ('instant', 'Instant')))
queue_length = models.IntegerField(default=0) # Seconds
finish_time = models.DateTimeField(blank=True, null=True)
backup_text = models.TextField(blank=True, null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)

3
backup_data/tests.py Normal file
View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
backup_data/views.py Normal file
View file

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View file

@ -43,6 +43,7 @@ INSTALLED_APPS = [
'router_manager',
'monitoring',
'backup',
'backup_data'
]
MIDDLEWARE = [

View file

@ -4,7 +4,7 @@ from dashboard.views import view_dashboard, view_status
from user_manager.views import view_manage_user, view_user_list
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
from backup.views import view_backup_profile_list, view_manage_backup_profile
from backup.views import view_backup_profile_list, view_manage_backup_profile, view_backup_list, view_backup_details
urlpatterns = [
@ -23,6 +23,7 @@ urlpatterns = [
path('router/manage_group/', view_manage_router_group, name='manage_router_group'),
path('router/manage_sshkey/', view_manage_sshkey, name='manage_sshkey'),
path('backup/profile_list/', view_backup_profile_list, name='backup_profile_list'),
path('backup/manage_profile/', view_manage_backup_profile, name='manage_backup_profile')
path('backup/manage_profile/', view_manage_backup_profile, name='manage_backup_profile'),
path('backup/backup_list/', view_backup_list, name='backup_list'),
path('backup/backup_details/', view_backup_details, name='backup_info'),
]

View file

@ -0,0 +1,5 @@
{% extends 'base.html' %}
{% block content %}
backup info
{% endblock %}

View file

@ -0,0 +1,47 @@
{% extends 'base.html' %}
{% block content %}
<div class='row'>
<div class='col-lg-12'>
<div class="card card-primary card-outline">
{% if page_title %}
<div class="card-header">
<h3 class="card-title">{{ page_title }}</h3>
</div>
{% endif %}
<div class="card-body">
{% include 'backup/backup_nav_tabs.html' %}
<div class="row">
<div class="col-lg-12">
<table class="table table-hover">
<tbody>
{% for backup in backup_list %}
<tr>
<td>
<a href="/backup/backup_details/?uuid={{ backup.uuid }}">
{{ backup.router }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,29 @@
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link {% if request.path == '/backup/profile_list/' %}active{% endif %}" href="/backup/profile_list/" role="tab">
Backup Profiles
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if view_type == 'success' %}active{% endif %}" href="/backup/backup_list/"
role="tab">
Backup List
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if view_type == 'queue' %}active{% endif %}" href="/backup/backup_list/?type=queue"
role="tab">
Backup Queue
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if view_type == 'errors' %}active{% endif %}" href="/backup/backup_list/?type=errors"
role="tab">
Backup Errors
</a>
</li>
</ul>

View file

@ -11,13 +11,14 @@
</div>
{% endif %}
<div class="card-body">
{% include 'backup/backup_nav_tabs.html' %}
<div class="row">
<div class="col-lg-12">
<table class="table table-hover">
<thead>
<tr>
<th>Name</th>
<th>Router Count</th>
<th>Routers</th>
<th>Daily</th>
<th>Weekly</th>
<th>Monthly</th>
@ -29,11 +30,11 @@
{% for backup_profile in backup_profile_list %}
<tr>
<td>{{ backup_profile.name }}</td>
<td>
{{ backup_profile.router_set.count }}
</td>
<td>
{% if backup_profile.daily_backup %}
<i class="far fa-check-circle text-success"></i>
@ -44,7 +45,7 @@
<i class="far fa-check-circle text-success"></i>
{% endif %}
</td>
<td>
{% if backup_profile.monthly_backup %}
<i class="far fa-check-circle text-success"></i>