Skip to content

Commit 3543f9f

Browse files
committed
Add diff statistics calculation and display in compliance view template
1 parent 9012a14 commit 3543f9f

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

netbox_config_diff/compliance/utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,16 @@ def get_remediation_commands(name: str, platform: str, actual_config: str, rende
6060
host.load_running_config(config_text=actual_config)
6161
host.load_generated_config(config_text=rendered_config)
6262
return host.remediation_config_filtered_text(include_tags={}, exclude_tags={})
63+
64+
65+
def get_diff_statistics(diff: str) -> tuple[int, int]:
66+
lines_added = 0
67+
lines_deleted = 0
68+
69+
for line in diff.splitlines():
70+
if line.startswith("+") and not line.startswith("+++"):
71+
lines_added += 1
72+
elif line.startswith("-") and not line.startswith("---"):
73+
lines_deleted += 1
74+
75+
return lines_added, lines_deleted

netbox_config_diff/templates/netbox_config_diff/configcompliance/data.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,14 @@ <h5 class="card-header">Error</h5>
3535
<div class="row mb-3">
3636
<div class="col col-md-12">
3737
<div class="card">
38-
<h5 class="card-header">Diff</h5>
38+
<h2 class="card-header">Diff
39+
{% if version|first != "3" and statistics %}
40+
<div class="card-actions">
41+
<span style="color: #1a7f37;">{{ statistics.0 }}</span> line(s) missing,
42+
<span style="color: #d1242f;">{{ statistics.1 }}</span> extra line(s)
43+
</div>
44+
{% endif %}
45+
</h2>
3946
<div class="card-body" id="diffElement"></div>
4047
</div>
4148
</div>

netbox_config_diff/views/compliance.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from netbox.views import generic
66
from utilities.views import ViewTab, register_model_view
77

8+
from netbox_config_diff.compliance.utils import get_diff_statistics
89
from netbox_config_diff.filtersets import ConfigComplianceFilterSet, PlatformSettingFilterSet
910
from netbox_config_diff.forms import (
1011
ConfigComplianceFilterForm,
@@ -25,10 +26,14 @@ class ConfigComplianceView(generic.ObjectView):
2526
template_name = "netbox_config_diff/configcompliance/data.html"
2627

2728
def get_extra_context(self, request, instance):
29+
statistics = None
30+
if instance.diff:
31+
statistics = get_diff_statistics(instance.diff)
2832
return {
2933
"instance": instance,
3034
"base_template": self.base_template,
3135
"version": VERSION,
36+
"statistics": statistics,
3237
}
3338

3439

0 commit comments

Comments
 (0)