pgbus 0.2.6 → 0.2.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d12150a0ea8aea034f08e626bfa2c553cf75349eb502d7a0fe0a50a867aa11b
4
- data.tar.gz: 990216a4e6b7db7be81e888d90fe2d56ea536fa1e64a2507206dcd5524a255c5
3
+ metadata.gz: 3e16e68e83d8c1963b60a9c2137d3fbd737512b7e0fed1566b5f1320ef33c470
4
+ data.tar.gz: 03d54ebcc0357a61b71bbb3f11fcafa662114245c3fedc33b58a83d40718ffc6
5
5
  SHA512:
6
- metadata.gz: f7e706c2824a4f00401027bd08df2c663502586a0a48fdd2e4150341a1e50fac520c50a503b2a6cff2d48d482d069ac66a605b9ce73a14513d9e65537da45f88
7
- data.tar.gz: 64ad1a0978e42ddd271d50c224540bb3200e291912e3fde1bee72fe30eb74470b60833580a0a211785aa0830eb640dde463546c3bd748a33e9de0f903e79abad
6
+ metadata.gz: 5579b34e30ee64cfff273975174d4023b921f8f64a98c1baa09df0673ccb5ba6a5db73566452a35feead0bb4584d8a969b5513efb34ada4614e2945fbc85790d
7
+ data.tar.gz: ea716b54c14023d91d440fb37db87358330ced5671365fd808e0e092a86963d5c2587519d7493e185c51c106a070eb5e49e36d79d441af37c5f2098528aea26e
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."
@@ -81,6 +81,71 @@
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
+ document.querySelectorAll("template[data-pgbus-toast]").forEach(tpl => {
145
+ showToast(tpl.content.textContent.trim(), tpl.dataset.pgbusToast);
146
+ tpl.remove();
147
+ });
148
+
84
149
  <% if Pgbus.configuration.web_live_updates %>
85
150
  const interval = <%= Pgbus.configuration.web_refresh_interval %>;
