From 4a3cf7c2d5f6e6c1bc0c8fe6734a33a0cab92d04 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 14 Oct 2024 22:40:20 +0200 Subject: [PATCH] [backend/razor] Indicate scheduled jobs in the queue dashboard Calling both scheduled and delayed jobs delayed is confusing, even if there's no queue system-internal distinction. --- Iceshrimp.Backend/Pages/Queue.cshtml | 42 ++++++++++++++++++++----- Iceshrimp.Backend/Pages/Queue.cshtml.cs | 3 ++ Iceshrimp.Backend/Pages/QueueJob.cshtml | 8 +++-- Iceshrimp.Backend/wwwroot/css/queue.css | 5 +++ 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/Iceshrimp.Backend/Pages/Queue.cshtml b/Iceshrimp.Backend/Pages/Queue.cshtml index 89729343..a0615621 100644 --- a/Iceshrimp.Backend/Pages/Queue.cshtml +++ b/Iceshrimp.Backend/Pages/Queue.cshtml @@ -50,11 +50,26 @@ @foreach (var queue in Model.QueueStatuses ?? throw new Exception("Model.QueueStatuses must not be null here")) { + var isScheduled = QueueModel.ScheduledQueues.Contains(queue.Name); + var scheduled = isScheduled ? queue.JobCounts[Job.JobStatus.Delayed].ToString() : "-"; + var delayed = !isScheduled ? queue.JobCounts[Job.JobStatus.Delayed].ToString() : "-"; + @queue.Name @foreach (var status in Enum.GetValues()) { - @queue.JobCounts[status] + if (status == Job.JobStatus.Delayed) + { + @delayed + } + else if (status == Job.JobStatus.Queued && isScheduled) + { + (@scheduled) @queue.JobCounts[status] + } + else + { + @queue.JobCounts[status] + } } } @@ -85,14 +100,19 @@ else { + var delayedStr = QueueModel.ScheduledQueues.Contains(Model.Queue) ? "scheduled" : "delayed"; if (Model.Filter == null) { -

Listing @Model.TotalCount @Model.Queue jobs, out of which @Model.RunningCount are running, @Model.QueuedCount are queued and @Model.DelayedCount are delayed.

+

Listing @Model.TotalCount @Model.Queue jobs, out of which @Model.RunningCount are running, @Model.QueuedCount are queued and @Model.DelayedCount are @delayedStr.

} else { + var filterStr = Model.Filter.Value == Job.JobStatus.Delayed && QueueModel.ScheduledQueues.Contains(Model.Queue) + ? "scheduled" + : Model.Filter.Value.ToString().ToLowerInvariant(); +

- Listing @Model.TotalCount @Model.Filter.Value.ToString().ToLowerInvariant() @Model.Queue jobs. + Listing @Model.TotalCount @filterStr @Model.Queue jobs. @if (Model.Filter is Job.JobStatus.Failed) { Batch retry: all failed / all on this page @@ -158,13 +178,17 @@ else } @foreach (var status in Enum.GetValues()) { + var statusStr = status == Job.JobStatus.Delayed && QueueModel.ScheduledQueues.Contains(Model.Queue) + ? "Scheduled" + : status.ToString(); + if (Model.Filter.Equals(status)) { - + } else { - + } } @@ -181,6 +205,8 @@ else var id = job.Id.ToStringLower(); var additional = job.Status switch { + Job.JobStatus.Delayed when job.RetryCount is 0 => $"for {job.DelayedUntil?.ToLocalTime().ToDisplayStringTz() ?? ""}", + // Separated for readability Job.JobStatus.Queued => $"for {job.QueueDuration.ToDurationDisplayString()}", Job.JobStatus.Running => $"for {job.Duration.ToDurationDisplayString()}", Job.JobStatus.Delayed => $"until {job.DelayedUntil?.ToLocalTime().ToDisplayStringTz() ?? ""}", @@ -193,6 +219,8 @@ else ? "new-item" : ""; + var status = job is { Status: Job.JobStatus.Delayed, RetryCount: 0 } ? "Scheduled" : job.Status.ToString(); + @if (withQueue) { @@ -203,8 +231,8 @@ else { @id } - - @job.Status @additional + + @status @additional View details diff --git a/Iceshrimp.Backend/Pages/Queue.cshtml.cs b/Iceshrimp.Backend/Pages/Queue.cshtml.cs index ef15e88f..e692f89d 100644 --- a/Iceshrimp.Backend/Pages/Queue.cshtml.cs +++ b/Iceshrimp.Backend/Pages/Queue.cshtml.cs @@ -1,3 +1,4 @@ +using System.Collections.Immutable; using Iceshrimp.Backend.Core.Database; using Iceshrimp.Backend.Core.Database.Tables; using Iceshrimp.Backend.Core.Middleware; @@ -23,6 +24,8 @@ public class QueueModel(DatabaseContext db, QueueService queueSvc, MetaService m public long? Last; public string InstanceName = "Iceshrimp.NET"; + public static readonly ImmutableArray ScheduledQueues = ["background-task", "backfill"]; + public async Task OnGet( [FromRoute] string? queue, [FromRoute(Name = "pagination")] int? page, [FromRoute] string? status ) diff --git a/Iceshrimp.Backend/Pages/QueueJob.cshtml b/Iceshrimp.Backend/Pages/QueueJob.cshtml index 1ea4fd28..42f8ca72 100644 --- a/Iceshrimp.Backend/Pages/QueueJob.cshtml +++ b/Iceshrimp.Backend/Pages/QueueJob.cshtml @@ -35,8 +35,11 @@ @Model.Job.Queue + @{ + var status = Model.Job is { Status: Job.JobStatus.Delayed, RetryCount: 0 } ? "Scheduled" : Model.Job.Status.ToString(); + } Status - @Model.Job.Status + @status @if (Model.Job.Status.Equals(Job.JobStatus.Failed)) { @@ -49,10 +52,11 @@ } else if (Model.Job.Status.Equals(Job.JobStatus.Delayed)) { + var abandonName = Model.Job.RetryCount == 0 ? "Deschedule" : "Abandon"; Actions - Abandon + @abandonName } diff --git a/Iceshrimp.Backend/wwwroot/css/queue.css b/Iceshrimp.Backend/wwwroot/css/queue.css index 85fef262..c88d89f8 100644 --- a/Iceshrimp.Backend/wwwroot/css/queue.css +++ b/Iceshrimp.Backend/wwwroot/css/queue.css @@ -1,6 +1,7 @@ :root { --queued-color: #9958FC; --delayed-color: #FFCD59; + --scheduled-color: #FFE4A5; --running-color: #59D5FF; --completed-color: #92EF5F; --failed-color: #FF5151; @@ -14,6 +15,10 @@ color: var(--delayed-color); } +.status-scheduled { + color: var(--scheduled-color); +} + .status-running { color: var(--running-color); }