Skip to content

Commit de77c00

Browse files
committed
Refine UI and rendered values
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 6657996 commit de77c00

2 files changed

Lines changed: 44 additions & 39 deletions

File tree

product_portfolio/templates/product_portfolio/compliance_dashboard.html

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@ <h1 class="h3 mb-0">{% trans "Compliance Control Center" %}</h1>
1010
</div>
1111

1212
<div class="row g-3 mb-3">
13-
<div class="col-6 col-md-3">
13+
<div class="col-6 col-md-3">
1414
<div class="bg-body-secondary rounded-3 p-3">
15-
<div class="small text-body-secondary mb-1">{% trans "Products" %}</div>
16-
<div class="fs-4 fw-medium lh-sm {% if products_ok == total_products %}text-success{% else %}text-warning-orange{% endif %}">
17-
{{ products_ok }} / {{ total_products }}
15+
<div class="small text-body-secondary mb-1">{% trans "Products with issues" %}</div>
16+
<div class="fs-4 fw-medium lh-sm {% if products_with_issues %}text-danger{% else %}text-success{% endif %}">
17+
{{ products_with_issues }}
1818
</div>
1919
<div class="text-body-tertiary fs-xs mt-1">
20-
{% trans "active products with no issues" %}
20+
{% if products_with_issues %}
21+
{% trans "of" %} {{ total_products }} {% trans "active products" %}
22+
{% else %}
23+
{% trans "All" %} {{ total_products }} {% trans "products are compliant" %}
24+
{% endif %}
2125
</div>
2226
</div>
2327
</div>
@@ -38,30 +42,30 @@ <h1 class="h3 mb-0">{% trans "Compliance Control Center" %}</h1>
3842
</div>
3943
<div class="col-6 col-md-3">
4044
<div class="bg-body-secondary rounded-3 p-3">
41-
<div class="small text-body-secondary mb-1">{% trans "Security compliance" %}</div>
42-
<div class="fs-4 fw-medium lh-sm {% if security_compliance_pct == 100 %}text-success{% elif security_compliance_pct >= 90 %}text-warning-orange{% else %}text-danger{% endif %}">
43-
{{ security_compliance_pct }}%
45+
<div class="small text-body-secondary mb-1">{% trans "Security issues" %}</div>
46+
<div class="fs-4 fw-medium lh-sm {% if products_with_critical_or_high %}text-danger{% elif products_with_vulnerabilities %}text-warning-orange{% else %}text-success{% endif %}">
47+
{{ products_with_critical_or_high }}
4448
</div>
4549
<div class="text-body-tertiary fs-xs mt-1">
46-
{% if products_security_ok == total_products %}
47-
{% trans "No critical or high vulnerabilities" %}
50+
{% if products_with_critical_or_high %}
51+
{% trans "products with critical/high vulnerabilities" %}
4852
{% else %}
49-
{{ products_security_ok }} {% trans "of" %} {{ total_products }} {% trans "products without critical/high" %}
53+
{% trans "No critical or high vulnerabilities" %}
5054
{% endif %}
5155
</div>
5256
</div>
5357
</div>
5458
<div class="col-6 col-md-3">
5559
<div class="bg-body-secondary rounded-3 p-3">
56-
<div class="small text-body-secondary mb-1">{% trans "Vulnerabilities" %}</div>
57-
<div class="fs-4 fw-medium lh-sm {% if products_with_critical %}text-danger{% elif products_with_vulnerabilities %}text-warning-orange{% else %}text-success{% endif %}">
58-
{{ products_with_vulnerabilities }}
60+
<div class="small text-body-secondary mb-1">{% trans "Total vulnerabilities" %}</div>
61+
<div class="fs-4 fw-medium lh-sm {% if total_critical %}text-danger{% elif total_vulnerabilities %}text-warning-orange{% else %}text-success{% endif %}">
62+
{{ total_vulnerabilities|intcomma }}
5963
</div>
6064
<div class="text-body-tertiary fs-xs mt-1">
61-
{% if products_with_critical %}
62-
{{ products_with_critical }} {% trans "with critical vulnerabilities" %}
63-
{% elif products_with_vulnerabilities %}
64-
{% trans "products with vulnerabilities" %}
65+
{% if total_critical %}
66+
{{ total_critical }} {% trans "critical" %}{% if total_high %}, {{ total_high }} {% trans "high" %}{% endif %}
67+
{% elif total_vulnerabilities %}
68+
{% trans "across all products" %}
6569
{% else %}
6670
{% trans "No known vulnerabilities" %}
6771
{% endif %}
@@ -70,7 +74,7 @@ <h1 class="h3 mb-0">{% trans "Compliance Control Center" %}</h1>
7074
</div>
7175
</div>
7276

73-
<div class="border rounded-3 p-3">
77+
<div class="border rounded-3 p-3 pt-2">
7478
<table class="table table-sm mb-0">
7579
<thead>
7680
<tr>
@@ -131,7 +135,7 @@ <h1 class="h3 mb-0">{% trans "Compliance Control Center" %}</h1>
131135
<span class="badge bg-warning-orange-subtle text-warning-orange ms-1">{{ product.high_count }} {% trans "high" %}</span>
132136
{% endif %}
133137
{% if not product.critical_count and not product.high_count %}
134-
<span class="text-body-secondary small">{{ product.vulnerability_count }}</span>
138+
<span class="badge bg-secondary-subtle text-secondary-emphasis">{{ product.vulnerability_count }}</span>
135139
{% endif %}
136140
</td>
137141
</tr>

product_portfolio/views.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2884,42 +2884,43 @@ def get_queryset(self):
28842884
)
28852885

28862886
def get_context_data(self, **kwargs):
2887+
from django.db.models import Sum
2888+
28872889
context = super().get_context_data(**kwargs)
28882890

28892891
products = self.object_list
28902892
total_products = products.count()
28912893

2892-
products_with_license_issues = products.filter(
2893-
Q(license_error_count__gt=0) | Q(license_warning_count__gt=0)
2894+
products_with_issues = products.filter(
2895+
Q(license_error_count__gt=0)
2896+
| Q(license_warning_count__gt=0)
2897+
| Q(critical_count__gt=0)
2898+
| Q(high_count__gt=0)
28942899
).count()
28952900

2896-
products_with_vulnerabilities = products.filter(vulnerability_count__gt=0).count()
2897-
2898-
products_with_critical = products.filter(critical_count__gt=0).count()
2899-
2900-
products_ok = products.filter(
2901-
license_error_count=0,
2902-
license_warning_count=0,
2903-
vulnerability_count=0,
2901+
products_with_license_issues = products.filter(
2902+
Q(license_error_count__gt=0) | Q(license_warning_count__gt=0)
29042903
).count()
29052904

2906-
products_security_ok = products.filter(
2907-
Q(vulnerability_count=0) | Q(critical_count=0, high_count=0)
2905+
products_with_critical_or_high = products.filter(
2906+
Q(critical_count__gt=0) | Q(high_count__gt=0)
29082907
).count()
29092908

2910-
security_compliance_pct = (
2911-
round((products_security_ok / total_products) * 100) if total_products else 100
2909+
totals = products.aggregate(
2910+
total_vulnerabilities=Sum("vulnerability_count"),
2911+
total_critical=Sum("critical_count"),
2912+
total_high=Sum("high_count"),
29122913
)
29132914

29142915
context.update(
29152916
{
29162917
"total_products": total_products,
2918+
"products_with_issues": products_with_issues,
29172919
"products_with_license_issues": products_with_license_issues,
2918-
"products_with_vulnerabilities": products_with_vulnerabilities,
2919-
"products_with_critical": products_with_critical,
2920-
"products_ok": products_ok,
2921-
"products_security_ok": products_security_ok,
2922-
"security_compliance_pct": security_compliance_pct,
2920+
"products_with_critical_or_high": products_with_critical_or_high,
2921+
"total_vulnerabilities": totals["total_vulnerabilities"] or 0,
2922+
"total_critical": totals["total_critical"] or 0,
2923+
"total_high": totals["total_high"] or 0,
29232924
}
29242925
)
29252926

0 commit comments

Comments
 (0)