diff --git a/backup_data/migrations/0003_routerbackup_config_change_detected.py b/backup_data/migrations/0003_routerbackup_config_change_detected.py
new file mode 100644
index 0000000..dfcc934
--- /dev/null
+++ b/backup_data/migrations/0003_routerbackup_config_change_detected.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.3 on 2024-03-28 14:19
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('backup_data', '0002_routerbackup_backup_binary_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='routerbackup',
+ name='config_change_detected',
+ field=models.BooleanField(default=False),
+ ),
+ ]
diff --git a/backup_data/models.py b/backup_data/models.py
index f4fbcc7..0c5c3d3 100644
--- a/backup_data/models.py
+++ b/backup_data/models.py
@@ -8,6 +8,7 @@ class RouterBackup(models.Model):
success = models.BooleanField(default=False)
error = models.BooleanField(default=False)
backup_pending_retrieval = models.BooleanField(default=False)
+ config_change_detected = 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)
diff --git a/router_manager/views.py b/router_manager/views.py
index a3061de..9caef36 100644
--- a/router_manager/views.py
+++ b/router_manager/views.py
@@ -27,6 +27,18 @@ def view_router_list(request):
return render(request, 'router_manager/router_list.html', context=context)
+@login_required()
+def view_router_details(request):
+ router = get_object_or_404(Router, uuid=request.GET.get('uuid'))
+ router_status, router_status_created = RouterStatus.objects.get_or_create(router=router)
+ context = {
+ 'router': router,
+ 'router_status': router_status,
+ 'router_backup_list': router.routerbackup_set.all().order_by('-created'),
+ 'page_title': 'Router Details',
+ }
+ return render(request, 'router_manager/router_details.html', context=context)
+
@login_required()
def view_manage_router(request):
if request.GET.get('uuid'):
diff --git a/routerfleet/settings.py b/routerfleet/settings.py
index a985f63..188ec1c 100644
--- a/routerfleet/settings.py
+++ b/routerfleet/settings.py
@@ -136,3 +136,4 @@ STATICFILES_DIRS = [
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+MEDIA_ROOT = '/var/lib/routerfleet/'
diff --git a/routerfleet/urls.py b/routerfleet/urls.py
index dd975a0..d34fb64 100644
--- a/routerfleet/urls.py
+++ b/routerfleet/urls.py
@@ -3,7 +3,7 @@ from django.urls import path
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 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, view_router_details
from backup.views import view_backup_profile_list, view_manage_backup_profile, view_backup_list, view_backup_details, view_debug_run_backups
@@ -19,6 +19,7 @@ urlpatterns = [
path('accounts/logout/', view_logout, name='logout'),
path('router/list/', view_router_list, name='router_list'),
path('router/manage/', view_manage_router, name='manage_router'),
+ path('router/details/', view_router_details, name='router_details'),
path('router/group_list/', view_router_group_list, name='router_group_list'),
path('router/ssh_keys/', view_ssh_key_list, name='ssh_keys_list'),
path('router/manage_group/', view_manage_router_group, name='manage_router_group'),
diff --git a/routerlib/functions.py b/routerlib/functions.py
index 0d24641..3942b5f 100644
--- a/routerlib/functions.py
+++ b/routerlib/functions.py
@@ -38,7 +38,6 @@ def test_ssh_authentication(router_type, address, username, password, sshkey=Non
else:
result = False, 'Device is not MikroTik'
elif router_type == 'openwrt':
- # Comando para verificar OpenWRT
stdin, stdout, stderr = ssh.exec_command('ubus call system board')
output = stdout.read().decode()
if 'OpenWrt' in output:
diff --git a/templates/router_manager/router_details.html b/templates/router_manager/router_details.html
new file mode 100644
index 0000000..6d8177b
--- /dev/null
+++ b/templates/router_manager/router_details.html
@@ -0,0 +1,186 @@
+{% extends 'base.html' %}
+{% load crispy_forms_tags %}
+
+{% block content %}
+
+
+
+
+
+
+
+
+
+
+ {% comment %}
+ -
+
+ {{ router }}
+
+ {% endcomment %}
+ -
+ Enabled
+
+ {% if router.enabled %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+ -
+ Address
+ {{ router.address }}
+
+ -
+ username
+ {{ router.username }}
+
+ -
+ Authentication
+
+ {% if router.ssh_key %}
+ SSH Key: {{ router.ssh_key }}
+ {% elif router.password %}
+ Password
+ {% else %}
+ Missing authentication
+ {% endif %}
+
+
+
+ -
+ Monitoring
+
+ {% if router.monitoring %}
+ {% if router.routerstatus.status_online %}
+
+ {% else %}
+
+ {% endif %}
+ {% else %}
+ Disabled
+ {% endif %}
+
+
+ -
+ Router Type
+ {{ router.get_router_type_display }}
+
+ -
+ Backup Profile
+
+ {% if router.backup_profile %}
+ {{ router.backup_profile }}
+ {% if router.routerstatus.last_backup_failed %}
+
+ {% endif %}
+ {% else %}
+
+ {% endif %}
+
+
+ -
+ Groups
+
+ {% for router_group in router.routergroup_set.all %}
+ {{ router_group.name }}
+ {% endfor %}
+
+
+ -
+ Notes
+ {{ router.internal_notes|default_if_none:""|linebreaksbr }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ Schedule |
+ Time |
+ Status |
+ |
+
+
+
+
+
+
+
+ {% for backup in router_backup_list %}
+
+
+
+
+
+ |
+
+ {{ backup.get_schedule_type_display }} |
+ {% if backup.finish_time %}{{ backup.finish_time }}{% else %}
+ {% endif %} |
+
+ {% if backup.success %}
+
+ {% elif backup.error %}
+
+ {% elif backup.backup_pending_retrieval %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+ {% if backup.config_change_detected %}
+
+ {% endif %}
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block custom_page_scripts %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/router_manager/router_list.html b/templates/router_manager/router_list.html
index 6d0c506..f7ebaa3 100644
--- a/templates/router_manager/router_list.html
+++ b/templates/router_manager/router_list.html
@@ -16,19 +16,24 @@
- Name |
- Type |
- Address |
- Status |
- Backup |
- Groups |
- Auth |
- |
+
+ Name |
+ Type |
+ Address |
+ Status |
+ Backup |
+ Groups |
+ Auth |
+ |
+
+
{% for router in router_list %}
- {{ router.name }} |
+
+ {{ router.name }}
+ |
{{ router.get_router_type_display }} |
{{ router.address }} |