86
151
  if (interval > 0) {
@@ -200,21 +265,54 @@
200
265
  </div>
201
266
  </nav>
202
267
 
203
- <!-- Flash messages -->
268
+ <!-- Toast container (fixed top-right) -->
269
+ <div id="pgbus-toast-container" class="fixed top-4 right-4 z-[100] flex flex-col space-y-2 max-w-sm"></div>
270
+
271
+ <!-- Flash messages rendered as toasts -->
204
272
  <% if notice %>
205
- <div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 mt-4">
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>
273
+ <template data-pgbus-toast="success"><%= notice %></template>
210
274
  <% end %>
211
275
  <% if alert %>
212
- <div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 mt-4">
213
- <div class="rounded-md bg-red-50 dark:bg-red-900/30 p-3">
214
- <p class="text-sm text-red-800 dark:text-red-300"><%= alert %></p>
276
+ <template data-pgbus-toast="error"><%= alert %></template>
277
+ <% end %>
278
+
279
+ <!-- Confirm dialog -->
280
+ <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">
281
+ <div class="p-6">
282
+ <div class="flex items-start space-x-4">
283
+ <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">
284
+ <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">
285
+ <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"/>
286
+ </svg>
287
+ </div>
288
+ <div class="flex-1">
289
+ <h3 class="text-lg font-semibold text-gray-900 dark:text-white" id="pgbus-confirm-title"></h3>
290
+ <p class="mt-2 text-sm text-gray-600 dark:text-gray-300" id="pgbus-confirm-message"></p>
291
+ </div>
215
292
  </div>
216
293
  </div>
217
- <% end %>
294
+ <div class="flex justify-end space-x-3 px-6 py-4 bg-gray-50 dark:bg-gray-900/50 rounded-b-lg">
295
+ <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>
296
+ <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>
297
+ </div>
298
+ </dialog>
299
+
300
+ <!-- Alert dialog -->
301
+ <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">
302
+ <div class="p-6">
303
+ <div class="flex items-start space-x-4">
304
+ <div class="flex-shrink-0 flex items-center justify-center h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900/30">
305
+ <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">
306
+ <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"/>
307
+ </svg>
308
+ </div>
309
+ <p class="text-sm text-gray-700 dark:text-gray-300" id="pgbus-alert-message"></p>
310
+ </div>
311
+ </div>
312
+ <div class="flex justify-end px-6 py-4 bg-gray-50 dark:bg-gray-900/50 rounded-b-lg">
313
+ <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>
314
+ </div>
315
+ </dialog>
218
316
 
219
317
  <!-- Content -->
220
318
  <main class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-6">
@@ -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"><%= @queue&.dig(:name) || params[:name] %></h1>
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
 
@@ -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
@@ -280,13 +287,19 @@ da:
280
287
  queue: Kø
281
288
  total_ever: Total nogensinde
282
289
  visible: Synlig
290
+ delete: Slet
291
+ delete_confirm: Slet køen %{name} permanent? Dette kan ikke fortrydes.
283
292
  pause: Pause
284
293
  pause_confirm: Pause behandling i %{name}?
285
294
  paused: Pauset
286
295
  purge: Rens
287
296
  purge_confirm: Rens alle beskeder fra %{name}?
288
297
  resume: Genoptag
298
+ destroy:
299
+ success: Køen %{name} slettet.
289
300
  show:
301
+ delete_confirm: Slet denne kø permanent? Dette kan ikke fortrydes.
302
+ delete_queue: Slet kø
290
303
  depth: 'Dybde:'
291
304
  empty: Køen er tom
292
305
  headers:
@@ -295,8 +308,11 @@ da:
295
308
  payload: Indhold
296
309
  reads: Læsninger
297
310
  vt: VT
311
+ pause: Pause
312
+ pause_confirm: Pause behandling?
298
313
  purge_confirm: Rens alle beskeder?
299
314
  purge_queue: Rens kø
315
+ resume: Genoptag
300
316
  total: 'Total:'
301
317
  visible: 'Synlig:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ de:
280
287
  queue: Warteschlange
281
288
  total_ever: Insgesamt jemals
282
289
  visible: Sichtbar
290
+ delete: Löschen
291
+ delete_confirm: Warteschlange %{name} dauerhaft löschen? Dies kann nicht rückgängig gemacht werden.
283
292
  pause: Pause
284
293
  pause_confirm: Verarbeitung für %{name} pausieren?
285
294
  paused: Pausiert
286
295
  purge: Bereinigen
287
296
  purge_confirm: Alle Nachrichten von %{name} löschen?
288
297
  resume: Fortsetzen
298
+ destroy:
299
+ success: Warteschlange %{name} gelöscht.
289
300
  show:
301
+ delete_confirm: Diese Warteschlange dauerhaft löschen? Dies kann nicht rückgängig gemacht werden.
302
+ delete_queue: Warteschlange löschen
290
303
  depth: 'Tiefe:'
291
304
  empty: Warteschlange ist leer
292
305
  headers:
@@ -295,8 +308,11 @@ de:
295
308
  payload: Nutzlast
296
309
  reads: Lesevorgänge
297
310
  vt: VT
311
+ pause: Pause
312
+ pause_confirm: Verarbeitung pausieren?
298
313
  purge_confirm: Alle Nachrichten löschen?
299
314
  purge_queue: Warteschlange bereinigen
315
+ resume: Fortsetzen
300
316
  total: 'Insgesamt:'
301
317
  visible: 'Sichtbar:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ en:
280
287
  queue: Queue
281
288
  total_ever: Total Ever
282
289
  visible: Visible
290
+ delete: Delete
291
+ delete_confirm: Permanently delete queue %{name}? This cannot be undone.
283
292
  pause: Pause
284
293
  pause_confirm: Pause processing for %{name}?
285
294
  paused: Paused
286
295
  purge: Purge
287
296
  purge_confirm: Purge all messages from %{name}?
288
297
  resume: Resume
298
+ destroy:
299
+ success: Queue %{name} deleted.
289
300
  show:
301
+ delete_confirm: Permanently delete this queue? This cannot be undone.
302
+ delete_queue: Delete Queue
290
303
  depth: 'Depth:'
291
304
  empty: Queue is empty
292
305
  headers:
@@ -295,8 +308,11 @@ en:
295
308
  payload: Payload
296
309
  reads: Reads
297
310
  vt: VT
311
+ pause: Pause
312
+ pause_confirm: Pause processing?
298
313
  purge_confirm: Purge all messages?
299
314
  purge_queue: Purge Queue
315
+ resume: Resume
300
316
  total: 'Total:'
301
317
  visible: 'Visible:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ es:
280
287
  queue: Cola
281
288
  total_ever: Total acumulado
282
289
  visible: Visible
290
+ delete: Eliminar
291
+ delete_confirm: "¿Eliminar permanentemente la cola %{name}? Esto no se puede deshacer."
283
292
  pause: Pausar
284
293
  pause_confirm: "¿Pausar el procesamiento de %{name}?"
285
294
  paused: Pausado
286
295
  purge: Purgar
287
296
  purge_confirm: "¿Purgar todos los mensajes de %{name}?"
288
297
  resume: Reanudar
298
+ destroy:
299
+ success: Cola %{name} eliminada.
289
300
  show:
301
+ delete_confirm: "¿Eliminar permanentemente esta cola? Esto no se puede deshacer."
302
+ delete_queue: Eliminar cola
290
303
  depth: 'Profundidad:'
291
304
  empty: La cola está vacía
292
305
  headers:
@@ -295,8 +308,11 @@ es:
295
308
  payload: Carga útil
296
309
  reads: Lecturas
297
310
  vt: VT
311
+ pause: Pausar
312
+ pause_confirm: "¿Pausar el procesamiento?"
298
313
  purge_confirm: "¿Purgar todos los mensajes?"
299
314
  purge_queue: Purgar cola
315
+ resume: Reanudar
300
316
  total: 'Total:'
301
317
  visible: 'Visible:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ fi:
280
287
  queue: Jono
281
288
  total_ever: Yhteensä koskaan
282
289
  visible: Näkyvissä
290
+ delete: Poista
291
+ delete_confirm: Poista jono %{name} pysyvästi? Tätä ei voi kumota.
283
292
  pause: Tauko
284
293
  pause_confirm: Keskeytä käsittely %{name} ajan?
285
294
  paused: Keskeytetty
286
295
  purge: Tyhjennä
287
296
  purge_confirm: Tyhjennä kaikki viestit %{name}:sta?
288
297
  resume: Jatka
298
+ destroy:
299
+ success: Jono %{name} poistettu.
289
300
  show:
301
+ delete_confirm: Poista tämä jono pysyvästi? Tätä ei voi kumota.
302
+ delete_queue: Poista jono
290
303
  depth: 'Syvyys:'
291
304
  empty: Jono on tyhjä
292
305
  headers:
@@ -295,8 +308,11 @@ fi:
295
308
  payload: Kuorma
296
309
  reads: Lukukerrat
297
310
  vt: VT
311
+ pause: Tauko
312
+ pause_confirm: Keskeytetäänkö käsittely?
298
313
  purge_confirm: Tyhjennetäänkö kaikki viestit?
299
314
  purge_queue: Tyhjennä jono
315
+ resume: Jatka
300
316
  total: 'Yhteensä:'
301
317
  visible: 'Näkyvissä:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ fr:
280
287
  queue: File d'attente
281
288
  total_ever: Total jamais
282
289
  visible: Visible
290
+ delete: Supprimer
291
+ delete_confirm: Supprimer définitivement la file d'attente %{name} ? Cette action est irréversible.
283
292
  pause: Pause
284
293
  pause_confirm: Mettre en pause le traitement pour %{name} ?
285
294
  paused: En pause
286
295
  purge: Purger
287
296
  purge_confirm: Purger tous les messages de %{name} ?
288
297
  resume: Reprendre
298
+ destroy:
299
+ success: File d'attente %{name} supprimée.
289
300
  show:
301
+ delete_confirm: Supprimer définitivement cette file d'attente ? Cette action est irréversible.
302
+ delete_queue: Supprimer la file d'attente
290
303
  depth: 'Profondeur :'
291
304
  empty: La file d'attente est vide
292
305
  headers:
@@ -295,8 +308,11 @@ fr:
295
308
  payload: Charge utile
296
309
  reads: Lectures
297
310
  vt: VT
311
+ pause: Pause
312
+ pause_confirm: Mettre en pause le traitement ?
298
313
  purge_confirm: Purger tous les messages ?
299
314
  purge_queue: Purger la file d'attente
315
+ resume: Reprendre
300
316
  total: 'Total :'
301
317
  visible: 'Visible :'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ it:
280
287
  queue: Coda
281
288
  total_ever: Totale mai
282
289
  visible: Visibile
290
+ delete: Elimina
291
+ delete_confirm: Eliminare permanentemente la coda %{name}? Questa azione non può essere annullata.
283
292
  pause: Pausa
284
293
  pause_confirm: Mettere in pausa l'elaborazione per %{name}?
285
294
  paused: In pausa
286
295
  purge: Pulisci
287
296
  purge_confirm: Eliminare tutti i messaggi da %{name}?
288
297
  resume: Riprendi
298
+ destroy:
299
+ success: Coda %{name} eliminata.
289
300
  show:
301
+ delete_confirm: Eliminare permanentemente questa coda? Questa azione non può essere annullata.
302
+ delete_queue: Elimina coda
290
303
  depth: 'Profondità:'
291
304
  empty: La coda è vuota
292
305
  headers:
@@ -295,8 +308,11 @@ it:
295
308
  payload: Carico utile
296
309
  reads: Letture
297
310
  vt: VT
311
+ pause: Pausa
312
+ pause_confirm: Mettere in pausa l'elaborazione?
298
313
  purge_confirm: Eliminare tutti i messaggi?
299
314
  purge_queue: Pulisci coda
315
+ resume: Riprendi
300
316
  total: 'Totale:'
301
317
  visible: 'Visibile:'
302
318
  recurring_tasks:
@@ -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: 実行中のプロセスはありません
@@ -280,13 +287,19 @@ ja:
280
287
  queue: キュー
281
288
  total_ever: 合計数
282
289
  visible: 表示中
290
+ delete: 削除
291
+ delete_confirm: キュー %{name} を完全に削除しますか?この操作は取り消せません。
283
292
  pause: 一時停止
284
293
  pause_confirm: "%{name} の処理を一時停止しますか?"
285
294
  paused: 一時停止中
286
295
  purge: パージ
287
296
  purge_confirm: "%{name} からすべてのメッセージを削除しますか?"
288
297
  resume: 再開
298
+ destroy:
299
+ success: キュー %{name} を削除しました。
289
300
  show:
301
+ delete_confirm: このキューを完全に削除しますか?この操作は取り消せません。
302
+ delete_queue: キューを削除
290
303
  depth: 深さ:
291
304
  empty: キューは空です
292
305
  headers:
@@ -295,8 +308,11 @@ ja:
295
308
  payload: ペイロード
296
309
  reads: 読み取り回数
297
310
  vt: VT
311
+ pause: 一時停止
312
+ pause_confirm: 処理を一時停止しますか?
298
313
  purge_confirm: すべてのメッセージを削除しますか?
299
314
  purge_queue: キューをパージ
315
+ resume: 再開
300
316
  total: 合計:
301
317
  visible: 表示中:
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ nb:
280
287
  queue: Kø
281
288
  total_ever: Totalt noensinne
282
289
  visible: Synlig
290
+ delete: Slett
291
+ delete_confirm: Slette køen %{name} permanent? Dette kan ikke angres.
283
292
  pause: Pause
284
293
  pause_confirm: Pause behandling for %{name}?
285
294
  paused: Pauset
286
295
  purge: Rens
287
296
  purge_confirm: Rens alle meldinger fra %{name}?
288
297
  resume: Gjenoppta
298
+ destroy:
299
+ success: Køen %{name} slettet.
289
300
  show:
301
+ delete_confirm: Slette denne køen permanent? Dette kan ikke angres.
302
+ delete_queue: Slett kø
290
303
  depth: 'Dybde:'
291
304
  empty: Køen er tom
292
305
  headers:
@@ -295,8 +308,11 @@ nb:
295
308
  payload: Innhold
296
309
  reads: Lesninger
297
310
  vt: VT
311
+ pause: Pause
312
+ pause_confirm: Pause behandling?
298
313
  purge_confirm: Rens alle meldinger?
299
314
  purge_queue: Rens kø
315
+ resume: Gjenoppta
300
316
  total: 'Totalt:'
301
317
  visible: 'Synlig:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ nl:
280
287
  queue: Wachtrij
281
288
  total_ever: Totaal ooit
282
289
  visible: Zichtbaar
290
+ delete: Verwijderen
291
+ delete_confirm: Wachtrij %{name} permanent verwijderen? Dit kan niet ongedaan worden gemaakt.
283
292
  pause: Pauzeren
284
293
  pause_confirm: Verwerking pauzeren voor %{name}?
285
294
  paused: Gepauzeerd
286
295
  purge: Opschonen
287
296
  purge_confirm: Alle berichten verwijderen uit %{name}?
288
297
  resume: Hervatten
298
+ destroy:
299
+ success: Wachtrij %{name} verwijderd.
289
300
  show:
301
+ delete_confirm: Deze wachtrij permanent verwijderen? Dit kan niet ongedaan worden gemaakt.
302
+ delete_queue: Wachtrij verwijderen
290
303
  depth: 'Diepte:'
291
304
  empty: Wachtrij is leeg
292
305
  headers:
@@ -295,8 +308,11 @@ nl:
295
308
  payload: Inhoud
296
309
  reads: Lezingen
297
310
  vt: VT
311
+ pause: Pauzeren
312
+ pause_confirm: Verwerking pauzeren?
298
313
  purge_confirm: Alle berichten verwijderen?
299
314
  purge_queue: Wachtrij opschonen
315
+ resume: Hervatten
300
316
  total: 'Totaal:'
301
317
  visible: 'Zichtbaar:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ pt:
280
287
  queue: Fila
281
288
  total_ever: Total de todos os tempos
282
289
  visible: Visível
290
+ delete: Excluir
291
+ delete_confirm: Excluir permanentemente a fila %{name}? Esta ação não pode ser desfeita.
283
292
  pause: Pausar
284
293
  pause_confirm: Pausar processamento por %{name}?
285
294
  paused: Pausado
286
295
  purge: Limpar
287
296
  purge_confirm: Limpar todas as mensagens de %{name}?
288
297
  resume: Retomar
298
+ destroy:
299
+ success: Fila %{name} excluída.
289
300
  show:
301
+ delete_confirm: Excluir permanentemente esta fila? Esta ação não pode ser desfeita.
302
+ delete_queue: Excluir fila
290
303
  depth: 'Profundidade:'
291
304
  empty: Fila está vazia
292
305
  headers:
@@ -295,8 +308,11 @@ pt:
295
308
  payload: Carga útil
296
309
  reads: Leituras
297
310
  vt: VT
311
+ pause: Pausar
312
+ pause_confirm: Pausar processamento?
298
313
  purge_confirm: Limpar todas as mensagens?
299
314
  purge_queue: Limpar fila
315
+ resume: Retomar
300
316
  total: 'Total:'
301
317
  visible: 'Visível:'
302
318
  recurring_tasks:
@@ -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
@@ -280,13 +287,19 @@ sv:
280
287
  queue: Kö
281
288
  total_ever: Totalt någonsin
282
289
  visible: Synliga
290
+ delete: Ta bort
291
+ delete_confirm: Ta bort kön %{name} permanent? Detta kan inte ångras.
283
292
  pause: Pausa
284
293
  pause_confirm: Pausa bearbetning för %{name}?
285
294
  paused: Pausad
286
295
  purge: Rensa
287
296
  purge_confirm: Rensa alla meddelanden från %{name}?
288
297
  resume: Återuppta
298
+ destroy:
299
+ success: Kön %{name} borttagen.
289
300
  show:
301
+ delete_confirm: Ta bort denna kö permanent? Detta kan inte ångras.
302
+ delete_queue: Ta bort kö
290
303
  depth: 'Djup:'
291
304
  empty: Kön är tom
292
305
  headers:
@@ -295,8 +308,11 @@ sv:
295
308
  payload: Innehåll
296
309
  reads: Läsningar
297
310
  vt: VT
311
+ pause: Pausa
312
+ pause_confirm: Pausa bearbetning?
298
313
  purge_confirm: Rensa alla meddelanden?
299
314
  purge_queue: Rensa kö
315
+ resume: Återuppta
300
316
  total: 'Totalt:'
301
317
  visible: 'Synliga:'
302
318
  recurring_tasks:
data/config/routes.rb CHANGED
@@ -3,7 +3,7 @@
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
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
- synchronized { @pgmq.purge_queue(config.queue_name(queue_name)) }
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pgbus
4
- VERSION = "0.2.6"
4
+ VERSION = "0.2.7"
5
5
  end
@@ -57,7 +57,11 @@ module Pgbus
57
57
  end
58
58
 
59
59
  def purge_queue(name)
60
- @client.purge_queue(name)
60
+ @client.purge_queue(name, prefixed: false)
61
+ end
62
+
63
+ def drop_queue(name)
64
+ @client.drop_queue(name, prefixed: false)
61
65
  end
62
66
 
63
67
  def pause_queue(name, reason: nil)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson