{% extends 'generic/object.html' %} {% load helpers %} {% load i18n %} {% block title %}{{ object }} - {% trans "Drift Report" %}{% endblock %} {% block extra_controls %} {% if perms.forward_netbox.run_forwardsync %}
{% endif %} {% trans "Sync" %} {% endblock extra_controls %} {% block content %} {% if drift_stale %}| {% trans "In sync" %} | {% if not report.comparison_available %} {% trans "Not measured" %} {% elif report.in_sync %} {% trans "Yes" %} {% else %} {% trans "No" %} {% endif %} |
|---|---|
| {% trans "Models compared" %} |
{{ report.measured_model_count }} / {{ report.model_count }}
{% if report.measured_model_count == 0 %}
{% if report.payload_predates_measurement %}
{% trans "This preview was taken before drift measurement existed. Re-run Preview Dependencies to get real numbers." %}
{% else %}
{% trans "The preview ran but compared no models. This is a defect rather than a stale report - please send the preview JSON." %}
{% endif %}
{% elif report.unmeasured_model_count %}
{% trans "Not compared:" %} {{ report.unmeasured_models|join:", " }}
{% endif %}
|
| {% trans "Comparison cost" %} |
{{ report.comparison_runtime_ms|floatformat:0 }} ms
{% if report.comparison_rows_compared %}
{% blocktrans with rows=report.comparison_rows_compared %}for {{ rows }} rows{% endblocktrans %}
{% endif %}
{% if report.slowest_compared_model %}
{% blocktrans with model=report.slowest_compared_model.model ms=report.slowest_compared_model.runtime_ms|floatformat:0 %}Slowest: {{ model }} at {{ ms }} ms{% endblocktrans %}
{% endif %}
|
| {% trans "Drifted models" %} | {% if report.comparison_available %}{{ report.drifted_model_count }} / {{ report.measured_model_count }}{% else %}{% trans "Not measured" %}{% endif %} |
| {% trans "Total drift" %} | {% if report.comparison_available %}{{ report.total_drift }}{% else %}{% trans "Not measured" %}{% endif %} |
| {% trans "Estimated apply work" %} | {{ report.total_apply_work }} |
| {% trans "From preview" %} | {{ report.generated_at|placeholder }} |
| {% trans "Convergence" %} | {% if latest_sync_evidence.convergence_confirmed %} {% trans "Confirmed" %} {% elif latest_sync_evidence.status == "failed" %} {% trans "Failed" %} {% else %} {% trans "Not confirmed" %} {% endif %} |
|---|---|
| {% trans "Sync snapshot" %} | {{ latest_sync_evidence.snapshot_id|placeholder }} |
| {% trans "Ownership" %} | {% if latest_sync_evidence.ownership.complete %} {% trans "Current" %} {% else %} {% trans "Incomplete" %} {% endif %} |
| {% trans "Same as preview" %} | {% if not latest_sync_evidence.snapshot_comparison_available %} {% trans "Unknown" %} {% elif latest_sync_evidence.same_snapshot %} {% trans "Yes" %} {% else %} {% trans "No" %} {% endif %} |
| {% trans "Applied" %} | {{ latest_sync_evidence.applied }} |
| {% trans "Created" %} | {{ latest_sync_evidence.created }} |
| {% trans "Updated" %} | {{ latest_sync_evidence.updated }} |
| {% trans "Deleted" %} | {{ latest_sync_evidence.deleted }} |
| {% trans "Failed" %} | {{ latest_sync_evidence.failed }} |
| {% trans "Skipped (rule rejections)" %} | {{ latest_sync_evidence.skipped }} |
| {% trans "Completed" %} | {{ latest_sync_evidence.completed_at|placeholder }} |
| {% trans "Model" %} | {% trans "Forward rows" %} | {% trans "Upsert/change candidates" %} | {% trans "Pending removals" %} | {% trans "Estimated apply work" %} | {% trans "Drift" %} | {% trans "In sync" %} |
|---|---|---|---|---|---|---|
{{ row.label|default:row.model }} |
{{ row.forward_rows|placeholder }} | {{ row.pending_changes }} | {{ row.pending_removes }} | {{ row.estimated_apply_work }} | {% if row.comparison_available %}{% if row.drift %}{{ row.drift }}{% else %}0{% endif %}{% else %}{% trans "Not measured" %}{% endif %} | {% if not row.comparison_available %}{% trans "Not measured" %}{% elif row.in_sync %}{% trans "Yes" %}{% else %}{% trans "No" %}{% endif %} |
| {% trans "No model results in the preview." %} | ||||||