mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-07-24 04:44:29 +02:00
display router information
This commit is contained in:
parent
e40eb2fdca
commit
aef7c1eaa6
4 changed files with 277 additions and 144 deletions
|
@ -60,6 +60,7 @@ def view_router_details(request):
|
||||||
router = get_object_or_404(Router, uuid=request.GET.get('uuid'))
|
router = get_object_or_404(Router, uuid=request.GET.get('uuid'))
|
||||||
router_status, _ = RouterStatus.objects.get_or_create(router=router)
|
router_status, _ = RouterStatus.objects.get_or_create(router=router)
|
||||||
router_backup_list = router.routerbackup_set.all().order_by('-created')
|
router_backup_list = router.routerbackup_set.all().order_by('-created')
|
||||||
|
router_information = RouterInformation.objects.filter(router=router).first()
|
||||||
downtime_last_week = router.routerdowntime_set.filter(start_time__gte=timezone.now() - timezone.timedelta(days=7)).aggregate(total=Sum('total_down_time'))['total']
|
downtime_last_week = router.routerdowntime_set.filter(start_time__gte=timezone.now() - timezone.timedelta(days=7)).aggregate(total=Sum('total_down_time'))['total']
|
||||||
if downtime_last_week is None:
|
if downtime_last_week is None:
|
||||||
downtime_last_week = 0
|
downtime_last_week = 0
|
||||||
|
@ -76,6 +77,7 @@ def view_router_details(request):
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'router': router,
|
'router': router,
|
||||||
|
'router_information': router_information,
|
||||||
'router_status': router_status,
|
'router_status': router_status,
|
||||||
'router_backup_list': router_backup_list,
|
'router_backup_list': router_backup_list,
|
||||||
'page_title': 'Router Details',
|
'page_title': 'Router Details',
|
||||||
|
@ -106,6 +108,16 @@ def view_manage_router(request):
|
||||||
else:
|
else:
|
||||||
messages.warning(request, 'Router not deleted|Invalid confirmation')
|
messages.warning(request, 'Router not deleted|Invalid confirmation')
|
||||||
return redirect('router_list')
|
return redirect('router_list')
|
||||||
|
elif request.GET.get('action') == 'refresh_information':
|
||||||
|
router_information, created = RouterInformation.objects.get_or_create(router=router)
|
||||||
|
router_information.next_retry = timezone.now()
|
||||||
|
router_information.retry_count = 0
|
||||||
|
router_information.success = False
|
||||||
|
router_information.error = False
|
||||||
|
router_information.error_message = ''
|
||||||
|
router_information.save()
|
||||||
|
messages.success(request, 'Router information will be updated shortly')
|
||||||
|
return redirect('/router/details/?uuid=' + str(router.uuid))
|
||||||
else:
|
else:
|
||||||
router = None
|
router = None
|
||||||
|
|
||||||
|
@ -115,6 +127,8 @@ def view_manage_router(request):
|
||||||
messages.success(request, 'Router saved successfully|It may take a few minutes until monitoring starts for this router.')
|
messages.success(request, 'Router saved successfully|It may take a few minutes until monitoring starts for this router.')
|
||||||
router_status, _ = RouterStatus.objects.get_or_create(router=form.instance)
|
router_status, _ = RouterStatus.objects.get_or_create(router=form.instance)
|
||||||
BackupSchedule.objects.filter(router=form.instance).delete()
|
BackupSchedule.objects.filter(router=form.instance).delete()
|
||||||
|
if form.instance.router_type == 'monitoring':
|
||||||
|
RouterInformation.objects.filter(router=form.instance).delete()
|
||||||
webadmin_settings.router_config_last_updated = timezone.now()
|
webadmin_settings.router_config_last_updated = timezone.now()
|
||||||
webadmin_settings.save()
|
webadmin_settings.save()
|
||||||
return redirect('router_list')
|
return redirect('router_list')
|
||||||
|
|
|
@ -142,6 +142,6 @@ STATICFILES_DIRS = [
|
||||||
|
|
||||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||||
MEDIA_ROOT = '/var/lib/routerfleet/'
|
MEDIA_ROOT = '/var/lib/routerfleet/'
|
||||||
ROUTERFLEET_VERSION = 7502
|
ROUTERFLEET_VERSION = 7503
|
||||||
|
|
||||||
from routerfleet.production_settings import *
|
from routerfleet.production_settings import *
|
||||||
|
|
|
@ -3,41 +3,43 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class='row'>
|
<div class='row'>
|
||||||
<div class='col-xl-5'>
|
<div class='col-xl-5'>
|
||||||
<div class="card card-primary card-outline">
|
<div class="row">
|
||||||
<div class="card-header">
|
<div class="col-lg-12">
|
||||||
<h3 class="card-title">{{ router.name }}
|
<div class="card card-primary card-outline">
|
||||||
</h3>
|
<div class="card-header">
|
||||||
<span class="float-right">
|
<h3 class="card-title">{{ router.name }}
|
||||||
|
</h3>
|
||||||
|
<span class="float-right">
|
||||||
<a href="/router/manage/?uuid={{ router.uuid }}" >
|
<a href="/router/manage/?uuid={{ router.uuid }}" >
|
||||||
<i class="fas fa-edit"></i>
|
<i class="fas fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body row">
|
<div class="card-body row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<ul class="list-group list-group-unbordered mb-3">
|
<ul class="list-group list-group-unbordered mb-3">
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Enabled</b>
|
<b>Enabled</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
{% if router.enabled %}
|
{% if router.enabled %}
|
||||||
<i class="far fa-check-circle text-success" ></i>
|
<i class="far fa-check-circle text-success" ></i>
|
||||||
{% else %}
|
{% else %}
|
||||||
<i class="far fa-times-circle text-danger" ></i>
|
<i class="far fa-times-circle text-danger" ></i>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Address</b>
|
<b>Address</b>
|
||||||
<span class="float-right">{{ router.address }}</span>
|
<span class="float-right">{{ router.address }}</span>
|
||||||
</li>
|
</li>
|
||||||
{% if router.router_type != 'monitoring' %}
|
{% if router.router_type != 'monitoring' %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>username</b>
|
<b>username</b>
|
||||||
<span class="float-right">{{ router.username }}</span>
|
<span class="float-right">{{ router.username }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Authentication</b>
|
<b>Authentication</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
{% if router.ssh_key %}
|
{% if router.ssh_key %}
|
||||||
<i class="fas fa-key"></i> SSH Key: {{ router.ssh_key }}
|
<i class="fas fa-key"></i> SSH Key: {{ router.ssh_key }}
|
||||||
{% elif router.password %}
|
{% elif router.password %}
|
||||||
|
@ -46,11 +48,11 @@
|
||||||
<i class="fas fa-exclamation-triangle text-warning"></i> Missing authentication
|
<i class="fas fa-exclamation-triangle text-warning"></i> Missing authentication
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Monitoring</b>
|
<b>Monitoring</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
{% if router.monitoring %}
|
{% if router.monitoring %}
|
||||||
{% if router.routerstatus.status_online %}
|
{% if router.routerstatus.status_online %}
|
||||||
<i class="far fa-check-circle text-success" title="Host is Online"></i>
|
<i class="far fa-check-circle text-success" title="Host is Online"></i>
|
||||||
|
@ -61,34 +63,34 @@
|
||||||
Disabled
|
Disabled
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% if router.monitoring %}
|
{% if router.monitoring %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Availability (last 7 days)</b>
|
<b>Availability (last 7 days)</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
<a href="/router/availability/?uuid={{ router.uuid }}">
|
<a href="/router/availability/?uuid={{ router.uuid }}">
|
||||||
{{ last_week_availability }}%
|
{{ last_week_availability }}%
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Router Type</b>
|
<b>Router Type</b>
|
||||||
<span class="float-right">{{ router.get_router_type_display }}</span>
|
<span class="float-right">{{ router.get_router_type_display }}</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Groups</b>
|
<b>Groups</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
{% for router_group in router.routergroup_set.all %}
|
{% for router_group in router.routergroup_set.all %}
|
||||||
<span class="badge badge-primary">{{ router_group.name }}</span>
|
<span class="badge badge-primary">{{ router_group.name }}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% if router.router_type != 'monitoring' %}
|
{% if router.router_type != 'monitoring' %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Backup Profile</b>
|
<b>Backup Profile</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
{% if router.backup_profile %}
|
{% if router.backup_profile %}
|
||||||
{{ router.backup_profile }}
|
{{ router.backup_profile }}
|
||||||
{% if router.routerstatus.last_backup_failed %}
|
{% if router.routerstatus.last_backup_failed %}
|
||||||
|
@ -98,120 +100,231 @@
|
||||||
<i class="fas fa-exclamation-triangle text-warning" title="No backup profile selected"></i>
|
<i class="fas fa-exclamation-triangle text-warning" title="No backup profile selected"></i>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Instant Backup</b>
|
<b>Instant Backup</b>
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
<a href="/router/create_instant_backup/?uuid={{ router.uuid }}">
|
<a href="/router/create_instant_backup/?uuid={{ router.uuid }}">
|
||||||
Backup now
|
Backup now
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<b>Notes</b>
|
<b>Notes</b>
|
||||||
<span class="float-right">{{ router.internal_notes|default_if_none:""|linebreaksbr }}</span>
|
<span class="float-right">{{ router.internal_notes|default_if_none:""|linebreaksbr }}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{% if router_information %}
|
||||||
|
<div class="card card-primary card-outline">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">Router Information
|
||||||
|
</h3>
|
||||||
|
<span class="float-right">
|
||||||
|
{% if not router_information.success and not router_information.error %}
|
||||||
|
<i class="far fa-clock" title="Fetching router information on next cron"></i>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
<a href="/router/manage/?uuid={{ router.uuid }}&action=refresh_information" ><i class="fas fa-sync"></i></a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="card-body row">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<ul class="list-group list-group-unbordered mb-3">
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>Model Name</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.model_name|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>Version</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.model_version|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>Serial</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.serial_number|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>OS Version</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.os_version|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>Firmware Version</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.firmware_version|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>Architeture</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.architecture|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>CPU</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{{ router_information.cpu|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<b>Last Update</b>
|
||||||
|
<span class="float-right">
|
||||||
|
{% if router_information.success %}
|
||||||
|
{{ router_information.last_retrieval }}
|
||||||
|
{% elif router_information.error %}
|
||||||
|
<i class="far fa-times-circle text-danger" title="Last update failed: {{ router_information.error_message }}"></i>
|
||||||
|
{% else %}
|
||||||
|
<i class="far fa-clock" title="Fetching router information on next cron"></i>
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="list-group-item">
|
||||||
|
<div>
|
||||||
|
<b>Source Data</b>
|
||||||
|
<span class="float-right">
|
||||||
|
<a href="#" onclick="$('#router_information_json').slideToggle()">
|
||||||
|
<i class="far fa-eye"></i></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span id="router_information_json" style="display: none;">
|
||||||
|
{{ router_information.json_data|default_if_none:"" }}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class='col-xl-7'>
|
<div class='col-xl-7'>
|
||||||
{% if router_backup_list or router.router_type != 'monitoring' %}
|
|
||||||
<div class="card card-primary card-outline">
|
<div class="row">
|
||||||
<div class="card-header">
|
<div class="col-lg-12">
|
||||||
<h3 class="card-title">Backup history</h3>
|
{% if router_backup_list or router.router_type != 'monitoring' %}
|
||||||
<span class="float-right">
|
<div class="card card-primary card-outline">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">Backup history</h3>
|
||||||
|
<span class="float-right">
|
||||||
{% if router.backupschedule %}
|
{% if router.backupschedule %}
|
||||||
<a onclick="$('.backup-schedule-information').slideToggle();" href="#">
|
<a onclick="$('.backup-schedule-information').slideToggle();" href="#">
|
||||||
show schedule <i class="far fa-clock"></i>
|
show schedule <i class="far fa-clock"></i>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a onclick="alert('There\'s no backup schedule for this equipment.');" href="#">
|
<a onclick="alert('There\'s no backup schedule for this equipment.');" href="#">
|
||||||
show schedule <i class="far fa-clock"></i>
|
show schedule <i class="far fa-clock"></i>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="card-body row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<table class="table table-hover datatables-no-export" >
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>ID</th>
|
|
||||||
<th>Schedule</th>
|
|
||||||
<th>Time</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th><i class="fas fa-code-branch" title="backup hash"></i></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% if router.backupschedule.next_daily_backup %}
|
|
||||||
<tr class="backup-schedule-information" style="display: none;">
|
|
||||||
<td><i class="far fa-clock text-info"></i></td>
|
|
||||||
<td>Daily</td>
|
|
||||||
<td>{{ router.backupschedule.next_daily_backup }}</td>
|
|
||||||
<td><i class="far fa-clock text-info"></i></td>
|
|
||||||
<td>-</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
{% if router.backupschedule.next_weekly_backup %}
|
|
||||||
<tr class="backup-schedule-information" style="display: none;">
|
|
||||||
<td><i class="far fa-clock text-info"></i></td>
|
|
||||||
<td>Weekly</td>
|
|
||||||
<td>{{ router.backupschedule.next_weekly_backup }}</td>
|
|
||||||
<td><i class="far fa-clock text-info"></i></td>
|
|
||||||
<td>-</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
{% if router.backupschedule.next_monthly_backup %}
|
|
||||||
<tr class="backup-schedule-information" style="display: none;">
|
|
||||||
<td><i class="far fa-clock text-info"></i></td>
|
|
||||||
<td>Monthly</td>
|
|
||||||
<td>{{ router.backupschedule.next_monthly_backup }}</td>
|
|
||||||
<td><i class="far fa-clock text-info"></i></td>
|
|
||||||
<td>-</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% for backup in router_backup_list %}
|
</span>
|
||||||
<tr>
|
</div>
|
||||||
<td class="min-width">
|
<div class="card-body row">
|
||||||
<a href="/backup/backup_details/?uuid={{ backup.uuid }}">
|
<div class="col-lg-12">
|
||||||
{{ backup.id }}
|
<table class="table table-hover datatables-no-export" >
|
||||||
</a>
|
<thead>
|
||||||
</td>
|
<tr>
|
||||||
<td>{{ backup.get_schedule_type_display }}</td>
|
<th>ID</th>
|
||||||
<td>{% if backup.finish_time %}{{ backup.finish_time }}{% else %}
|
<th>Schedule</th>
|
||||||
{% if not backup.error %}<i class="far fa-clock text-warning"></i>{% endif %}{% endif %}</td>
|
<th>Time</th>
|
||||||
<td>
|
<th>Status</th>
|
||||||
{% if backup.success %}
|
<th><i class="fas fa-code-branch" title="backup hash"></i></th>
|
||||||
<i class="far fa-check-circle text-success"></i>
|
</tr>
|
||||||
{% elif backup.error %}
|
</thead>
|
||||||
<i class="far fa-times-circle text-danger"
|
<tbody>
|
||||||
title="{{ backup.error_message }}"></i>
|
{% if router.backupschedule.next_daily_backup %}
|
||||||
{% elif backup.backup_pending_retrieval %}
|
<tr class="backup-schedule-information" style="display: none;">
|
||||||
<i class="fas fa-cloud-download-alt text-info"
|
<td><i class="far fa-clock text-info"></i></td>
|
||||||
title="Backup pending Retrieval"></i>
|
<td>Daily</td>
|
||||||
{% else %}
|
<td>{{ router.backupschedule.next_daily_backup }}</td>
|
||||||
<i class="far fa-clock text-warning"></i>
|
<td><i class="far fa-clock text-info"></i></td>
|
||||||
|
<td>-</td>
|
||||||
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% if router.backupschedule.next_weekly_backup %}
|
||||||
<td class="min-width">
|
<tr class="backup-schedule-information" style="display: none;">
|
||||||
{% if backup.backup_text_hash %}
|
<td><i class="far fa-clock text-info"></i></td>
|
||||||
<a href="#" title="{{ backup.backup_text_hash }}">{{ backup.backup_text_hash|default_if_none:""|slice:":8" }}...</a>
|
<td>Weekly</td>
|
||||||
|
<td>{{ router.backupschedule.next_weekly_backup }}</td>
|
||||||
|
<td><i class="far fa-clock text-info"></i></td>
|
||||||
|
<td>-</td>
|
||||||
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% if router.backupschedule.next_monthly_backup %}
|
||||||
</tr>
|
<tr class="backup-schedule-information" style="display: none;">
|
||||||
{% endfor %}
|
<td><i class="far fa-clock text-info"></i></td>
|
||||||
</tbody>
|
<td>Monthly</td>
|
||||||
</table>
|
<td>{{ router.backupschedule.next_monthly_backup }}</td>
|
||||||
</div>
|
<td><i class="far fa-clock text-info"></i></td>
|
||||||
|
<td>-</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% for backup in router_backup_list %}
|
||||||
|
<tr>
|
||||||
|
<td class="min-width">
|
||||||
|
<a href="/backup/backup_details/?uuid={{ backup.uuid }}">
|
||||||
|
{{ backup.id }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>{{ backup.get_schedule_type_display }}</td>
|
||||||
|
<td>{% if backup.finish_time %}{{ backup.finish_time }}{% else %}
|
||||||
|
{% if not backup.error %}<i class="far fa-clock text-warning"></i>{% endif %}{% endif %}</td>
|
||||||
|
<td>
|
||||||
|
{% if backup.success %}
|
||||||
|
<i class="far fa-check-circle text-success"></i>
|
||||||
|
{% elif backup.error %}
|
||||||
|
<i class="far fa-times-circle text-danger"
|
||||||
|
title="{{ backup.error_message }}"></i>
|
||||||
|
{% elif backup.backup_pending_retrieval %}
|
||||||
|
<i class="fas fa-cloud-download-alt text-info"
|
||||||
|
title="Backup pending Retrieval"></i>
|
||||||
|
{% else %}
|
||||||
|
<i class="far fa-clock text-warning"></i>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="min-width">
|
||||||
|
{% if backup.backup_text_hash %}
|
||||||
|
<a href="#" title="{{ backup.backup_text_hash }}">{{ backup.backup_text_hash|default_if_none:""|slice:":8" }}...</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
<th>Select</th>
|
<th>Select</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
|
<th>Version</th>
|
||||||
<th>Address</th>
|
<th>Address</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Backup</th>
|
<th>Backup</th>
|
||||||
|
@ -34,6 +35,11 @@
|
||||||
<td><input type="checkbox" class="router-checkbox" data-uuid="{{ router.uuid }}"></td>
|
<td><input type="checkbox" class="router-checkbox" data-uuid="{{ router.uuid }}"></td>
|
||||||
<td><a href="/router/details/?uuid={{ router.uuid }}">{{ router.name }}</a></td>
|
<td><a href="/router/details/?uuid={{ router.uuid }}">{{ router.name }}</a></td>
|
||||||
<td>{{ router.get_router_type_display }}</td>
|
<td>{{ router.get_router_type_display }}</td>
|
||||||
|
<td>
|
||||||
|
{% if router.router_type != 'monitoring' %}
|
||||||
|
{{ router.routerinformation.os_version|default_if_none:'' }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
<td>{{ router.address }}</td>
|
<td>{{ router.address }}</td>
|
||||||
<td id="status-{{ router.uuid }}">
|
<td id="status-{{ router.uuid }}">
|
||||||
{% if router.monitoring %}
|
{% if router.monitoring %}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue