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 %} +
+
+
+ +
+

{{ router.name }} + +

+ + + + + +
+ +
+
+ +
    + {% 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 }} +
  • + + +
+ + +
+
+
+
+
+
+ +
+

Backup history

+
+ +
+
+ + + + + + + + + + + + + + + + {% for backup in router_backup_list %} + + + + + + + + + {% endfor %} + +
ScheduleTimeStatus
+ + + + {{ 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 %} +
+ + +
+
+
+
+ + +
+{% 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 @@
- - - - - - - - + + + + + + + + + + + {% for router in router_list %} - +
NameTypeAddressStatusBackupGroupsAuth
NameTypeAddressStatusBackupGroupsAuth
{{ router.name }} + {{ router.name }} + {{ router.get_router_type_display }} {{ router.address }}