diff --git a/src/pobsync_backend/templates/pobsync_backend/host_detail.html b/src/pobsync_backend/templates/pobsync_backend/host_detail.html index 316fde3..76b67bb 100644 --- a/src/pobsync_backend/templates/pobsync_backend/host_detail.html +++ b/src/pobsync_backend/templates/pobsync_backend/host_detail.html @@ -433,7 +433,7 @@ {% endfor %} -
+
diff --git a/src/pobsync_backend/templates/pobsync_backend/run_detail.html b/src/pobsync_backend/templates/pobsync_backend/run_detail.html index 8f042f9..6e06b06 100644 --- a/src/pobsync_backend/templates/pobsync_backend/run_detail.html +++ b/src/pobsync_backend/templates/pobsync_backend/run_detail.html @@ -11,20 +11,6 @@
Back to host - {% if can_cancel %} -
- {% csrf_token %} - -
- {% endif %} - {% if run.status == "failed" or run.status == "warning" %} - {% if not run.reviewed_at %} -
- {% csrf_token %} - -
- {% endif %} - {% endif %}
@@ -35,6 +21,22 @@
Rsync
{{ run.rsync_exit_code|default:"" }}
+ {% if can_cancel %} +
+

Run Control

+

+ Cancelling a queued run stops it immediately. Cancelling a running run asks the worker to stop + and records the cancellation request on this run. +

+
+ {% csrf_token %} +
+ +
+
+
+ {% endif %} + {% if failure %}

Failure

@@ -46,6 +48,21 @@
{% endif %} + {% if run.status == "failed" or run.status == "warning" %} + {% if not run.reviewed_at %} +
+

Review Required

+

Mark this run as reviewed after you have checked the failure or warning and no longer need it in the action queue.

+
+ {% csrf_token %} +
+ +
+
+
+ {% endif %} + {% endif %} + {% if run.reviewed_at %}

Review

diff --git a/src/pobsync_backend/tests/test_views.py b/src/pobsync_backend/tests/test_views.py index 4ac4bb4..e221eeb 100644 --- a/src/pobsync_backend/tests/test_views.py +++ b/src/pobsync_backend/tests/test_views.py @@ -1667,8 +1667,11 @@ class ViewTests(TestCase): response = self.client.get(reverse("run_detail", args=[run.id])) self.assertEqual(response.status_code, 200) + self.assertContains(response, "Run Control") + self.assertContains(response, "Cancelling a queued run stops it immediately") self.assertContains(response, "Cancel run") self.assertContains(response, reverse("cancel_run", args=[run.id])) + self.assertContains(response, 'class="danger"', html=False) def test_run_detail_renders_worker_execution_metadata(self) -> None: self.client.force_login(self.staff_user)