mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-06-21 01:25:41 +02:00
Backup data
This commit is contained in:
parent
cc54ba0f73
commit
c9a7a69d4b
16 changed files with 207 additions and 7 deletions
|
@ -1,4 +1,5 @@
|
|||
from django.db import models
|
||||
|
||||
import uuid
|
||||
|
||||
|
||||
|
|
|
@ -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
0
backup_data/__init__.py
Normal file
11
backup_data/admin.py
Normal file
11
backup_data/admin.py
Normal 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
6
backup_data/apps.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class BackupDataConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'backup_data'
|
37
backup_data/migrations/0001_initial.py
Normal file
37
backup_data/migrations/0001_initial.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
0
backup_data/migrations/__init__.py
Normal file
0
backup_data/migrations/__init__.py
Normal file
23
backup_data/models.py
Normal file
23
backup_data/models.py
Normal 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
3
backup_data/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
3
backup_data/views.py
Normal file
3
backup_data/views.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
|
@ -43,6 +43,7 @@ INSTALLED_APPS = [
|
|||
'router_manager',
|
||||
'monitoring',
|
||||
'backup',
|
||||
'backup_data'
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
|
@ -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'),
|
||||
]
|
||||
|
|
5
templates/backup/backup_details.html
Normal file
5
templates/backup/backup_details.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% block content %}
|
||||
backup info
|
||||
{% endblock %}
|
47
templates/backup/backup_list.html
Normal file
47
templates/backup/backup_list.html
Normal 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 %}
|
29
templates/backup/backup_nav_tabs.html
Normal file
29
templates/backup/backup_nav_tabs.html
Normal 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>
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue