{% extends 'generic/object.html' %} {% load helpers %} {% load plugins %} {% load i18n %} {% block extra_controls %} {% comment %} A wedged sync used to be recoverable only from a shell, and the failure that causes it is announced in a job log where the reader has no shell. The control appears only while the classification says something is actually stuck, so it is a remedy at the moment it is needed rather than a button an operator is invited to try on a healthy sync. {% endcomment %} {% if stuck_verdict and perms.forward_netbox.run_forwardsync %}
{% endif %} {% if perms.forward_netbox.run_forwardsync %} {% if object.ready_for_sync %} {% else %} {% endif %} {% endif %} {% if perms.forward_netbox.view_forwardsync %} {% if perms.forward_netbox.run_forwardsync %} {% trans "View Last Preview" %} {% trans "Drift Report" %} {% endif %} {% trans "Scope Reconciliation" %} {% trans "Module Readiness" %} {# Say what it is for. Operators were sending screenshots because nothing #} {# on the page said this file answers the same questions and more. #} {% trans "Export Support Bundle" %} {# Same content, compressed - and the one to send on a large estate: the #} {# bundle is repetitive JSON, so deflate takes it down by roughly an #} {# order of magnitude. A password switches the archive to AES rather #} {# than plain deflate. #} {% endif %} {% endblock extra_controls %} {% block content %} {% include 'forward_netbox/inc/brand_bar.html' %}| {% trans "Name" %} | {{ object.name }} |
|---|---|
| {% trans "Source" %} | {{ object.source.name }} |
| {% trans "Status" %} | {{ object.get_status_display }} |
| {% trans "Current activity" %} | {{ object.get_sync_activity|placeholder }} |
| {% trans "Last synced" %} | {{ object.last_synced|placeholder }} |
| {% trans "Latest ingestion" %} | {% if object.last_ingestion %} {{ object.last_ingestion.name }} {% else %} {{ ""|placeholder }} {% endif %} |
| {% trans "Network" %} | {{ object.get_network_id|placeholder }} |
| {% trans "Snapshot Selection" %} | {{ object.get_snapshot_id|placeholder }} |
| {% trans "Schedule" %} | {{ object.scheduled|placeholder }} |
| {% trans "Interval" %} | {{ object.interval|placeholder }} |
| {{ schedule.label }} {% trans "schedule" %} | {% if schedule.interval %} {% trans "every" %} {{ schedule.interval }} {% trans "minutes" %} {% if schedule.next_run %} — {% trans "next" %} {{ schedule.next_run }} {% elif not schedule.job %} — {% trans "no queued occurrence (self-heals on next sync run)" %} {% endif %} {% else %} {% trans "orphaned schedule row (blank the field on the sync form to clear)" %} {% endif %} |
| {% trans "User" %} | {{ object.user|placeholder }} |
| {% trans "Auto merge" %} | {{ object.auto_merge|yesno:"Yes,No" }} |
| {% trans "Drift Policy" %} | {% if object.drift_policy %} {{ object.drift_policy }} {% else %} {{ ""|placeholder }} {% endif %} |
| {% trans "Latest Validation" %} | {% if latest_validation_run %} {{ latest_validation_run.get_status_display }} {% else %} {{ ""|placeholder }} {% endif %} |
| {% trans "Maps assessed" %} | {{ query_drift_summary.total_maps|placeholder }} |
|---|---|
| {% trans "Warn / info / pass" %} | {{ query_drift_summary.warn_count }}/{{ query_drift_summary.info_count }}/{{ query_drift_summary.pass_count }} |
| {% trans "Status" %} | {% if query_drift_summary.warn_count %} {% trans "Needs Review" %} {% elif query_drift_summary.info_count %} {% trans "Informational" %} {% elif query_drift_summary.pass_count %} {% trans "Current" %} {% else %} {% trans "Unavailable" %} {% endif %} |