Skip to content

Commit 08a9d44

Browse files
committed
Refresh the cell every 10 seconds on running scan #222
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent d3aee83 commit 08a9d44

5 files changed

Lines changed: 60 additions & 2 deletions

File tree

component_catalog/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from component_catalog.views import ScanListView
2424
from component_catalog.views import component_create_ajax_view
2525
from component_catalog.views import delete_scan_view
26+
from component_catalog.views import get_scan_progress_htmx_view
2627
from component_catalog.views import package_create_ajax_view
2728
from component_catalog.views import package_scan_view
2829
from component_catalog.views import send_scan_data_as_file_view
@@ -98,6 +99,11 @@
9899
package_scan_view,
99100
name="package_scan",
100101
),
102+
path(
103+
"packages/<str:dataspace>/<uuid:uuid>/scan_progress_htmx/",
104+
get_scan_progress_htmx_view,
105+
name="scan_progress_htmx",
106+
),
101107
path(
102108
"packages/<str:dataspace>/<uuid:uuid>/tab_scan/",
103109
PackageTabScanView.as_view(),

component_catalog/views.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from django.utils.translation import gettext_lazy as _
4141
from django.views.decorators.csrf import csrf_exempt
4242
from django.views.decorators.csrf import csrf_protect
43+
from django.views.decorators.http import require_GET
4344
from django.views.decorators.http import require_POST
4445
from django.views.generic import FormView
4546
from django.views.generic.edit import BaseFormView
@@ -1477,9 +1478,17 @@ def package_scan_view(request, dataspace, uuid):
14771478
dataspace=dataspace,
14781479
)
14791480
scan["download_result_url"] = get_scan_results_as_file_url(scan)
1481+
1482+
status = scancodeio.get_status_from_scan_results(scan)
1483+
needs_refresh = False
1484+
if status in ["running", "not_started", "queued"]:
1485+
needs_refresh = True
1486+
14801487
context = {
1488+
"package": package,
14811489
"scan": scan,
14821490
"view_url": package.get_absolute_url(),
1491+
"needs_refresh": needs_refresh,
14831492
}
14841493
return render(request, template, context)
14851494

@@ -1498,6 +1507,36 @@ def package_scan_view(request, dataspace, uuid):
14981507
return redirect(f"{package.details_url}#scan")
14991508

15001509

1510+
@login_required
1511+
@require_GET
1512+
def get_scan_progress_htmx_view(request, dataspace, uuid):
1513+
template = "product_portfolio/tables/scan_progress_cell.html"
1514+
dataspace = request.user.dataspace
1515+
package = get_object_or_404(Package, uuid=uuid, dataspace=dataspace)
1516+
scancodeio = ScanCodeIO(dataspace)
1517+
1518+
scan = scancodeio.get_scan_results(
1519+
download_url=package.download_url,
1520+
dataspace=dataspace,
1521+
)
1522+
if not scan:
1523+
raise Http404("Scan not found.")
1524+
1525+
status = scancodeio.get_status_from_scan_results(scan)
1526+
needs_refresh = False
1527+
if status in ["running", "not_started", "queued"]:
1528+
needs_refresh = True
1529+
1530+
scan["download_result_url"] = get_scan_results_as_file_url(scan)
1531+
context = {
1532+
"package": package,
1533+
"scan": scan,
1534+
"view_url": package.get_absolute_url(),
1535+
"needs_refresh": needs_refresh,
1536+
}
1537+
return render(request, template, context)
1538+
1539+
15011540
@login_required
15021541
@require_POST
15031542
def package_create_ajax_view(request):

dejacode_toolkit/scancodeio.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,13 @@ def delete_scan(self, detail_url):
156156
logger.debug(f"{self.label} [Exception] {exception}")
157157
return False
158158

159+
@staticmethod
160+
def get_status_from_scan_results(scan_results):
161+
status = ""
162+
if runs := scan_results.get("runs"):
163+
status = runs[0].get("status", "")
164+
return status
165+
159166
def update_from_scan(self, package, user):
160167
"""
161168
Update the provided `package` instance using values from Scan results.

product_portfolio/templates/product_portfolio/tables/scan_progress_cell.html

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
<div id="scan-progress-{{ scan.uuid }}">
1+
<div id="scan-progress-{{ scan.uuid }}"
2+
{% if needs_refresh %}
3+
hx-get="{% url 'component_catalog:scan_progress_htmx' package.dataspace.name package.uuid %}"
4+
hx-trigger="load delay:10s"
5+
hx-swap="innerHTML"
6+
{% endif %}
7+
>
28
{% include 'component_catalog/includes/scan_status.html' with status=scan.runs.0.status only %}
39
<ul class="list-inline mt-1 mb-0">
410
{% if view_url %}

product_portfolio/templates/product_portfolio/tabs/tab_inventory.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@
149149
{% if display_scan_features %}
150150
<td>
151151
{% if relation.scan %}
152-
{% include 'product_portfolio/tables/scan_progress_cell.html' with scan=relation.scan view_url=relation.package.get_absolute_url only %}
152+
{% include 'product_portfolio/tables/scan_progress_cell.html' with scan=relation.scan view_url=relation.package.get_absolute_url package=relation.packages only %}
153153
{% elif relation.package %}
154154
{% include 'product_portfolio/tables/scan_action_cell.html' with package=relation.package user=request.user only %}
155155
{% endif %}

0 commit comments

Comments
 (0)