solid_queue_web 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +220 -4
- data/app/assets/stylesheets/solid_queue_web/_04_table.css +28 -0
- data/app/controllers/solid_queue_web/application_controller.rb +30 -0
- data/app/controllers/solid_queue_web/audit_controller.rb +43 -0
- data/app/controllers/solid_queue_web/blocked_jobs_controller.rb +2 -2
- data/app/controllers/solid_queue_web/failed_jobs/arguments_controller.rb +3 -3
- data/app/controllers/solid_queue_web/failed_jobs/selections_controller.rb +6 -4
- data/app/controllers/solid_queue_web/failed_jobs_controller.rb +4 -2
- data/app/controllers/solid_queue_web/jobs/selections_controller.rb +4 -3
- data/app/controllers/solid_queue_web/jobs_controller.rb +7 -3
- data/app/controllers/solid_queue_web/queues/jobs_controller.rb +5 -5
- data/app/controllers/solid_queue_web/queues/pauses_controller.rb +6 -4
- data/app/controllers/solid_queue_web/recurring_tasks/runs_controller.rb +4 -4
- data/app/controllers/solid_queue_web/retry_failed_jobs_controller.rb +6 -5
- data/app/controllers/solid_queue_web/scheduled_jobs_controller.rb +5 -5
- data/app/models/solid_queue_web/audit_event.rb +17 -0
- data/app/views/layouts/solid_queue_web/application.html.erb +20 -16
- data/app/views/solid_queue_web/audit/index.html.erb +78 -0
- data/app/views/solid_queue_web/dashboard/index.html.erb +67 -46
- data/app/views/solid_queue_web/failed_jobs/errors/index.html.erb +7 -7
- data/app/views/solid_queue_web/failed_jobs/index.html.erb +31 -31
- data/app/views/solid_queue_web/history/index.html.erb +14 -14
- data/app/views/solid_queue_web/jobs/index.html.erb +42 -42
- data/app/views/solid_queue_web/jobs/show.html.erb +20 -20
- data/app/views/solid_queue_web/performance/index.html.erb +16 -14
- data/app/views/solid_queue_web/processes/index.html.erb +16 -16
- data/app/views/solid_queue_web/queues/index.html.erb +16 -16
- data/app/views/solid_queue_web/queues/jobs/index.html.erb +21 -21
- data/app/views/solid_queue_web/recurring_tasks/index.html.erb +15 -15
- data/app/views/solid_queue_web/search/index.html.erb +13 -13
- data/config/locales/en.yml +330 -0
- data/config/routes.rb +1 -0
- data/db/migrate/01_create_solid_queue_web_audit_events.rb +16 -0
- data/lib/generators/solid_queue_web/install/migrations_generator.rb +24 -0
- data/lib/generators/solid_queue_web/install/templates/create_solid_queue_web_audit_events.rb.tt +16 -0
- data/lib/solid_queue_web/engine.rb +1 -0
- data/lib/solid_queue_web/version.rb +1 -1
- data/lib/solid_queue_web.rb +18 -1
- metadata +8 -1
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
<%= turbo_frame_tag "processes", target: "_top", data: { controller: "refresh", refresh_interval_value: SolidQueueWeb.default_refresh_interval } do %>
|
|
2
|
-
<h1 class="sqd-page-title"
|
|
2
|
+
<h1 class="sqd-page-title"><%= t("solid_queue_web.processes.title") %></h1>
|
|
3
3
|
|
|
4
4
|
<div class="sqd-card">
|
|
5
5
|
<% if @processes.empty? %>
|
|
6
|
-
<div class="sqd-empty"
|
|
6
|
+
<div class="sqd-empty"><%= t("solid_queue_web.processes.empty") %></div>
|
|
7
7
|
<% else %>
|
|
8
8
|
<table>
|
|
9
9
|
<thead>
|
|
10
10
|
<tr>
|
|
11
|
-
<th scope="col"
|
|
12
|
-
<th scope="col"
|
|
13
|
-
<th scope="col"
|
|
14
|
-
<th scope="col"
|
|
15
|
-
<th scope="col"
|
|
16
|
-
<th scope="col"
|
|
17
|
-
<th scope="col"
|
|
11
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_kind") %></th>
|
|
12
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_name") %></th>
|
|
13
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_pid") %></th>
|
|
14
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_host") %></th>
|
|
15
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_details") %></th>
|
|
16
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_last_heartbeat") %></th>
|
|
17
|
+
<th scope="col"><%= t("solid_queue_web.processes.col_status") %></th>
|
|
18
18
|
</tr>
|
|
19
19
|
</thead>
|
|
20
20
|
<tbody>
|
|
@@ -28,23 +28,23 @@
|
|
|
28
28
|
<td class="sqd-process-meta">
|
|
29
29
|
<% meta = process.metadata || {} %>
|
|
30
30
|
<% if meta["queues"].present? %>
|
|
31
|
-
<span title="
|
|
31
|
+
<span title="<%= t("solid_queue_web.processes.queues_title") %>"><%= Array(meta["queues"]).join(", ") %></span>
|
|
32
32
|
<% end %>
|
|
33
33
|
<% if meta["thread_count"].present? %>
|
|
34
|
-
<span class="sqd-muted-text"><%= meta["thread_count"]
|
|
34
|
+
<span class="sqd-muted-text"><%= t("solid_queue_web.processes.threads", count: meta["thread_count"]) %></span>
|
|
35
35
|
<% end %>
|
|
36
36
|
<% if meta["polling_interval"].present? %>
|
|
37
|
-
<span class="sqd-muted-text"
|
|
37
|
+
<span class="sqd-muted-text"><%= t("solid_queue_web.processes.polling_interval", interval: meta["polling_interval"]) %></span>
|
|
38
38
|
<% end %>
|
|
39
39
|
</td>
|
|
40
40
|
<td class="sqd-mono sqd-muted-text" title="<%= process.last_heartbeat_at %>">
|
|
41
|
-
<%= time_ago_in_words(process.last_heartbeat_at) %>
|
|
41
|
+
<%= t("solid_queue_web.processes.last_heartbeat_ago", time: time_ago_in_words(process.last_heartbeat_at)) %>
|
|
42
42
|
</td>
|
|
43
43
|
<td>
|
|
44
44
|
<% if stale %>
|
|
45
|
-
<span class="sqd-badge sqd-badge--failed"
|
|
45
|
+
<span class="sqd-badge sqd-badge--failed"><%= t("solid_queue_web.processes.status_stale") %></span>
|
|
46
46
|
<% else %>
|
|
47
|
-
<span class="sqd-badge sqd-badge--running"
|
|
47
|
+
<span class="sqd-badge sqd-badge--running"><%= t("solid_queue_web.processes.status_healthy") %></span>
|
|
48
48
|
<% end %>
|
|
49
49
|
</td>
|
|
50
50
|
</tr>
|
|
@@ -53,4 +53,4 @@
|
|
|
53
53
|
</table>
|
|
54
54
|
<% end %>
|
|
55
55
|
</div>
|
|
56
|
-
<% end %>
|
|
56
|
+
<% end %>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<h1 class="sqd-page-title"
|
|
1
|
+
<h1 class="sqd-page-title"><%= t("solid_queue_web.queues.title") %></h1>
|
|
2
2
|
|
|
3
3
|
<div class="sqd-card">
|
|
4
4
|
<% if @queues.empty? %>
|
|
5
|
-
<div class="sqd-empty"
|
|
5
|
+
<div class="sqd-empty"><%= t("solid_queue_web.queues.empty") %></div>
|
|
6
6
|
<% else %>
|
|
7
7
|
<table>
|
|
8
8
|
<thead>
|
|
9
9
|
<tr>
|
|
10
|
-
<th scope="col"
|
|
11
|
-
<th scope="col"
|
|
12
|
-
<th scope="col"
|
|
13
|
-
<th scope="col"
|
|
14
|
-
<th scope="col"
|
|
15
|
-
<th scope="col"
|
|
16
|
-
<th scope="col"
|
|
17
|
-
<th scope="col"><span class="sqd-sr-only"
|
|
10
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_name") %></th>
|
|
11
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_size") %></th>
|
|
12
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_latency") %></th>
|
|
13
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_done_24h") %></th>
|
|
14
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_failed_24h") %></th>
|
|
15
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_failure_rate") %></th>
|
|
16
|
+
<th scope="col"><%= t("solid_queue_web.queues.col_status") %></th>
|
|
17
|
+
<th scope="col"><span class="sqd-sr-only"><%= t("solid_queue_web.queues.actions") %></span></th>
|
|
18
18
|
</tr>
|
|
19
19
|
</thead>
|
|
20
20
|
<tbody>
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
<td>
|
|
39
39
|
<% sparkline = @failure_sparklines[queue.name] %>
|
|
40
40
|
<% if sparkline.any? %>
|
|
41
|
-
<div class="sqd-mini-sparkline" aria-label="
|
|
41
|
+
<div class="sqd-mini-sparkline" aria-label="<%= t("solid_queue_web.queues.failure_rate_aria", queue: queue.name) %>">
|
|
42
42
|
<% sparkline.each_with_index do |rate, i| %>
|
|
43
43
|
<% pct = rate || 0 %>
|
|
44
44
|
<% hour_label = (12 - i).hours.ago.strftime("%-I%p").downcase %>
|
|
@@ -53,19 +53,19 @@
|
|
|
53
53
|
</td>
|
|
54
54
|
<td>
|
|
55
55
|
<% if @paused_queue_names.include?(queue.name) %>
|
|
56
|
-
<span class="sqd-badge sqd-badge--paused"
|
|
56
|
+
<span class="sqd-badge sqd-badge--paused"><%= t("solid_queue_web.queues.status_paused") %></span>
|
|
57
57
|
<% else %>
|
|
58
|
-
<span class="sqd-badge sqd-badge--running"
|
|
58
|
+
<span class="sqd-badge sqd-badge--running"><%= t("solid_queue_web.queues.status_running") %></span>
|
|
59
59
|
<% end %>
|
|
60
60
|
</td>
|
|
61
61
|
<td class="sqd-row-actions">
|
|
62
62
|
<% if @paused_queue_names.include?(queue.name) %>
|
|
63
|
-
<%= button_to "
|
|
63
|
+
<%= button_to t("solid_queue_web.queues.resume"), queue_pause_path(queue.name), method: :delete,
|
|
64
64
|
class: "sqd-btn sqd-btn--primary sqd-btn--sm" %>
|
|
65
65
|
<% else %>
|
|
66
|
-
<%= button_to "
|
|
66
|
+
<%= button_to t("solid_queue_web.queues.pause"), queue_pause_path(queue.name), method: :post,
|
|
67
67
|
class: "sqd-btn sqd-btn--muted sqd-btn--sm",
|
|
68
|
-
data: { confirm: "
|
|
68
|
+
data: { confirm: t("solid_queue_web.queues.confirm_pause", name: queue.name) } %>
|
|
69
69
|
<% end %>
|
|
70
70
|
</td>
|
|
71
71
|
</tr>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<div class="sqd-page-header">
|
|
2
2
|
<div>
|
|
3
3
|
<div class="sqd-breadcrumb">
|
|
4
|
-
<%= link_to "
|
|
4
|
+
<%= link_to t("solid_queue_web.queue_jobs.breadcrumb_queues"), queues_path %> › <%= @queue %>
|
|
5
5
|
</div>
|
|
6
|
-
<h1 class="sqd-page-title"
|
|
6
|
+
<h1 class="sqd-page-title"><%= t("solid_queue_web.queue_jobs.title") %></h1>
|
|
7
7
|
</div>
|
|
8
8
|
</div>
|
|
9
9
|
|
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
<div class="sqd-page-header">
|
|
14
14
|
<div class="sqd-filters">
|
|
15
|
-
<%= link_to "
|
|
16
|
-
<%= link_to "
|
|
17
|
-
<%= link_to "
|
|
18
|
-
<%= link_to "
|
|
19
|
-
<%= link_to "
|
|
15
|
+
<%= link_to t("solid_queue_web.queue_jobs.tab_ready"), queue_jobs_path(queue_name: @queue, status: "ready", q: @search), class: @status == "ready" ? "active" : "" %>
|
|
16
|
+
<%= link_to t("solid_queue_web.queue_jobs.tab_scheduled"), queue_jobs_path(queue_name: @queue, status: "scheduled", q: @search), class: @status == "scheduled" ? "active" : "" %>
|
|
17
|
+
<%= link_to t("solid_queue_web.queue_jobs.tab_running"), queue_jobs_path(queue_name: @queue, status: "claimed", q: @search), class: @status == "claimed" ? "active" : "" %>
|
|
18
|
+
<%= link_to t("solid_queue_web.queue_jobs.tab_blocked"), queue_jobs_path(queue_name: @queue, status: "blocked", q: @search), class: @status == "blocked" ? "active" : "" %>
|
|
19
|
+
<%= link_to t("solid_queue_web.queue_jobs.tab_failed"), queue_jobs_path(queue_name: @queue, status: "failed", q: @search), class: @status == "failed" ? "active" : "" %>
|
|
20
20
|
</div>
|
|
21
21
|
<% if discardable && @jobs.any? %>
|
|
22
22
|
<div class="sqd-actions">
|
|
23
|
-
<%= button_to "
|
|
23
|
+
<%= button_to t("solid_queue_web.queue_jobs.discard_all"), discard_all_queue_jobs_path(queue_name: @queue),
|
|
24
24
|
method: :post,
|
|
25
25
|
params: { status: @status },
|
|
26
26
|
class: "sqd-btn sqd-btn--danger",
|
|
27
|
-
data: { confirm: "
|
|
27
|
+
data: { confirm: t("solid_queue_web.queue_jobs.confirm_discard_all", count: @jobs.size, status: @status, queue: @queue) } %>
|
|
28
28
|
</div>
|
|
29
29
|
<% end %>
|
|
30
30
|
</div>
|
|
@@ -32,26 +32,26 @@
|
|
|
32
32
|
<form class="sqd-search" action="<%= queue_jobs_path(queue_name: @queue) %>" method="get" data-controller="search">
|
|
33
33
|
<input type="hidden" name="status" value="<%= @status %>">
|
|
34
34
|
<input class="sqd-search__input" type="search" name="q" value="<%= @search %>"
|
|
35
|
-
placeholder="
|
|
35
|
+
placeholder="<%= t("solid_queue_web.queue_jobs.placeholder_job_class") %>" autocomplete="off" aria-label="<%= t("solid_queue_web.queue_jobs.aria_filter_job_class") %>"
|
|
36
36
|
data-action="input->search#filter">
|
|
37
|
-
<button type="submit" class="sqd-btn sqd-btn--muted"
|
|
37
|
+
<button type="submit" class="sqd-btn sqd-btn--muted"><%= t("solid_queue_web.queue_jobs.search_button") %></button>
|
|
38
38
|
<% if @search.present? %>
|
|
39
|
-
<%= link_to "
|
|
39
|
+
<%= link_to t("solid_queue_web.shared.clear"), queue_jobs_path(queue_name: @queue, status: @status), class: "sqd-btn sqd-btn--muted" %>
|
|
40
40
|
<% end %>
|
|
41
41
|
</form>
|
|
42
42
|
|
|
43
43
|
<div class="sqd-card" id="jobs-list">
|
|
44
44
|
<% if @jobs.empty? %>
|
|
45
|
-
<div class="sqd-empty"
|
|
45
|
+
<div class="sqd-empty"><%= t("solid_queue_web.queue_jobs.no_jobs", status: @status, queue: @queue) %></div>
|
|
46
46
|
<% else %>
|
|
47
47
|
<table>
|
|
48
48
|
<thead>
|
|
49
49
|
<tr>
|
|
50
|
-
<th scope="col"
|
|
51
|
-
<th scope="col"
|
|
52
|
-
<th scope="col"
|
|
53
|
-
<th scope="col"
|
|
54
|
-
<% if discardable %><th scope="col"><span class="sqd-sr-only"
|
|
50
|
+
<th scope="col"><%= t("solid_queue_web.queue_jobs.col_job_class") %></th>
|
|
51
|
+
<th scope="col"><%= t("solid_queue_web.queue_jobs.col_priority") %></th>
|
|
52
|
+
<th scope="col"><%= t("solid_queue_web.queue_jobs.col_scheduled_at") %></th>
|
|
53
|
+
<th scope="col"><%= t("solid_queue_web.queue_jobs.col_enqueued_at") %></th>
|
|
54
|
+
<% if discardable %><th scope="col"><span class="sqd-sr-only"><%= t("solid_queue_web.queue_jobs.actions") %></span></th><% end %>
|
|
55
55
|
</tr>
|
|
56
56
|
</thead>
|
|
57
57
|
<tbody>
|
|
@@ -69,11 +69,11 @@
|
|
|
69
69
|
<td class="sqd-mono"><%= format_timestamp(job.created_at) %></td>
|
|
70
70
|
<% if discardable %>
|
|
71
71
|
<td class="sqd-row-actions">
|
|
72
|
-
<%= button_to "
|
|
72
|
+
<%= button_to t("solid_queue_web.queue_jobs.discard"), queue_job_path(queue_name: @queue, id: execution),
|
|
73
73
|
method: :delete,
|
|
74
74
|
params: { status: @status },
|
|
75
75
|
class: "sqd-btn sqd-btn--danger sqd-btn--sm",
|
|
76
|
-
data: { confirm: "
|
|
76
|
+
data: { confirm: t("solid_queue_web.queue_jobs.confirm_discard") } %>
|
|
77
77
|
</td>
|
|
78
78
|
<% end %>
|
|
79
79
|
</tr>
|
|
@@ -86,4 +86,4 @@
|
|
|
86
86
|
<% if @pagy.last > 1 %>
|
|
87
87
|
<%= @pagy.series_nav.html_safe %>
|
|
88
88
|
<% end %>
|
|
89
|
-
<% end %>
|
|
89
|
+
<% end %>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<h1 class="sqd-page-title"
|
|
1
|
+
<h1 class="sqd-page-title"><%= t("solid_queue_web.recurring_tasks.title") %></h1>
|
|
2
2
|
|
|
3
3
|
<div class="sqd-card" style="margin-top: 1.5rem;">
|
|
4
4
|
<% if @recurring_tasks.empty? %>
|
|
5
|
-
<div class="sqd-empty"
|
|
5
|
+
<div class="sqd-empty"><%= t("solid_queue_web.recurring_tasks.empty") %></div>
|
|
6
6
|
<% else %>
|
|
7
7
|
<table>
|
|
8
8
|
<thead>
|
|
9
9
|
<tr>
|
|
10
|
-
<th scope="col"
|
|
11
|
-
<th scope="col"
|
|
12
|
-
<th scope="col"
|
|
13
|
-
<th scope="col"
|
|
14
|
-
<th scope="col"
|
|
15
|
-
<th scope="col"
|
|
16
|
-
<th scope="col"
|
|
17
|
-
<th scope="col"><span class="sqd-sr-only"
|
|
10
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_key") %></th>
|
|
11
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_schedule") %></th>
|
|
12
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_job_command") %></th>
|
|
13
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_queue") %></th>
|
|
14
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_next_run") %></th>
|
|
15
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_last_run") %></th>
|
|
16
|
+
<th scope="col"><%= t("solid_queue_web.recurring_tasks.col_type") %></th>
|
|
17
|
+
<th scope="col"><span class="sqd-sr-only"><%= t("solid_queue_web.shared.actions") %></span></th>
|
|
18
18
|
</tr>
|
|
19
19
|
</thead>
|
|
20
20
|
<tbody>
|
|
@@ -56,20 +56,20 @@
|
|
|
56
56
|
</td>
|
|
57
57
|
<td>
|
|
58
58
|
<% if task.static? %>
|
|
59
|
-
<span class="sqd-badge sqd-badge--static"
|
|
59
|
+
<span class="sqd-badge sqd-badge--static"><%= t("solid_queue_web.recurring_tasks.type_static") %></span>
|
|
60
60
|
<% else %>
|
|
61
|
-
<span class="sqd-badge sqd-badge--dynamic"
|
|
61
|
+
<span class="sqd-badge sqd-badge--dynamic"><%= t("solid_queue_web.recurring_tasks.type_dynamic") %></span>
|
|
62
62
|
<% end %>
|
|
63
63
|
</td>
|
|
64
64
|
<td class="sqd-row-actions">
|
|
65
|
-
<%= button_to "
|
|
65
|
+
<%= button_to t("solid_queue_web.recurring_tasks.run_now"), recurring_task_run_path(task.key),
|
|
66
66
|
method: :post,
|
|
67
67
|
class: "sqd-btn sqd-btn--primary sqd-btn--sm",
|
|
68
|
-
data: { confirm: "
|
|
68
|
+
data: { confirm: t("solid_queue_web.recurring_tasks.confirm_run_now", key: task.key) } %>
|
|
69
69
|
</td>
|
|
70
70
|
</tr>
|
|
71
71
|
<% end %>
|
|
72
72
|
</tbody>
|
|
73
73
|
</table>
|
|
74
74
|
<% end %>
|
|
75
|
-
</div>
|
|
75
|
+
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<h1 class="sqd-page-title" style="margin-bottom: 1.5rem;"
|
|
1
|
+
<h1 class="sqd-page-title" style="margin-bottom: 1.5rem;"><%= t("solid_queue_web.search.title") %></h1>
|
|
2
2
|
|
|
3
3
|
<datalist id="job-class-list">
|
|
4
4
|
<% @job_classes.each do |klass| %>
|
|
@@ -8,42 +8,42 @@
|
|
|
8
8
|
|
|
9
9
|
<form class="sqd-search sqd-search--global" action="<%= search_path %>" method="get" data-controller="search">
|
|
10
10
|
<input class="sqd-search__input sqd-search__input--lg" type="search" name="q"
|
|
11
|
-
value="<%= @query %>" placeholder="
|
|
11
|
+
value="<%= @query %>" placeholder="<%= t("solid_queue_web.search.placeholder") %>"
|
|
12
12
|
list="job-class-list" autocomplete="off"
|
|
13
|
-
aria-label="
|
|
13
|
+
aria-label="<%= t("solid_queue_web.search.aria_label") %>"
|
|
14
14
|
data-action="change->search#select">
|
|
15
15
|
<% if @query.present? %>
|
|
16
|
-
<%= link_to "
|
|
16
|
+
<%= link_to t("solid_queue_web.search.clear"), search_path, class: "sqd-btn sqd-btn--muted" %>
|
|
17
17
|
<% end %>
|
|
18
18
|
</form>
|
|
19
19
|
|
|
20
20
|
<% if @query.present? %>
|
|
21
21
|
<% if @results.empty? %>
|
|
22
|
-
<div class="sqd-empty" style="margin-top: 1rem;"
|
|
22
|
+
<div class="sqd-empty" style="margin-top: 1rem;"><%= t("solid_queue_web.search.no_results", query: @query) %></div>
|
|
23
23
|
<% else %>
|
|
24
24
|
<% @results.each do |status, data| %>
|
|
25
25
|
<div class="sqd-search-group">
|
|
26
26
|
<div class="sqd-search-group__header">
|
|
27
27
|
<span class="sqd-badge sqd-badge--<%= status %>"><%= status %></span>
|
|
28
28
|
<span class="sqd-muted-text">
|
|
29
|
-
<%=
|
|
29
|
+
<%= t("solid_queue_web.search.matches", count: data[:total]) %>
|
|
30
30
|
<% if data[:total] > SolidQueueWeb.search_results_limit %>
|
|
31
|
-
|
|
31
|
+
<%= t("solid_queue_web.search.showing_first", limit: SolidQueueWeb.search_results_limit) %>
|
|
32
32
|
<% end %>
|
|
33
33
|
</span>
|
|
34
34
|
<% if status == "failed" %>
|
|
35
|
-
<%= link_to "
|
|
35
|
+
<%= link_to t("solid_queue_web.search.view_all"), failed_jobs_path(q: @query), class: "sqd-btn sqd-btn--muted sqd-btn--sm" %>
|
|
36
36
|
<% else %>
|
|
37
|
-
<%= link_to "
|
|
37
|
+
<%= link_to t("solid_queue_web.search.view_all"), jobs_path(status: status, q: @query), class: "sqd-btn sqd-btn--muted sqd-btn--sm" %>
|
|
38
38
|
<% end %>
|
|
39
39
|
</div>
|
|
40
40
|
<div class="sqd-card">
|
|
41
41
|
<table>
|
|
42
42
|
<thead>
|
|
43
43
|
<tr>
|
|
44
|
-
<th scope="col"
|
|
45
|
-
<th scope="col"
|
|
46
|
-
<th scope="col"
|
|
44
|
+
<th scope="col"><%= t("solid_queue_web.search.col_job_class") %></th>
|
|
45
|
+
<th scope="col"><%= t("solid_queue_web.search.col_queue") %></th>
|
|
46
|
+
<th scope="col"><%= t("solid_queue_web.search.col_enqueued_at") %></th>
|
|
47
47
|
</tr>
|
|
48
48
|
</thead>
|
|
49
49
|
<tbody>
|
|
@@ -61,4 +61,4 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
<% end %>
|
|
63
63
|
<% end %>
|
|
64
|
-
<% end %>
|
|
64
|
+
<% end %>
|