pgbus 0.2.6 → 0.2.8
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 +12 -2
- data/app/controllers/pgbus/queues_controller.rb +22 -0
- data/app/views/layouts/pgbus/application.html.erb +114 -10
- data/app/views/pgbus/jobs/_enqueued_table.html.erb +10 -0
- data/app/views/pgbus/queues/_queues_list.html.erb +4 -0
- data/app/views/pgbus/queues/show.html.erb +32 -2
- data/config/locales/da.yml +29 -0
- data/config/locales/de.yml +29 -0
- data/config/locales/en.yml +29 -0
- data/config/locales/es.yml +29 -0
- data/config/locales/fi.yml +29 -0
- data/config/locales/fr.yml +29 -0
- data/config/locales/it.yml +29 -0
- data/config/locales/ja.yml +29 -0
- data/config/locales/nb.yml +29 -0
- data/config/locales/nl.yml +29 -0
- data/config/locales/pt.yml +29 -0
- data/config/locales/sv.yml +29 -0
- data/config/routes.rb +3 -1
- data/lib/pgbus/client.rb +10 -2
- data/lib/pgbus/version.rb +1 -1
- data/lib/pgbus/web/data_source.rb +5 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ef44191dc6dab011a25d7ab69e0a8ad9ab5432b48301ba6d4e54f65afbb52c61
|
|
4
|
+
data.tar.gz: c75c9857c9889b206b09974d920fee96023ba1b1280e7d1734ff833095833c84
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 686c4aa7e111ce5d1a82b82d135bf37da2f8321142f8d09b522c06800e5a4a386b259ddac62e6666043b363a44345b57c444bd0656c6010f39e12ad3722a50a0
|
|
7
|
+
data.tar.gz: ade1d916918327f0680d4d029444da9f91d8da86e8210497c59e0bf5a0962bdad370eff8dbee3dacbd1207b040c9c3f8c80c28c80abd507b9a4122012078a949
|
data/README.md
CHANGED
|
@@ -707,7 +707,7 @@ pgbus help # Show help
|
|
|
707
707
|
The dashboard is a mountable Rails engine at `/pgbus` with:
|
|
708
708
|
|
|
709
709
|
- **Overview** -- queue depths, enqueued count, active processes, failure count, throughput rate
|
|
710
|
-
- **Queues** -- per-queue metrics, purge/pause/resume actions
|
|
710
|
+
- **Queues** -- per-queue metrics, purge/pause/resume/delete actions
|
|
711
711
|
- **Jobs** -- enqueued and failed jobs, retry/discard actions
|
|
712
712
|
- **Dead letter** -- DLQ messages with retry/discard, bulk actions
|
|
713
713
|
- **Processes** -- active workers/dispatcher/consumers with heartbeat status
|
|
@@ -716,7 +716,17 @@ The dashboard is a mountable Rails engine at `/pgbus` with:
|
|
|
716
716
|
- **Locks** -- active job uniqueness locks with state (queued/executing), owner PID@hostname, age
|
|
717
717
|
- **Insights** -- throughput chart (jobs/min), status distribution donut, slowest job classes table
|
|
718
718
|
|
|
719
|
-
All tables use Turbo Frames for periodic auto-refresh without page reloads.
|
|
719
|
+
All tables use Turbo Frames for periodic auto-refresh without page reloads. Destructive actions use styled confirmation dialogs (not browser `confirm()`), and flash messages appear as auto-dismissing toast notifications.
|
|
720
|
+
|
|
721
|
+
### Queue management
|
|
722
|
+
|
|
723
|
+
The queues page lets you manage PGMQ queues directly:
|
|
724
|
+
|
|
725
|
+
- **Purge** -- removes all messages from the queue (the queue itself remains)
|
|
726
|
+
- **Delete** -- permanently drops the queue from PGMQ (removes the queue table and metadata)
|
|
727
|
+
- **Pause / Resume** -- pauses or resumes job processing for a queue
|
|
728
|
+
|
|
729
|
+
All destructive actions require confirmation. Pause/resume and delete are available on both the queue index and detail pages.
|
|
720
730
|
|
|
721
731
|
### Dark mode
|
|
722
732
|
|
|
@@ -10,6 +10,7 @@ module Pgbus
|
|
|
10
10
|
@queue = data_source.queue_detail(params[:name])
|
|
11
11
|
redirect_to queues_path, alert: "Queue not found." and return unless @queue
|
|
12
12
|
|
|
13
|
+
@paused = data_source.queue_paused?(params[:name])
|
|
13
14
|
@messages = data_source.jobs(queue_name: params[:name], page: page_param, per_page: per_page)
|
|
14
15
|
end
|
|
15
16
|
|
|
@@ -18,6 +19,11 @@ module Pgbus
|
|
|
18
19
|
redirect_to queue_path(name: params[:name]), notice: "Queue purged."
|
|
19
20
|
end
|
|
20
21
|
|
|
22
|
+
def destroy
|
|
23
|
+
data_source.drop_queue(params[:name])
|
|
24
|
+
redirect_to queues_path, notice: t("pgbus.queues.destroy.success", name: params[:name])
|
|
25
|
+
end
|
|
26
|
+
|
|
21
27
|
def pause
|
|
22
28
|
data_source.pause_queue(params[:name], reason: params[:reason])
|
|
23
29
|
redirect_to queue_path(name: params[:name]), notice: "Queue paused."
|
|
@@ -27,5 +33,21 @@ module Pgbus
|
|
|
27
33
|
data_source.resume_queue(params[:name])
|
|
28
34
|
redirect_to queue_path(name: params[:name]), notice: "Queue resumed."
|
|
29
35
|
end
|
|
36
|
+
|
|
37
|
+
def retry_message
|
|
38
|
+
if data_source.retry_job(params[:name], params[:msg_id])
|
|
39
|
+
redirect_back fallback_location: queue_path(name: params[:name]), notice: t("pgbus.queues.show.message_retried")
|
|
40
|
+
else
|
|
41
|
+
redirect_back fallback_location: queue_path(name: params[:name]), alert: t("pgbus.queues.show.message_retry_failed")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def discard_message
|
|
46
|
+
if data_source.discard_job(params[:name], params[:msg_id])
|
|
47
|
+
redirect_back fallback_location: queue_path(name: params[:name]), notice: t("pgbus.queues.show.message_discarded")
|
|
48
|
+
else
|
|
49
|
+
redirect_back fallback_location: queue_path(name: params[:name]), alert: t("pgbus.queues.show.message_discard_failed")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
30
52
|
end
|
|
31
53
|
end
|
|
@@ -81,6 +81,77 @@
|
|
|
81
81
|
<script type="module">
|
|
82
82
|
import * as Turbo from "https://esm.sh/@hotwired/turbo@8";
|
|
83
83
|
|
|
84
|
+
// -- Custom confirm dialog (replaces browser confirm) --
|
|
85
|
+
Turbo.config.forms.confirm = (message, element) => {
|
|
86
|
+
const dialog = document.getElementById("pgbus-confirm-dialog");
|
|
87
|
+
const messageEl = document.getElementById("pgbus-confirm-message");
|
|
88
|
+
const titleEl = document.getElementById("pgbus-confirm-title");
|
|
89
|
+
const confirmBtn = document.getElementById("pgbus-confirm-btn");
|
|
90
|
+
const iconEl = document.getElementById("pgbus-confirm-icon");
|
|
91
|
+
|
|
92
|
+
// Detect action type from the element
|
|
93
|
+
const turboMethod = element.getAttribute("data-turbo-method");
|
|
94
|
+
const isDelete = turboMethod === "delete";
|
|
95
|
+
|
|
96
|
+
// Set title based on action
|
|
97
|
+
titleEl.textContent = isDelete ? "<%= t("pgbus.dialogs.delete_title", default: "Delete") %>" : "<%= t("pgbus.dialogs.confirm_title", default: "Are you sure?") %>";
|
|
98
|
+
messageEl.textContent = message;
|
|
99
|
+
|
|
100
|
+
// Style confirm button based on action severity
|
|
101
|
+
confirmBtn.className = "rounded-md px-4 py-2 text-sm font-medium text-white focus:outline-none focus:ring-2";
|
|
102
|
+
if (isDelete) {
|
|
103
|
+
confirmBtn.classList.add("bg-red-600", "hover:bg-red-500", "focus:ring-red-500");
|
|
104
|
+
confirmBtn.textContent = "<%= t("pgbus.dialogs.delete", default: "Delete") %>";
|
|
105
|
+
iconEl.className = "flex-shrink-0 flex items-center justify-center h-10 w-10 rounded-full bg-red-100 dark:bg-red-900/30";
|
|
106
|
+
} else {
|
|
107
|
+
confirmBtn.classList.add("bg-yellow-500", "hover:bg-yellow-400", "focus:ring-yellow-500");
|
|
108
|
+
confirmBtn.textContent = "<%= t("pgbus.dialogs.confirm", default: "Confirm") %>";
|
|
109
|
+
iconEl.className = "flex-shrink-0 flex items-center justify-center h-10 w-10 rounded-full bg-yellow-100 dark:bg-yellow-900/30";
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
dialog.showModal();
|
|
113
|
+
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
dialog.addEventListener("close", () => {
|
|
116
|
+
resolve(dialog.returnValue === "confirm");
|
|
117
|
+
}, { once: true });
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// -- Toast notifications --
|
|
122
|
+
function showToast(message, type = "success") {
|
|
123
|
+
const container = document.getElementById("pgbus-toast-container");
|
|
124
|
+
const toast = document.createElement("div");
|
|
125
|
+
|
|
126
|
+
const colors = {
|
|
127
|
+
success: "bg-green-50 dark:bg-green-900/30 text-green-800 dark:text-green-300 border-green-200 dark:border-green-800",
|
|
128
|
+
error: "bg-red-50 dark:bg-red-900/30 text-red-800 dark:text-red-300 border-red-200 dark:border-red-800",
|
|
129
|
+
info: "bg-blue-50 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 border-blue-200 dark:border-blue-800",
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
toast.className = `rounded-md border p-3 text-sm shadow-lg transition-all duration-300 ${colors[type] || colors.info}`;
|
|
133
|
+
toast.textContent = message;
|
|
134
|
+
container.appendChild(toast);
|
|
135
|
+
|
|
136
|
+
setTimeout(() => {
|
|
137
|
+
toast.style.opacity = "0";
|
|
138
|
+
toast.style.transform = "translateX(100%)";
|
|
139
|
+
setTimeout(() => toast.remove(), 300);
|
|
140
|
+
}, 5000);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Render flash toasts from <template> tags.
|
|
144
|
+
// Must run on turbo:load as well — module scripts only execute once,
|
|
145
|
+
// but Turbo Drive replaces the body on navigation.
|
|
146
|
+
function renderFlashToasts() {
|
|
147
|
+
document.querySelectorAll("template[data-pgbus-toast]").forEach(tpl => {
|
|
148
|
+
showToast(tpl.content.textContent.trim(), tpl.dataset.pgbusToast);
|
|
149
|
+
tpl.remove();
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
renderFlashToasts();
|
|
153
|
+
document.addEventListener("turbo:load", renderFlashToasts);
|
|
154
|
+
|
|
84
155
|
<% if Pgbus.configuration.web_live_updates %>
|
|
85
156
|
const interval = <%= Pgbus.configuration.web_refresh_interval %>;
|
|
86
157
|
if (interval > 0) {
|
|
@@ -200,21 +271,54 @@
|
|
|
200
271
|
</div>
|
|
201
272
|
</nav>
|
|
202
273
|
|
|
203
|
-
<!--
|
|
274
|
+
<!-- Toast container (fixed top-right) -->
|
|
275
|
+
<div id="pgbus-toast-container" class="fixed top-4 right-4 z-[100] flex flex-col space-y-2 max-w-sm"></div>
|
|
276
|
+
|
|
277
|
+
<!-- Flash messages rendered as toasts -->
|
|
204
278
|
<% if notice %>
|
|
205
|
-
<
|
|
206
|
-
<div class="rounded-md bg-green-50 dark:bg-green-900/30 p-3">
|
|
207
|
-
<p class="text-sm text-green-800 dark:text-green-300"><%= notice %></p>
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
279
|
+
<template data-pgbus-toast="success"><%= notice %></template>
|
|
210
280
|
<% end %>
|
|
211
281
|
<% if alert %>
|
|
212
|
-
<
|
|
213
|
-
|
|
214
|
-
|
|
282
|
+
<template data-pgbus-toast="error"><%= alert %></template>
|
|
283
|
+
<% end %>
|
|
284
|
+
|
|
285
|
+
<!-- Confirm dialog -->
|
|
286
|
+
<dialog id="pgbus-confirm-dialog" class="rounded-lg shadow-xl bg-white dark:bg-gray-800 p-0 backdrop:bg-gray-900/50 max-w-md w-full">
|
|
287
|
+
<div class="p-6">
|
|
288
|
+
<div class="flex items-start space-x-4">
|
|
289
|
+
<div id="pgbus-confirm-icon" class="flex-shrink-0 flex items-center justify-center h-10 w-10 rounded-full bg-red-100 dark:bg-red-900/30">
|
|
290
|
+
<svg class="h-6 w-6 text-red-600 dark:text-red-400" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
291
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"/>
|
|
292
|
+
</svg>
|
|
293
|
+
</div>
|
|
294
|
+
<div class="flex-1">
|
|
295
|
+
<h3 class="text-lg font-semibold text-gray-900 dark:text-white" id="pgbus-confirm-title"></h3>
|
|
296
|
+
<p class="mt-2 text-sm text-gray-600 dark:text-gray-300" id="pgbus-confirm-message"></p>
|
|
297
|
+
</div>
|
|
215
298
|
</div>
|
|
216
299
|
</div>
|
|
217
|
-
|
|
300
|
+
<form method="dialog" class="flex justify-end space-x-3 px-6 py-4 bg-gray-50 dark:bg-gray-900/50 rounded-b-lg">
|
|
301
|
+
<button value="cancel" class="rounded-md px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-indigo-500"><%= t("pgbus.dialogs.cancel", default: "Cancel") %></button>
|
|
302
|
+
<button value="confirm" id="pgbus-confirm-btn" class="rounded-md px-4 py-2 text-sm font-medium text-white bg-red-600 hover:bg-red-500 focus:outline-none focus:ring-2 focus:ring-red-500"><%= t("pgbus.dialogs.confirm", default: "Confirm") %></button>
|
|
303
|
+
</form>
|
|
304
|
+
</dialog>
|
|
305
|
+
|
|
306
|
+
<!-- Alert dialog -->
|
|
307
|
+
<dialog id="pgbus-alert-dialog" class="rounded-lg shadow-xl bg-white dark:bg-gray-800 p-0 backdrop:bg-gray-900/50 max-w-md w-full">
|
|
308
|
+
<div class="p-6">
|
|
309
|
+
<div class="flex items-start space-x-4">
|
|
310
|
+
<div class="flex-shrink-0 flex items-center justify-center h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900/30">
|
|
311
|
+
<svg class="h-6 w-6 text-blue-600 dark:text-blue-400" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
312
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z"/>
|
|
313
|
+
</svg>
|
|
314
|
+
</div>
|
|
315
|
+
<p class="text-sm text-gray-700 dark:text-gray-300" id="pgbus-alert-message"></p>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
<form method="dialog" class="flex justify-end px-6 py-4 bg-gray-50 dark:bg-gray-900/50 rounded-b-lg">
|
|
319
|
+
<button value="ok" class="rounded-md px-4 py-2 text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:ring-2 focus:ring-indigo-500"><%= t("pgbus.dialogs.ok", default: "OK") %></button>
|
|
320
|
+
</form>
|
|
321
|
+
</dialog>
|
|
218
322
|
|
|
219
323
|
<!-- Content -->
|
|
220
324
|
<main class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-6">
|
|
@@ -57,6 +57,16 @@
|
|
|
57
57
|
<pre class="text-xs text-gray-600 bg-white dark:bg-gray-800 rounded p-2 mt-1 overflow-x-auto"><%= JSON.pretty_generate(JSON.parse(j[:headers])) rescue j[:headers] %></pre>
|
|
58
58
|
</details>
|
|
59
59
|
<% end %>
|
|
60
|
+
<div class="flex space-x-2 mt-3 pt-3 border-t border-gray-200 dark:border-gray-700">
|
|
61
|
+
<%= button_to t("pgbus.jobs.enqueued_table.retry"), pgbus.retry_message_queue_path(name: j[:queue_name], msg_id: j[:msg_id]),
|
|
62
|
+
method: :post,
|
|
63
|
+
class: "rounded-md bg-indigo-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-indigo-500",
|
|
64
|
+
data: { turbo_confirm: t("pgbus.jobs.enqueued_table.retry_confirm"), turbo_frame: "_top" } %>
|
|
65
|
+
<%= button_to t("pgbus.jobs.enqueued_table.discard"), pgbus.discard_message_queue_path(name: j[:queue_name], msg_id: j[:msg_id]),
|
|
66
|
+
method: :post,
|
|
67
|
+
class: "rounded-md bg-red-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-red-500",
|
|
68
|
+
data: { turbo_confirm: t("pgbus.jobs.enqueued_table.discard_confirm"), turbo_frame: "_top" } %>
|
|
69
|
+
</div>
|
|
60
70
|
</div>
|
|
61
71
|
</details>
|
|
62
72
|
</td>
|
|
@@ -43,6 +43,10 @@
|
|
|
43
43
|
method: :post,
|
|
44
44
|
class: "text-xs text-red-600 hover:text-red-800 font-medium",
|
|
45
45
|
data: { turbo_confirm: t("pgbus.queues.queues_list.purge_confirm", name: q[:name]), turbo_frame: "_top" } %>
|
|
46
|
+
<%= button_to t("pgbus.queues.queues_list.delete"), pgbus.queue_path(name: q[:name]),
|
|
47
|
+
method: :delete,
|
|
48
|
+
class: "text-xs text-red-600 hover:text-red-800 font-medium",
|
|
49
|
+
data: { turbo_confirm: t("pgbus.queues.queues_list.delete_confirm", name: q[:name]), turbo_frame: "_top" } %>
|
|
46
50
|
</td>
|
|
47
51
|
</tr>
|
|
48
52
|
<% end %>
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
<div class="flex items-center justify-between mb-6">
|
|
2
2
|
<div>
|
|
3
|
-
<h1 class="text-2xl font-bold text-gray-900 dark:text-white"
|
|
3
|
+
<h1 class="text-2xl font-bold text-gray-900 dark:text-white">
|
|
4
|
+
<%= @queue&.dig(:name) || params[:name] %>
|
|
5
|
+
<% if @paused %>
|
|
6
|
+
<span class="inline-flex items-center rounded-full bg-yellow-100 px-2.5 py-0.5 text-xs font-medium text-yellow-800"><%= t("pgbus.queues.queues_list.paused") %></span>
|
|
7
|
+
<% end %>
|
|
8
|
+
</h1>
|
|
4
9
|
<% if @queue %>
|
|
5
10
|
<p class="text-sm text-gray-500 mt-1">
|
|
6
11
|
<%= t("pgbus.queues.show.depth") %> <span class="font-mono"><%= @queue[:queue_length] %></span> |
|
|
@@ -10,10 +15,24 @@
|
|
|
10
15
|
<% end %>
|
|
11
16
|
</div>
|
|
12
17
|
<div class="flex space-x-2">
|
|
18
|
+
<% if @paused %>
|
|
19
|
+
<%= button_to t("pgbus.queues.show.resume"), pgbus.resume_queue_path(name: params[:name]),
|
|
20
|
+
method: :post,
|
|
21
|
+
class: "rounded-md bg-green-600 px-3 py-2 text-sm font-medium text-white hover:bg-green-500" %>
|
|
22
|
+
<% else %>
|
|
23
|
+
<%= button_to t("pgbus.queues.show.pause"), pgbus.pause_queue_path(name: params[:name]),
|
|
24
|
+
method: :post,
|
|
25
|
+
class: "rounded-md bg-yellow-500 px-3 py-2 text-sm font-medium text-white hover:bg-yellow-400",
|
|
26
|
+
data: { turbo_confirm: t("pgbus.queues.show.pause_confirm") } %>
|
|
27
|
+
<% end %>
|
|
13
28
|
<%= button_to t("pgbus.queues.show.purge_queue"), pgbus.purge_queue_path(name: params[:name]),
|
|
14
29
|
method: :post,
|
|
15
30
|
class: "rounded-md bg-red-600 px-3 py-2 text-sm font-medium text-white hover:bg-red-500",
|
|
16
31
|
data: { turbo_confirm: t("pgbus.queues.show.purge_confirm") } %>
|
|
32
|
+
<%= button_to t("pgbus.queues.show.delete_queue"), pgbus.queue_path(name: params[:name]),
|
|
33
|
+
method: :delete,
|
|
34
|
+
class: "rounded-md bg-red-800 px-3 py-2 text-sm font-medium text-white hover:bg-red-700",
|
|
35
|
+
data: { turbo_confirm: t("pgbus.queues.show.delete_confirm") } %>
|
|
17
36
|
</div>
|
|
18
37
|
</div>
|
|
19
38
|
|
|
@@ -27,6 +46,7 @@
|
|
|
27
46
|
<th class="px-4 py-3 text-left text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.headers.reads") %></th>
|
|
28
47
|
<th class="px-4 py-3 text-left text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.headers.vt") %></th>
|
|
29
48
|
<th class="px-4 py-3 text-left text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.headers.payload") %></th>
|
|
49
|
+
<th class="px-4 py-3 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.headers.actions") %></th>
|
|
30
50
|
</tr>
|
|
31
51
|
</thead>
|
|
32
52
|
<tbody class="divide-y divide-gray-100 dark:divide-gray-700">
|
|
@@ -39,10 +59,20 @@
|
|
|
39
59
|
<td class="px-4 py-3 text-sm text-gray-600 font-mono text-xs max-w-md truncate">
|
|
40
60
|
<%= pgbus_json_preview(m[:message]) %>
|
|
41
61
|
</td>
|
|
62
|
+
<td class="px-4 py-3 text-sm text-right space-x-1 whitespace-nowrap">
|
|
63
|
+
<%= button_to t("pgbus.queues.show.retry"), pgbus.retry_message_queue_path(name: params[:name], msg_id: m[:msg_id]),
|
|
64
|
+
method: :post,
|
|
65
|
+
class: "text-xs text-indigo-600 hover:text-indigo-800 font-medium",
|
|
66
|
+
data: { turbo_confirm: t("pgbus.queues.show.retry_confirm") } %>
|
|
67
|
+
<%= button_to t("pgbus.queues.show.discard"), pgbus.discard_message_queue_path(name: params[:name], msg_id: m[:msg_id]),
|
|
68
|
+
method: :post,
|
|
69
|
+
class: "text-xs text-red-600 hover:text-red-800 font-medium",
|
|
70
|
+
data: { turbo_confirm: t("pgbus.queues.show.discard_confirm") } %>
|
|
71
|
+
</td>
|
|
42
72
|
</tr>
|
|
43
73
|
<% end %>
|
|
44
74
|
<% if @messages.empty? %>
|
|
45
|
-
<tr><td colspan="
|
|
75
|
+
<tr><td colspan="6" class="px-4 py-8 text-center text-sm text-gray-400"><%= t("pgbus.queues.show.empty") %></td></tr>
|
|
46
76
|
<% end %>
|
|
47
77
|
</tbody>
|
|
48
78
|
</table>
|
data/config/locales/da.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
da:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Annuller
|
|
6
|
+
confirm: Bekræft
|
|
7
|
+
confirm_title: Er du sikker?
|
|
8
|
+
delete: Slet
|
|
9
|
+
delete_title: Slet
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Ingen processer kører
|
|
@@ -170,6 +177,10 @@ da:
|
|
|
170
177
|
timezone: 'Tidszone:'
|
|
171
178
|
visible_at: 'Synlig fra:'
|
|
172
179
|
title: Job i kø
|
|
180
|
+
discard: Kassér
|
|
181
|
+
discard_confirm: Kassér denne besked?
|
|
182
|
+
retry: Prøv igen
|
|
183
|
+
retry_confirm: Nulstil synlighedstimeout og prøv igen?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Kassér
|
|
175
186
|
discard_confirm: Kassér dette job?
|
|
@@ -280,23 +291,41 @@ da:
|
|
|
280
291
|
queue: Kø
|
|
281
292
|
total_ever: Total nogensinde
|
|
282
293
|
visible: Synlig
|
|
294
|
+
delete: Slet
|
|
295
|
+
delete_confirm: Slet køen %{name} permanent? Dette kan ikke fortrydes.
|
|
283
296
|
pause: Pause
|
|
284
297
|
pause_confirm: Pause behandling i %{name}?
|
|
285
298
|
paused: Pauset
|
|
286
299
|
purge: Rens
|
|
287
300
|
purge_confirm: Rens alle beskeder fra %{name}?
|
|
288
301
|
resume: Genoptag
|
|
302
|
+
destroy:
|
|
303
|
+
success: Køen %{name} slettet.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Slet denne kø permanent? Dette kan ikke fortrydes.
|
|
306
|
+
delete_queue: Slet kø
|
|
290
307
|
depth: 'Dybde:'
|
|
308
|
+
discard: Kassér
|
|
309
|
+
discard_confirm: Kassér denne besked?
|
|
291
310
|
empty: Køen er tom
|
|
292
311
|
headers:
|
|
312
|
+
actions: Handlinger
|
|
293
313
|
enqueued: Sat i kø
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Indhold
|
|
296
316
|
reads: Læsninger
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Kunne ikke kassere besked.
|
|
319
|
+
message_discarded: Besked kasseret.
|
|
320
|
+
message_retried: Beskedens synlighed nulstillet.
|
|
321
|
+
message_retry_failed: Kunne ikke prøve besked igen.
|
|
322
|
+
pause: Pause
|
|
323
|
+
pause_confirm: Pause behandling?
|
|
298
324
|
purge_confirm: Rens alle beskeder?
|
|
299
325
|
purge_queue: Rens kø
|
|
326
|
+
resume: Genoptag
|
|
327
|
+
retry: Prøv igen
|
|
328
|
+
retry_confirm: Nulstil synlighedstimeout og prøv igen?
|
|
300
329
|
total: 'Total:'
|
|
301
330
|
visible: 'Synlig:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/de.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
de:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Abbrechen
|
|
6
|
+
confirm: Bestätigen
|
|
7
|
+
confirm_title: Sind Sie sicher?
|
|
8
|
+
delete: Löschen
|
|
9
|
+
delete_title: Löschen
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Keine Prozesse laufen
|
|
@@ -170,6 +177,10 @@ de:
|
|
|
170
177
|
timezone: 'Zeitzone:'
|
|
171
178
|
visible_at: 'Sichtbar ab:'
|
|
172
179
|
title: Eingereihte Jobs
|
|
180
|
+
discard: Verwerfen
|
|
181
|
+
discard_confirm: Diese Nachricht verwerfen?
|
|
182
|
+
retry: Wiederholen
|
|
183
|
+
retry_confirm: Sichtbarkeits-Timeout zurücksetzen und erneut versuchen?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Verwerfen
|
|
175
186
|
discard_confirm: Diesen Job verwerfen?
|
|
@@ -280,23 +291,41 @@ de:
|
|
|
280
291
|
queue: Warteschlange
|
|
281
292
|
total_ever: Insgesamt jemals
|
|
282
293
|
visible: Sichtbar
|
|
294
|
+
delete: Löschen
|
|
295
|
+
delete_confirm: Warteschlange %{name} dauerhaft löschen? Dies kann nicht rückgängig gemacht werden.
|
|
283
296
|
pause: Pause
|
|
284
297
|
pause_confirm: Verarbeitung für %{name} pausieren?
|
|
285
298
|
paused: Pausiert
|
|
286
299
|
purge: Bereinigen
|
|
287
300
|
purge_confirm: Alle Nachrichten von %{name} löschen?
|
|
288
301
|
resume: Fortsetzen
|
|
302
|
+
destroy:
|
|
303
|
+
success: Warteschlange %{name} gelöscht.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Diese Warteschlange dauerhaft löschen? Dies kann nicht rückgängig gemacht werden.
|
|
306
|
+
delete_queue: Warteschlange löschen
|
|
290
307
|
depth: 'Tiefe:'
|
|
308
|
+
discard: Verwerfen
|
|
309
|
+
discard_confirm: Diese Nachricht verwerfen?
|
|
291
310
|
empty: Warteschlange ist leer
|
|
292
311
|
headers:
|
|
312
|
+
actions: Aktionen
|
|
293
313
|
enqueued: Eingereiht
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Nutzlast
|
|
296
316
|
reads: Lesevorgänge
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Nachricht konnte nicht verworfen werden.
|
|
319
|
+
message_discarded: Nachricht verworfen.
|
|
320
|
+
message_retried: Sichtbarkeit der Nachricht zurückgesetzt.
|
|
321
|
+
message_retry_failed: Nachricht konnte nicht wiederholt werden.
|
|
322
|
+
pause: Pause
|
|
323
|
+
pause_confirm: Verarbeitung pausieren?
|
|
298
324
|
purge_confirm: Alle Nachrichten löschen?
|
|
299
325
|
purge_queue: Warteschlange bereinigen
|
|
326
|
+
resume: Fortsetzen
|
|
327
|
+
retry: Wiederholen
|
|
328
|
+
retry_confirm: Sichtbarkeits-Timeout zurücksetzen und erneut versuchen?
|
|
300
329
|
total: 'Insgesamt:'
|
|
301
330
|
visible: 'Sichtbar:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/en.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
en:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Cancel
|
|
6
|
+
confirm: Confirm
|
|
7
|
+
confirm_title: Are you sure?
|
|
8
|
+
delete: Delete
|
|
9
|
+
delete_title: Delete
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: No processes running
|
|
@@ -169,6 +176,10 @@ en:
|
|
|
169
176
|
scheduled: 'Scheduled:'
|
|
170
177
|
timezone: 'Timezone:'
|
|
171
178
|
visible_at: 'Visible at:'
|
|
179
|
+
discard: Discard
|
|
180
|
+
discard_confirm: Discard this message?
|
|
181
|
+
retry: Retry
|
|
182
|
+
retry_confirm: Reset visibility timeout and retry?
|
|
172
183
|
title: Enqueued Jobs
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Discard
|
|
@@ -280,23 +291,41 @@ en:
|
|
|
280
291
|
queue: Queue
|
|
281
292
|
total_ever: Total Ever
|
|
282
293
|
visible: Visible
|
|
294
|
+
delete: Delete
|
|
295
|
+
delete_confirm: Permanently delete queue %{name}? This cannot be undone.
|
|
283
296
|
pause: Pause
|
|
284
297
|
pause_confirm: Pause processing for %{name}?
|
|
285
298
|
paused: Paused
|
|
286
299
|
purge: Purge
|
|
287
300
|
purge_confirm: Purge all messages from %{name}?
|
|
288
301
|
resume: Resume
|
|
302
|
+
destroy:
|
|
303
|
+
success: Queue %{name} deleted.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Permanently delete this queue? This cannot be undone.
|
|
306
|
+
delete_queue: Delete Queue
|
|
290
307
|
depth: 'Depth:'
|
|
308
|
+
discard: Discard
|
|
309
|
+
discard_confirm: Discard this message?
|
|
291
310
|
empty: Queue is empty
|
|
292
311
|
headers:
|
|
312
|
+
actions: Actions
|
|
293
313
|
enqueued: Enqueued
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Payload
|
|
296
316
|
reads: Reads
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Could not discard message.
|
|
319
|
+
message_discarded: Message discarded.
|
|
320
|
+
message_retried: Message visibility reset.
|
|
321
|
+
message_retry_failed: Could not retry message.
|
|
322
|
+
pause: Pause
|
|
323
|
+
pause_confirm: Pause processing?
|
|
298
324
|
purge_confirm: Purge all messages?
|
|
299
325
|
purge_queue: Purge Queue
|
|
326
|
+
resume: Resume
|
|
327
|
+
retry: Retry
|
|
328
|
+
retry_confirm: Reset visibility timeout and retry?
|
|
300
329
|
total: 'Total:'
|
|
301
330
|
visible: 'Visible:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/es.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
es:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Cancelar
|
|
6
|
+
confirm: Confirmar
|
|
7
|
+
confirm_title: "¿Estás seguro?"
|
|
8
|
+
delete: Eliminar
|
|
9
|
+
delete_title: Eliminar
|
|
10
|
+
ok: Aceptar
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: No hay procesos en ejecución
|
|
@@ -170,6 +177,10 @@ es:
|
|
|
170
177
|
timezone: 'Zona horaria:'
|
|
171
178
|
visible_at: 'Visible en:'
|
|
172
179
|
title: Trabajos en Cola
|
|
180
|
+
discard: Descartar
|
|
181
|
+
discard_confirm: "¿Descartar este mensaje?"
|
|
182
|
+
retry: Reintentar
|
|
183
|
+
retry_confirm: "¿Restablecer tiempo de visibilidad y reintentar?"
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Descartar
|
|
175
186
|
discard_confirm: "¿Descartar este trabajo?"
|
|
@@ -280,23 +291,41 @@ es:
|
|
|
280
291
|
queue: Cola
|
|
281
292
|
total_ever: Total acumulado
|
|
282
293
|
visible: Visible
|
|
294
|
+
delete: Eliminar
|
|
295
|
+
delete_confirm: "¿Eliminar permanentemente la cola %{name}? Esto no se puede deshacer."
|
|
283
296
|
pause: Pausar
|
|
284
297
|
pause_confirm: "¿Pausar el procesamiento de %{name}?"
|
|
285
298
|
paused: Pausado
|
|
286
299
|
purge: Purgar
|
|
287
300
|
purge_confirm: "¿Purgar todos los mensajes de %{name}?"
|
|
288
301
|
resume: Reanudar
|
|
302
|
+
destroy:
|
|
303
|
+
success: Cola %{name} eliminada.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: "¿Eliminar permanentemente esta cola? Esto no se puede deshacer."
|
|
306
|
+
delete_queue: Eliminar cola
|
|
290
307
|
depth: 'Profundidad:'
|
|
308
|
+
discard: Descartar
|
|
309
|
+
discard_confirm: "¿Descartar este mensaje?"
|
|
291
310
|
empty: La cola está vacía
|
|
292
311
|
headers:
|
|
312
|
+
actions: Acciones
|
|
293
313
|
enqueued: Encolado
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Carga útil
|
|
296
316
|
reads: Lecturas
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: No se pudo descartar el mensaje.
|
|
319
|
+
message_discarded: Mensaje descartado.
|
|
320
|
+
message_retried: Visibilidad del mensaje restablecida.
|
|
321
|
+
message_retry_failed: No se pudo reintentar el mensaje.
|
|
322
|
+
pause: Pausar
|
|
323
|
+
pause_confirm: "¿Pausar el procesamiento?"
|
|
298
324
|
purge_confirm: "¿Purgar todos los mensajes?"
|
|
299
325
|
purge_queue: Purgar cola
|
|
326
|
+
resume: Reanudar
|
|
327
|
+
retry: Reintentar
|
|
328
|
+
retry_confirm: "¿Restablecer tiempo de visibilidad y reintentar?"
|
|
300
329
|
total: 'Total:'
|
|
301
330
|
visible: 'Visible:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/fi.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
fi:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Peruuta
|
|
6
|
+
confirm: Vahvista
|
|
7
|
+
confirm_title: Oletko varma?
|
|
8
|
+
delete: Poista
|
|
9
|
+
delete_title: Poista
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Ei käynnissä olevia prosesseja
|
|
@@ -170,6 +177,10 @@ fi:
|
|
|
170
177
|
timezone: 'Aikavyöhyke:'
|
|
171
178
|
visible_at: 'Näkyvissä:'
|
|
172
179
|
title: Jonotetut työt
|
|
180
|
+
discard: Hylkää
|
|
181
|
+
discard_confirm: Hylätä tämä viesti?
|
|
182
|
+
retry: Yritä uudelleen
|
|
183
|
+
retry_confirm: Nollaa näkyvyysaika ja yritä uudelleen?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Hylkää
|
|
175
186
|
discard_confirm: Hylätäänkö tämä työ?
|
|
@@ -280,23 +291,41 @@ fi:
|
|
|
280
291
|
queue: Jono
|
|
281
292
|
total_ever: Yhteensä koskaan
|
|
282
293
|
visible: Näkyvissä
|
|
294
|
+
delete: Poista
|
|
295
|
+
delete_confirm: Poista jono %{name} pysyvästi? Tätä ei voi kumota.
|
|
283
296
|
pause: Tauko
|
|
284
297
|
pause_confirm: Keskeytä käsittely %{name} ajan?
|
|
285
298
|
paused: Keskeytetty
|
|
286
299
|
purge: Tyhjennä
|
|
287
300
|
purge_confirm: Tyhjennä kaikki viestit %{name}:sta?
|
|
288
301
|
resume: Jatka
|
|
302
|
+
destroy:
|
|
303
|
+
success: Jono %{name} poistettu.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Poista tämä jono pysyvästi? Tätä ei voi kumota.
|
|
306
|
+
delete_queue: Poista jono
|
|
290
307
|
depth: 'Syvyys:'
|
|
308
|
+
discard: Hylkää
|
|
309
|
+
discard_confirm: Hylätä tämä viesti?
|
|
291
310
|
empty: Jono on tyhjä
|
|
292
311
|
headers:
|
|
312
|
+
actions: Toiminnot
|
|
293
313
|
enqueued: Jonoon lisätty
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Kuorma
|
|
296
316
|
reads: Lukukerrat
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Viestiä ei voitu hylätä.
|
|
319
|
+
message_discarded: Viesti hylätty.
|
|
320
|
+
message_retried: Viestin näkyvyys nollattu.
|
|
321
|
+
message_retry_failed: Viestiä ei voitu yrittää uudelleen.
|
|
322
|
+
pause: Tauko
|
|
323
|
+
pause_confirm: Keskeytetäänkö käsittely?
|
|
298
324
|
purge_confirm: Tyhjennetäänkö kaikki viestit?
|
|
299
325
|
purge_queue: Tyhjennä jono
|
|
326
|
+
resume: Jatka
|
|
327
|
+
retry: Yritä uudelleen
|
|
328
|
+
retry_confirm: Nollaa näkyvyysaika ja yritä uudelleen?
|
|
300
329
|
total: 'Yhteensä:'
|
|
301
330
|
visible: 'Näkyvissä:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/fr.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
fr:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Annuler
|
|
6
|
+
confirm: Confirmer
|
|
7
|
+
confirm_title: "Êtes-vous sûr ?"
|
|
8
|
+
delete: Supprimer
|
|
9
|
+
delete_title: Supprimer
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Aucun processus en cours d'exécution
|
|
@@ -170,6 +177,10 @@ fr:
|
|
|
170
177
|
timezone: 'Fuseau horaire :'
|
|
171
178
|
visible_at: 'Visible à :'
|
|
172
179
|
title: Travaux en file d'attente
|
|
180
|
+
discard: Rejeter
|
|
181
|
+
discard_confirm: Rejeter ce message ?
|
|
182
|
+
retry: Réessayer
|
|
183
|
+
retry_confirm: Réinitialiser le délai de visibilité et réessayer ?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Ignorer
|
|
175
186
|
discard_confirm: Ignorer ce travail ?
|
|
@@ -280,23 +291,41 @@ fr:
|
|
|
280
291
|
queue: File d'attente
|
|
281
292
|
total_ever: Total jamais
|
|
282
293
|
visible: Visible
|
|
294
|
+
delete: Supprimer
|
|
295
|
+
delete_confirm: Supprimer définitivement la file d'attente %{name} ? Cette action est irréversible.
|
|
283
296
|
pause: Pause
|
|
284
297
|
pause_confirm: Mettre en pause le traitement pour %{name} ?
|
|
285
298
|
paused: En pause
|
|
286
299
|
purge: Purger
|
|
287
300
|
purge_confirm: Purger tous les messages de %{name} ?
|
|
288
301
|
resume: Reprendre
|
|
302
|
+
destroy:
|
|
303
|
+
success: File d'attente %{name} supprimée.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Supprimer définitivement cette file d'attente ? Cette action est irréversible.
|
|
306
|
+
delete_queue: Supprimer la file d'attente
|
|
290
307
|
depth: 'Profondeur :'
|
|
308
|
+
discard: Rejeter
|
|
309
|
+
discard_confirm: Rejeter ce message ?
|
|
291
310
|
empty: La file d'attente est vide
|
|
292
311
|
headers:
|
|
312
|
+
actions: Actions
|
|
293
313
|
enqueued: Enregistré
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Charge utile
|
|
296
316
|
reads: Lectures
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Impossible de rejeter le message.
|
|
319
|
+
message_discarded: Message rejeté.
|
|
320
|
+
message_retried: Visibilité du message réinitialisée.
|
|
321
|
+
message_retry_failed: Impossible de réessayer le message.
|
|
322
|
+
pause: Pause
|
|
323
|
+
pause_confirm: Mettre en pause le traitement ?
|
|
298
324
|
purge_confirm: Purger tous les messages ?
|
|
299
325
|
purge_queue: Purger la file d'attente
|
|
326
|
+
resume: Reprendre
|
|
327
|
+
retry: Réessayer
|
|
328
|
+
retry_confirm: Réinitialiser le délai de visibilité et réessayer ?
|
|
300
329
|
total: 'Total :'
|
|
301
330
|
visible: 'Visible :'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/it.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
it:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Annulla
|
|
6
|
+
confirm: Conferma
|
|
7
|
+
confirm_title: Sei sicuro?
|
|
8
|
+
delete: Elimina
|
|
9
|
+
delete_title: Elimina
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Nessun processo in esecuzione
|
|
@@ -170,6 +177,10 @@ it:
|
|
|
170
177
|
timezone: 'Fuso orario:'
|
|
171
178
|
visible_at: 'Visibile alle:'
|
|
172
179
|
title: Lavori in coda
|
|
180
|
+
discard: Scarta
|
|
181
|
+
discard_confirm: Scartare questo messaggio?
|
|
182
|
+
retry: Riprova
|
|
183
|
+
retry_confirm: Reimpostare il timeout di visibilità e riprovare?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Scarta
|
|
175
186
|
discard_confirm: Scartare questo lavoro?
|
|
@@ -280,23 +291,41 @@ it:
|
|
|
280
291
|
queue: Coda
|
|
281
292
|
total_ever: Totale mai
|
|
282
293
|
visible: Visibile
|
|
294
|
+
delete: Elimina
|
|
295
|
+
delete_confirm: Eliminare permanentemente la coda %{name}? Questa azione non può essere annullata.
|
|
283
296
|
pause: Pausa
|
|
284
297
|
pause_confirm: Mettere in pausa l'elaborazione per %{name}?
|
|
285
298
|
paused: In pausa
|
|
286
299
|
purge: Pulisci
|
|
287
300
|
purge_confirm: Eliminare tutti i messaggi da %{name}?
|
|
288
301
|
resume: Riprendi
|
|
302
|
+
destroy:
|
|
303
|
+
success: Coda %{name} eliminata.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Eliminare permanentemente questa coda? Questa azione non può essere annullata.
|
|
306
|
+
delete_queue: Elimina coda
|
|
290
307
|
depth: 'Profondità:'
|
|
308
|
+
discard: Scarta
|
|
309
|
+
discard_confirm: Scartare questo messaggio?
|
|
291
310
|
empty: La coda è vuota
|
|
292
311
|
headers:
|
|
312
|
+
actions: Azioni
|
|
293
313
|
enqueued: In coda
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Carico utile
|
|
296
316
|
reads: Letture
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Impossibile scartare il messaggio.
|
|
319
|
+
message_discarded: Messaggio scartato.
|
|
320
|
+
message_retried: Visibilità del messaggio reimpostata.
|
|
321
|
+
message_retry_failed: Impossibile riprovare il messaggio.
|
|
322
|
+
pause: Pausa
|
|
323
|
+
pause_confirm: Mettere in pausa l'elaborazione?
|
|
298
324
|
purge_confirm: Eliminare tutti i messaggi?
|
|
299
325
|
purge_queue: Pulisci coda
|
|
326
|
+
resume: Riprendi
|
|
327
|
+
retry: Riprova
|
|
328
|
+
retry_confirm: Reimpostare il timeout di visibilità e riprovare?
|
|
300
329
|
total: 'Totale:'
|
|
301
330
|
visible: 'Visibile:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/ja.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
ja:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: キャンセル
|
|
6
|
+
confirm: 確認
|
|
7
|
+
confirm_title: よろしいですか?
|
|
8
|
+
delete: 削除
|
|
9
|
+
delete_title: 削除
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: 実行中のプロセスはありません
|
|
@@ -170,6 +177,10 @@ ja:
|
|
|
170
177
|
timezone: タイムゾーン:
|
|
171
178
|
visible_at: 表示可能日時:
|
|
172
179
|
title: キューに入れられたジョブ
|
|
180
|
+
discard: 破棄
|
|
181
|
+
discard_confirm: このメッセージを破棄しますか?
|
|
182
|
+
retry: リトライ
|
|
183
|
+
retry_confirm: 可視性タイムアウトをリセットしてリトライしますか?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: 破棄
|
|
175
186
|
discard_confirm: このジョブを破棄しますか?
|
|
@@ -280,23 +291,41 @@ ja:
|
|
|
280
291
|
queue: キュー
|
|
281
292
|
total_ever: 合計数
|
|
282
293
|
visible: 表示中
|
|
294
|
+
delete: 削除
|
|
295
|
+
delete_confirm: キュー %{name} を完全に削除しますか?この操作は取り消せません。
|
|
283
296
|
pause: 一時停止
|
|
284
297
|
pause_confirm: "%{name} の処理を一時停止しますか?"
|
|
285
298
|
paused: 一時停止中
|
|
286
299
|
purge: パージ
|
|
287
300
|
purge_confirm: "%{name} からすべてのメッセージを削除しますか?"
|
|
288
301
|
resume: 再開
|
|
302
|
+
destroy:
|
|
303
|
+
success: キュー %{name} を削除しました。
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: このキューを完全に削除しますか?この操作は取り消せません。
|
|
306
|
+
delete_queue: キューを削除
|
|
290
307
|
depth: 深さ:
|
|
308
|
+
discard: 破棄
|
|
309
|
+
discard_confirm: このメッセージを破棄しますか?
|
|
291
310
|
empty: キューは空です
|
|
292
311
|
headers:
|
|
312
|
+
actions: アクション
|
|
293
313
|
enqueued: エンキュー済み
|
|
294
314
|
id: ID
|
|
295
315
|
payload: ペイロード
|
|
296
316
|
reads: 読み取り回数
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: メッセージを破棄できませんでした。
|
|
319
|
+
message_discarded: メッセージを破棄しました。
|
|
320
|
+
message_retried: メッセージの可視性をリセットしました。
|
|
321
|
+
message_retry_failed: メッセージをリトライできませんでした。
|
|
322
|
+
pause: 一時停止
|
|
323
|
+
pause_confirm: 処理を一時停止しますか?
|
|
298
324
|
purge_confirm: すべてのメッセージを削除しますか?
|
|
299
325
|
purge_queue: キューをパージ
|
|
326
|
+
resume: 再開
|
|
327
|
+
retry: リトライ
|
|
328
|
+
retry_confirm: 可視性タイムアウトをリセットしてリトライしますか?
|
|
300
329
|
total: 合計:
|
|
301
330
|
visible: 表示中:
|
|
302
331
|
recurring_tasks:
|
data/config/locales/nb.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
nb:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Avbryt
|
|
6
|
+
confirm: Bekreft
|
|
7
|
+
confirm_title: Er du sikker?
|
|
8
|
+
delete: Slett
|
|
9
|
+
delete_title: Slett
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Ingen prosesser kjører
|
|
@@ -170,6 +177,10 @@ nb:
|
|
|
170
177
|
timezone: 'Tidssone:'
|
|
171
178
|
visible_at: 'Synlig fra:'
|
|
172
179
|
title: Kølagte jobber
|
|
180
|
+
discard: Forkast
|
|
181
|
+
discard_confirm: Forkaste denne meldingen?
|
|
182
|
+
retry: Prøv igjen
|
|
183
|
+
retry_confirm: Tilbakestill synlighetstidsavbrudd og prøv igjen?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Forkast
|
|
175
186
|
discard_confirm: Forkast denne jobben?
|
|
@@ -280,23 +291,41 @@ nb:
|
|
|
280
291
|
queue: Kø
|
|
281
292
|
total_ever: Totalt noensinne
|
|
282
293
|
visible: Synlig
|
|
294
|
+
delete: Slett
|
|
295
|
+
delete_confirm: Slette køen %{name} permanent? Dette kan ikke angres.
|
|
283
296
|
pause: Pause
|
|
284
297
|
pause_confirm: Pause behandling for %{name}?
|
|
285
298
|
paused: Pauset
|
|
286
299
|
purge: Rens
|
|
287
300
|
purge_confirm: Rens alle meldinger fra %{name}?
|
|
288
301
|
resume: Gjenoppta
|
|
302
|
+
destroy:
|
|
303
|
+
success: Køen %{name} slettet.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Slette denne køen permanent? Dette kan ikke angres.
|
|
306
|
+
delete_queue: Slett kø
|
|
290
307
|
depth: 'Dybde:'
|
|
308
|
+
discard: Forkast
|
|
309
|
+
discard_confirm: Forkaste denne meldingen?
|
|
291
310
|
empty: Køen er tom
|
|
292
311
|
headers:
|
|
312
|
+
actions: Handlinger
|
|
293
313
|
enqueued: I kø
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Innhold
|
|
296
316
|
reads: Lesninger
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Kunne ikke forkaste meldingen.
|
|
319
|
+
message_discarded: Melding forkastet.
|
|
320
|
+
message_retried: Meldingens synlighet tilbakestilt.
|
|
321
|
+
message_retry_failed: Kunne ikke prøve meldingen igjen.
|
|
322
|
+
pause: Pause
|
|
323
|
+
pause_confirm: Pause behandling?
|
|
298
324
|
purge_confirm: Rens alle meldinger?
|
|
299
325
|
purge_queue: Rens kø
|
|
326
|
+
resume: Gjenoppta
|
|
327
|
+
retry: Prøv igjen
|
|
328
|
+
retry_confirm: Tilbakestill synlighetstidsavbrudd og prøv igjen?
|
|
300
329
|
total: 'Totalt:'
|
|
301
330
|
visible: 'Synlig:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/nl.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
nl:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Annuleren
|
|
6
|
+
confirm: Bevestigen
|
|
7
|
+
confirm_title: Weet u het zeker?
|
|
8
|
+
delete: Verwijderen
|
|
9
|
+
delete_title: Verwijderen
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Geen processen actief
|
|
@@ -170,6 +177,10 @@ nl:
|
|
|
170
177
|
timezone: 'Tijdzone:'
|
|
171
178
|
visible_at: 'Zichtbaar op:'
|
|
172
179
|
title: Taken in de wachtrij
|
|
180
|
+
discard: Verwerpen
|
|
181
|
+
discard_confirm: Dit bericht verwerpen?
|
|
182
|
+
retry: Opnieuw proberen
|
|
183
|
+
retry_confirm: Zichtbaarheidstimeout resetten en opnieuw proberen?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Verwijderen
|
|
175
186
|
discard_confirm: Deze taak verwijderen?
|
|
@@ -280,23 +291,41 @@ nl:
|
|
|
280
291
|
queue: Wachtrij
|
|
281
292
|
total_ever: Totaal ooit
|
|
282
293
|
visible: Zichtbaar
|
|
294
|
+
delete: Verwijderen
|
|
295
|
+
delete_confirm: Wachtrij %{name} permanent verwijderen? Dit kan niet ongedaan worden gemaakt.
|
|
283
296
|
pause: Pauzeren
|
|
284
297
|
pause_confirm: Verwerking pauzeren voor %{name}?
|
|
285
298
|
paused: Gepauzeerd
|
|
286
299
|
purge: Opschonen
|
|
287
300
|
purge_confirm: Alle berichten verwijderen uit %{name}?
|
|
288
301
|
resume: Hervatten
|
|
302
|
+
destroy:
|
|
303
|
+
success: Wachtrij %{name} verwijderd.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Deze wachtrij permanent verwijderen? Dit kan niet ongedaan worden gemaakt.
|
|
306
|
+
delete_queue: Wachtrij verwijderen
|
|
290
307
|
depth: 'Diepte:'
|
|
308
|
+
discard: Verwerpen
|
|
309
|
+
discard_confirm: Dit bericht verwerpen?
|
|
291
310
|
empty: Wachtrij is leeg
|
|
292
311
|
headers:
|
|
312
|
+
actions: Acties
|
|
293
313
|
enqueued: In de wachtrij geplaatst
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Inhoud
|
|
296
316
|
reads: Lezingen
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Kon bericht niet verwerpen.
|
|
319
|
+
message_discarded: Bericht verworpen.
|
|
320
|
+
message_retried: Zichtbaarheid van bericht gereset.
|
|
321
|
+
message_retry_failed: Kon bericht niet opnieuw proberen.
|
|
322
|
+
pause: Pauzeren
|
|
323
|
+
pause_confirm: Verwerking pauzeren?
|
|
298
324
|
purge_confirm: Alle berichten verwijderen?
|
|
299
325
|
purge_queue: Wachtrij opschonen
|
|
326
|
+
resume: Hervatten
|
|
327
|
+
retry: Opnieuw proberen
|
|
328
|
+
retry_confirm: Zichtbaarheidstimeout resetten en opnieuw proberen?
|
|
300
329
|
total: 'Totaal:'
|
|
301
330
|
visible: 'Zichtbaar:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/pt.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
pt:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Cancelar
|
|
6
|
+
confirm: Confirmar
|
|
7
|
+
confirm_title: Tem certeza?
|
|
8
|
+
delete: Excluir
|
|
9
|
+
delete_title: Excluir
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Nenhum processo em execução
|
|
@@ -170,6 +177,10 @@ pt:
|
|
|
170
177
|
timezone: 'Fuso horário:'
|
|
171
178
|
visible_at: 'Visível em:'
|
|
172
179
|
title: Trabalhos Enfileirados
|
|
180
|
+
discard: Descartar
|
|
181
|
+
discard_confirm: Descartar esta mensagem?
|
|
182
|
+
retry: Tentar novamente
|
|
183
|
+
retry_confirm: Redefinir tempo de visibilidade e tentar novamente?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Descartar
|
|
175
186
|
discard_confirm: Descartar este trabalho?
|
|
@@ -280,23 +291,41 @@ pt:
|
|
|
280
291
|
queue: Fila
|
|
281
292
|
total_ever: Total de todos os tempos
|
|
282
293
|
visible: Visível
|
|
294
|
+
delete: Excluir
|
|
295
|
+
delete_confirm: Excluir permanentemente a fila %{name}? Esta ação não pode ser desfeita.
|
|
283
296
|
pause: Pausar
|
|
284
297
|
pause_confirm: Pausar processamento por %{name}?
|
|
285
298
|
paused: Pausado
|
|
286
299
|
purge: Limpar
|
|
287
300
|
purge_confirm: Limpar todas as mensagens de %{name}?
|
|
288
301
|
resume: Retomar
|
|
302
|
+
destroy:
|
|
303
|
+
success: Fila %{name} excluída.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Excluir permanentemente esta fila? Esta ação não pode ser desfeita.
|
|
306
|
+
delete_queue: Excluir fila
|
|
290
307
|
depth: 'Profundidade:'
|
|
308
|
+
discard: Descartar
|
|
309
|
+
discard_confirm: Descartar esta mensagem?
|
|
291
310
|
empty: Fila está vazia
|
|
292
311
|
headers:
|
|
312
|
+
actions: Ações
|
|
293
313
|
enqueued: Enfileirado
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Carga útil
|
|
296
316
|
reads: Leituras
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Não foi possível descartar a mensagem.
|
|
319
|
+
message_discarded: Mensagem descartada.
|
|
320
|
+
message_retried: Visibilidade da mensagem redefinida.
|
|
321
|
+
message_retry_failed: Não foi possível tentar novamente a mensagem.
|
|
322
|
+
pause: Pausar
|
|
323
|
+
pause_confirm: Pausar processamento?
|
|
298
324
|
purge_confirm: Limpar todas as mensagens?
|
|
299
325
|
purge_queue: Limpar fila
|
|
326
|
+
resume: Retomar
|
|
327
|
+
retry: Tentar novamente
|
|
328
|
+
retry_confirm: Redefinir tempo de visibilidade e tentar novamente?
|
|
300
329
|
total: 'Total:'
|
|
301
330
|
visible: 'Visível:'
|
|
302
331
|
recurring_tasks:
|
data/config/locales/sv.yml
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
sv:
|
|
3
3
|
pgbus:
|
|
4
|
+
dialogs:
|
|
5
|
+
cancel: Avbryt
|
|
6
|
+
confirm: Bekräfta
|
|
7
|
+
confirm_title: Är du säker?
|
|
8
|
+
delete: Ta bort
|
|
9
|
+
delete_title: Ta bort
|
|
10
|
+
ok: OK
|
|
4
11
|
dashboard:
|
|
5
12
|
processes_table:
|
|
6
13
|
empty: Inga processer körs
|
|
@@ -170,6 +177,10 @@ sv:
|
|
|
170
177
|
timezone: 'Tidszon:'
|
|
171
178
|
visible_at: 'Synlig vid:'
|
|
172
179
|
title: Köade jobb
|
|
180
|
+
discard: Kassera
|
|
181
|
+
discard_confirm: Kassera detta meddelande?
|
|
182
|
+
retry: Försök igen
|
|
183
|
+
retry_confirm: Återställ synlighetstimeout och försök igen?
|
|
173
184
|
failed_table:
|
|
174
185
|
discard: Kassera
|
|
175
186
|
discard_confirm: Kassera detta jobb?
|
|
@@ -280,23 +291,41 @@ sv:
|
|
|
280
291
|
queue: Kö
|
|
281
292
|
total_ever: Totalt någonsin
|
|
282
293
|
visible: Synliga
|
|
294
|
+
delete: Ta bort
|
|
295
|
+
delete_confirm: Ta bort kön %{name} permanent? Detta kan inte ångras.
|
|
283
296
|
pause: Pausa
|
|
284
297
|
pause_confirm: Pausa bearbetning för %{name}?
|
|
285
298
|
paused: Pausad
|
|
286
299
|
purge: Rensa
|
|
287
300
|
purge_confirm: Rensa alla meddelanden från %{name}?
|
|
288
301
|
resume: Återuppta
|
|
302
|
+
destroy:
|
|
303
|
+
success: Kön %{name} borttagen.
|
|
289
304
|
show:
|
|
305
|
+
delete_confirm: Ta bort denna kö permanent? Detta kan inte ångras.
|
|
306
|
+
delete_queue: Ta bort kö
|
|
290
307
|
depth: 'Djup:'
|
|
308
|
+
discard: Kassera
|
|
309
|
+
discard_confirm: Kassera detta meddelande?
|
|
291
310
|
empty: Kön är tom
|
|
292
311
|
headers:
|
|
312
|
+
actions: Åtgärder
|
|
293
313
|
enqueued: Inlagd
|
|
294
314
|
id: ID
|
|
295
315
|
payload: Innehåll
|
|
296
316
|
reads: Läsningar
|
|
297
317
|
vt: VT
|
|
318
|
+
message_discard_failed: Kunde inte kassera meddelandet.
|
|
319
|
+
message_discarded: Meddelande kasserat.
|
|
320
|
+
message_retried: Meddelandets synlighet återställd.
|
|
321
|
+
message_retry_failed: Kunde inte försöka igen med meddelandet.
|
|
322
|
+
pause: Pausa
|
|
323
|
+
pause_confirm: Pausa bearbetning?
|
|
298
324
|
purge_confirm: Rensa alla meddelanden?
|
|
299
325
|
purge_queue: Rensa kö
|
|
326
|
+
resume: Återuppta
|
|
327
|
+
retry: Försök igen
|
|
328
|
+
retry_confirm: Återställ synlighetstimeout och försök igen?
|
|
300
329
|
total: 'Totalt:'
|
|
301
330
|
visible: 'Synliga:'
|
|
302
331
|
recurring_tasks:
|
data/config/routes.rb
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
Pgbus::Engine.routes.draw do
|
|
4
4
|
root to: "dashboard#show"
|
|
5
5
|
|
|
6
|
-
resources :queues, only: %i[index show], param: :name do
|
|
6
|
+
resources :queues, only: %i[index show destroy], param: :name do
|
|
7
7
|
member do
|
|
8
8
|
post :purge
|
|
9
9
|
post :pause
|
|
10
10
|
post :resume
|
|
11
|
+
post :retry_message
|
|
12
|
+
post :discard_message
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
|
data/lib/pgbus/client.rb
CHANGED
|
@@ -210,8 +210,16 @@ module Pgbus
|
|
|
210
210
|
synchronized { @pgmq.list_queues }
|
|
211
211
|
end
|
|
212
212
|
|
|
213
|
-
def purge_queue(queue_name)
|
|
214
|
-
|
|
213
|
+
def purge_queue(queue_name, prefixed: true)
|
|
214
|
+
name = prefixed ? config.queue_name(queue_name) : queue_name
|
|
215
|
+
synchronized { @pgmq.purge_queue(name) }
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def drop_queue(queue_name, prefixed: true)
|
|
219
|
+
name = prefixed ? config.queue_name(queue_name) : queue_name
|
|
220
|
+
result = synchronized { @pgmq.drop_queue(name) }
|
|
221
|
+
@queues_created.delete(name)
|
|
222
|
+
result
|
|
215
223
|
end
|
|
216
224
|
|
|
217
225
|
def purge_archive(queue_name, older_than:, batch_size: 1000)
|
data/lib/pgbus/version.rb
CHANGED