pgbus 0.6.7 → 0.6.9

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/pgbus/dashboard_controller.rb +4 -0
  3. data/app/controllers/pgbus/queues_controller.rb +1 -0
  4. data/app/views/pgbus/dashboard/_queue_health.html.erb +78 -0
  5. data/app/views/pgbus/dashboard/show.html.erb +2 -0
  6. data/app/views/pgbus/queues/show.html.erb +37 -0
  7. data/config/locales/da.yml +35 -4
  8. data/config/locales/de.yml +35 -4
  9. data/config/locales/en.yml +35 -4
  10. data/config/locales/es.yml +35 -4
  11. data/config/locales/fi.yml +35 -4
  12. data/config/locales/fr.yml +35 -4
  13. data/config/locales/it.yml +35 -4
  14. data/config/locales/ja.yml +35 -4
  15. data/config/locales/nb.yml +35 -4
  16. data/config/locales/nl.yml +35 -4
  17. data/config/locales/pt.yml +35 -4
  18. data/config/locales/sv.yml +35 -4
  19. data/lib/generators/pgbus/add_failed_events_index_generator.rb +4 -11
  20. data/lib/generators/pgbus/add_job_locks_generator.rb +4 -11
  21. data/lib/generators/pgbus/add_job_stats_generator.rb +4 -11
  22. data/lib/generators/pgbus/add_job_stats_latency_generator.rb +4 -11
  23. data/lib/generators/pgbus/add_job_stats_queue_index_generator.rb +4 -11
  24. data/lib/generators/pgbus/add_outbox_generator.rb +4 -11
  25. data/lib/generators/pgbus/add_presence_generator.rb +4 -11
  26. data/lib/generators/pgbus/add_queue_states_generator.rb +4 -11
  27. data/lib/generators/pgbus/add_recurring_generator.rb +4 -11
  28. data/lib/generators/pgbus/add_stream_stats_generator.rb +4 -11
  29. data/lib/generators/pgbus/install_generator.rb +4 -11
  30. data/lib/generators/pgbus/migrate_job_locks_generator.rb +4 -11
  31. data/lib/generators/pgbus/migration_path.rb +28 -0
  32. data/lib/generators/pgbus/templates/migration.rb.erb +6 -0
  33. data/lib/generators/pgbus/templates/tune_autovacuum.rb.erb +38 -0
  34. data/lib/generators/pgbus/tune_autovacuum_generator.rb +48 -0
  35. data/lib/generators/pgbus/upgrade_pgmq_generator.rb +4 -11
  36. data/lib/pgbus/autovacuum_tuning.rb +93 -0
  37. data/lib/pgbus/client.rb +13 -1
  38. data/lib/pgbus/engine.rb +1 -0
  39. data/lib/pgbus/generators/migration_detector.rb +38 -3
  40. data/lib/pgbus/version.rb +1 -1
  41. data/lib/pgbus/web/data_source.rb +133 -1
  42. data/lib/pgbus/web/metrics_serializer.rb +71 -2
  43. data/lib/tasks/pgbus_autovacuum.rake +40 -0
  44. metadata +7 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e747f3644d06463ea9cd87dc79fbe19e1787ba7d4e9df0ba7512f729b6189224
4
- data.tar.gz: 1b2f8a1eb8f2c10c32fa3f2c0eab5a59b2de1382e07537ee349d958393061d96
3
+ metadata.gz: 84c8f674c6aa6d83d0120f586b93f0fc4126ccb5d72378ec04a9b8cb3d464677
4
+ data.tar.gz: 2544b1be7c34ccf50493ce0af717c3069e979d95ded26197340d8133d637378f
5
5
  SHA512:
6
- metadata.gz: b60516dfce1ba05b77afd21ab8e6ad3d227a2dde4edefc662221217533e22d1fa810f5056cc0f7d4470dbc220a7ae920408b785b088f8155c6a0bcb802283243
7
- data.tar.gz: b386c96b0b493a00b196926fc014797e807538a6039fd772a4b0bafefd2b019d9a4f2f25136b264c03aa6a88a1533899e156341e57b81afdda0c9bf88de6a477
6
+ metadata.gz: bb329bb54c6eb7da4341eb8050657007d4fe057e862db7b8ef3c6cb0612abff33eaa383d7ea0ce00844dab1a532bd4b45ad3c52618c9ef45b7f9cf9d693ba199
7
+ data.tar.gz: 8ed028896561f51cb8a904f8e692125e6e61335501fceae366f5cda3f22daf7379b1b83d472df940c4965e2f0b2e00aed30ab90e3227d185e797ee17fb9654b6
@@ -16,11 +16,15 @@ module Pgbus
16
16
  when "failures"
17
17
  @recent_failures = data_source.failed_events(page: 1, per_page: 5)
18
18
  render_frame("pgbus/dashboard/recent_failures")
19
+ when "health"
20
+ @health = data_source.queue_health_stats
21
+ render_frame("pgbus/dashboard/queue_health")
19
22
  else
20
23
  @stats = data_source.summary_stats
21
24
  @queues = data_source.queues_with_metrics
22
25
  @processes = data_source.processes
23
26
  @recent_failures = data_source.failed_events(page: 1, per_page: 5)
27
+ @health = data_source.queue_health_stats
24
28
  end
25
29
  end
26
30
  end
@@ -12,6 +12,7 @@ module Pgbus
12
12
 
13
13
  @paused = data_source.queue_paused?(params[:name])
14
14
  @messages = data_source.jobs(queue_name: params[:name], page: page_param, per_page: per_page)
15
+ @health = data_source.queue_health_detail(params[:name])
15
16
  end
16
17
 
17
18
  def purge
@@ -0,0 +1,78 @@
1
+ <turbo-frame id="dashboard-health" data-auto-refresh data-src="<%= pgbus.root_path(frame: 'health') %>">
2
+ <div class="mb-8">
3
+ <h2 class="text-lg font-semibold text-gray-900 dark:text-white mb-3"><%= t("pgbus.dashboard.queue_health.title") %></h2>
4
+
5
+ <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4 mb-4">
6
+ <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
7
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-400"><%= t("pgbus.dashboard.queue_health.dead_tuples") %></p>
8
+ <p class="mt-1 text-3xl font-semibold <%= @health[:total_dead_tuples] > 10_000 ? 'text-amber-600 dark:text-amber-400' : 'text-gray-900 dark:text-white' %>">
9
+ <%= pgbus_number(@health[:total_dead_tuples]) %>
10
+ </p>
11
+ <p class="text-xs text-gray-400 dark:text-gray-500"><%= pgbus_number(@health[:total_live_tuples]) %> <%= t("pgbus.dashboard.queue_health.live") %></p>
12
+ </div>
13
+
14
+ <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
15
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-400"><%= t("pgbus.dashboard.queue_health.worst_bloat") %></p>
16
+ <p class="mt-1 text-3xl font-semibold <%= @health[:worst_bloat_ratio] > 0.2 ? 'text-red-600 dark:text-red-400' : @health[:worst_bloat_ratio] > 0.1 ? 'text-amber-600 dark:text-amber-400' : 'text-green-600 dark:text-green-400' %>">
17
+ <%= (@health[:worst_bloat_ratio] * 100).round(1) %>%
18
+ </p>
19
+ <% if @health[:tables_needing_vacuum] > 0 %>
20
+ <p class="text-xs text-amber-500"><%= t("pgbus.dashboard.queue_health.tables_need_vacuum", count: @health[:tables_needing_vacuum]) %></p>
21
+ <% end %>
22
+ </div>
23
+
24
+ <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
25
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-400"><%= t("pgbus.dashboard.queue_health.last_vacuum") %></p>
26
+ <p class="mt-1 text-3xl font-semibold text-gray-900 dark:text-white">
27
+ <% if @health[:oldest_vacuum_ago_sec] %>
28
+ <%= pgbus_duration(@health[:oldest_vacuum_ago_sec]) %>
29
+ <% else %>
30
+
31
+ <% end %>
32
+ </p>
33
+ <p class="text-xs text-gray-400 dark:text-gray-500"><%= t("pgbus.dashboard.queue_health.oldest_vacuum_ago") %></p>
34
+ </div>
35
+
36
+ <div class="rounded-lg bg-white dark:bg-gray-800 p-5 shadow ring-1 ring-gray-200 dark:ring-gray-700">
37
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-400"><%= t("pgbus.dashboard.queue_health.mvcc_horizon") %></p>
38
+ <p class="mt-1 text-3xl font-semibold <%= (@health[:oldest_transaction_age_sec] || 0) > 60 ? 'text-red-600 dark:text-red-400' : (@health[:oldest_transaction_age_sec] || 0) > 30 ? 'text-amber-600 dark:text-amber-400' : 'text-green-600 dark:text-green-400' %>">
39
+ <% if @health[:oldest_transaction_age_sec] %>
40
+ <%= pgbus_duration(@health[:oldest_transaction_age_sec]) %>
41
+ <% else %>
42
+
43
+ <% end %>
44
+ </p>
45
+ <p class="text-xs text-gray-400 dark:text-gray-500"><%= t("pgbus.dashboard.queue_health.oldest_open_txn") %></p>
46
+ </div>
47
+ </div>
48
+
49
+ <% if @health[:tables].any? %>
50
+ <div class="overflow-hidden rounded-lg bg-white dark:bg-gray-800 shadow ring-1 ring-gray-200 dark:ring-gray-700">
51
+ <table class="pgbus-table min-w-full divide-y divide-gray-200 dark:divide-gray-700">
52
+ <thead class="bg-gray-50 dark:bg-gray-900">
53
+ <tr>
54
+ <th class="px-4 py-3 text-left text-xs font-medium uppercase text-gray-500"><%= t("pgbus.dashboard.queue_health.headers.table") %></th>
55
+ <th class="px-4 py-3 text-left text-xs font-medium uppercase text-gray-500"><%= t("pgbus.dashboard.queue_health.headers.kind") %></th>
56
+ <th class="px-4 py-3 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.dashboard.queue_health.headers.live") %></th>
57
+ <th class="px-4 py-3 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.dashboard.queue_health.headers.dead") %></th>
58
+ <th class="px-4 py-3 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.dashboard.queue_health.headers.bloat") %></th>
59
+ <th class="px-4 py-3 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.dashboard.queue_health.headers.last_vacuum") %></th>
60
+ </tr>
61
+ </thead>
62
+ <tbody class="divide-y divide-gray-100 dark:divide-gray-700">
63
+ <% @health[:tables].each do |t| %>
64
+ <tr class="hover:bg-gray-50 dark:hover:bg-gray-700/50 dark:bg-gray-900">
65
+ <td class="px-4 py-3 text-sm font-mono text-gray-900 dark:text-white"><%= t[:table] %></td>
66
+ <td class="px-4 py-3 text-sm text-gray-500 dark:text-gray-400"><%= t("pgbus.dashboard.queue_health.kinds.#{t[:kind]}") %></td>
67
+ <td class="px-4 py-3 text-sm text-right text-gray-700 dark:text-gray-300"><%= pgbus_number(t[:live_tuples]) %></td>
68
+ <td class="px-4 py-3 text-sm text-right <%= t[:dead_tuples] > 1000 ? 'text-amber-600 dark:text-amber-400 font-semibold' : 'text-gray-700 dark:text-gray-300' %>"><%= pgbus_number(t[:dead_tuples]) %></td>
69
+ <td class="px-4 py-3 text-sm text-right <%= t[:bloat_ratio] > 0.2 ? 'text-red-600 dark:text-red-400 font-semibold' : t[:bloat_ratio] > 0.1 ? 'text-amber-600 dark:text-amber-400' : 'text-gray-500 dark:text-gray-400' %>"><%= (t[:bloat_ratio] * 100).round(1) %>%</td>
70
+ <td class="px-4 py-3 text-sm text-right text-gray-500 dark:text-gray-400"><%= t[:last_vacuum_ago_sec] ? pgbus_duration(t[:last_vacuum_ago_sec]) : "—" %></td>
71
+ </tr>
72
+ <% end %>
73
+ </tbody>
74
+ </table>
75
+ </div>
76
+ <% end %>
77
+ </div>
78
+ </turbo-frame>
@@ -4,6 +4,8 @@
4
4
 
5
5
  <%= render "pgbus/dashboard/queues_table" %>
6
6
 
7
+ <%= render "pgbus/dashboard/queue_health" %>
8
+
7
9
  <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
8
10
  <%= render "pgbus/dashboard/processes_table" %>
9
11
  <%= render "pgbus/dashboard/recent_failures" %>
@@ -36,6 +36,43 @@
36
36
  </div>
37
37
  </div>
38
38
 
39
+ <!-- Table Health -->
40
+ <% if @health && @health[:tables].any? %>
41
+ <div class="mb-6 overflow-hidden rounded-lg bg-white dark:bg-gray-800 shadow ring-1 ring-gray-200 dark:ring-gray-700">
42
+ <div class="px-4 py-3 border-b border-gray-200 dark:border-gray-700">
43
+ <h2 class="text-sm font-semibold text-gray-900 dark:text-white"><%= t("pgbus.queues.show.table_health.title") %></h2>
44
+ <% if @health[:oldest_transaction_age_sec] %>
45
+ <p class="text-xs text-gray-500 mt-1">
46
+ <%= t("pgbus.queues.show.table_health.oldest_txn") %>
47
+ <span class="font-mono <%= @health[:oldest_transaction_age_sec] > 60 ? 'text-red-600 dark:text-red-400' : @health[:oldest_transaction_age_sec] > 30 ? 'text-amber-600 dark:text-amber-400' : 'text-green-600 dark:text-green-400' %>"><%= pgbus_duration(@health[:oldest_transaction_age_sec]) %></span>
48
+ </p>
49
+ <% end %>
50
+ </div>
51
+ <table class="pgbus-table min-w-full divide-y divide-gray-200 dark:divide-gray-700">
52
+ <thead class="bg-gray-50 dark:bg-gray-900">
53
+ <tr>
54
+ <th class="px-4 py-2 text-left text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.table_health.headers.table") %></th>
55
+ <th class="px-4 py-2 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.table_health.headers.live") %></th>
56
+ <th class="px-4 py-2 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.table_health.headers.dead") %></th>
57
+ <th class="px-4 py-2 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.table_health.headers.bloat") %></th>
58
+ <th class="px-4 py-2 text-right text-xs font-medium uppercase text-gray-500"><%= t("pgbus.queues.show.table_health.headers.last_vacuum") %></th>
59
+ </tr>
60
+ </thead>
61
+ <tbody class="divide-y divide-gray-100 dark:divide-gray-700">
62
+ <% @health[:tables].each do |t| %>
63
+ <tr class="dark:bg-gray-900">
64
+ <td class="px-4 py-2 text-sm font-mono text-gray-900 dark:text-white"><%= t[:table] %></td>
65
+ <td class="px-4 py-2 text-sm text-right text-gray-700 dark:text-gray-300"><%= pgbus_number(t[:live_tuples]) %></td>
66
+ <td class="px-4 py-2 text-sm text-right <%= t[:dead_tuples] > 1000 ? 'text-amber-600 dark:text-amber-400 font-semibold' : 'text-gray-700 dark:text-gray-300' %>"><%= pgbus_number(t[:dead_tuples]) %></td>
67
+ <td class="px-4 py-2 text-sm text-right <%= t[:bloat_ratio] > 0.2 ? 'text-red-600 dark:text-red-400 font-semibold' : t[:bloat_ratio] > 0.1 ? 'text-amber-600 dark:text-amber-400' : 'text-gray-500 dark:text-gray-400' %>"><%= (t[:bloat_ratio] * 100).round(1) %>%</td>
68
+ <td class="px-4 py-2 text-sm text-right text-gray-500 dark:text-gray-400"><%= t[:last_vacuum_ago_sec] ? pgbus_duration(t[:last_vacuum_ago_sec]) : "—" %></td>
69
+ </tr>
70
+ <% end %>
71
+ </tbody>
72
+ </table>
73
+ </div>
74
+ <% end %>
75
+
39
76
  <!-- Messages in Queue -->
40
77
  <div class="overflow-hidden rounded-lg bg-white dark:bg-gray-800 shadow ring-1 ring-gray-200 dark:ring-gray-700">
41
78
  <table class="pgbus-table min-w-full divide-y divide-gray-200 dark:divide-gray-700">
@@ -10,6 +10,28 @@ da:
10
10
  pid: PID
11
11
  status: Status
12
12
  title: Aktive processer
13
+ queue_health:
14
+ dead_tuples: Døde tupler
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Døde
18
+ kind: Type
19
+ last_vacuum: Sidste Vacuum
20
+ live: Levende
21
+ table: Tabel
22
+ kinds:
23
+ archive: Arkiv
24
+ queue: Kø
25
+ last_vacuum: Sidste Vacuum
26
+ live: Levende
27
+ mvcc_horizon: MVCC Horisont
28
+ oldest_open_txn: Ældste åbne transaktion
29
+ oldest_vacuum_ago: Ældste tabel-vacuum
30
+ tables_need_vacuum:
31
+ one: "%{count} tabel har brug for vacuum"
32
+ other: "%{count} tabeller har brug for vacuum"
33
+ title: Køhelbred
34
+ worst_bloat: Værste Bloat
13
35
  queues_table:
14
36
  empty: Ingen køer fundet
15
37
  headers:
@@ -337,6 +359,15 @@ da:
337
359
  resume: Genoptag
338
360
  retry: Prøv igen
339
361
  retry_confirm: Nulstil synlighedstimeout og prøv igen?
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: Døde
366
+ last_vacuum: Sidste Vacuum
367
+ live: Levende
368
+ table: Tabel
369
+ oldest_txn: 'Ældste åbne transaktion:'
370
+ title: Tabelhelbred
340
371
  total: 'Total:'
341
372
  visible: 'Synlig:'
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ da:
345
376
  one: "%{count} opgave konfigureret"
346
377
  other: "%{count} opgaver konfigureret"
347
378
  title: Gentagne opgaver
348
- toggle:
349
- disabled: Opgave deaktiveret
350
- enabled: Opgave aktiveret
351
- failed: Kunne ikke ændre opgave
352
379
  show:
353
380
  back: Tilbage
354
381
  configuration: Konfiguration
@@ -392,3 +419,7 @@ da:
392
419
  task: Opgave
393
420
  never: Aldrig
394
421
  run_now: Kør nu
422
+ toggle:
423
+ disabled: Opgave deaktiveret
424
+ enabled: Opgave aktiveret
425
+ failed: Kunne ikke ændre opgave
@@ -10,6 +10,28 @@ de:
10
10
  pid: PID
11
11
  status: Status
12
12
  title: Aktive Prozesse
13
+ queue_health:
14
+ dead_tuples: Tote Tupel
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Tot
18
+ kind: Art
19
+ last_vacuum: Letztes Vacuum
20
+ live: Aktiv
21
+ table: Tabelle
22
+ kinds:
23
+ archive: Archiv
24
+ queue: Warteschlange
25
+ last_vacuum: Letztes Vacuum
26
+ live: Aktiv
27
+ mvcc_horizon: MVCC-Horizont
28
+ oldest_open_txn: Älteste offene Transaktion
29
+ oldest_vacuum_ago: Ältestes Tabellen-Vacuum
30
+ tables_need_vacuum:
31
+ one: "%{count} Tabelle benötigt Vacuum"
32
+ other: "%{count} Tabellen benötigen Vacuum"
33
+ title: Warteschlangen-Gesundheit
34
+ worst_bloat: Schlimmster Bloat
13
35
  queues_table:
14
36
  empty: Keine Warteschlangen gefunden
15
37
  headers:
@@ -337,6 +359,15 @@ de:
337
359
  resume: Fortsetzen
338
360
  retry: Wiederholen
339
361
  retry_confirm: Sichtbarkeits-Timeout zurücksetzen und erneut versuchen?
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: Tot
366
+ last_vacuum: Letztes Vacuum
367
+ live: Aktiv
368
+ table: Tabelle
369
+ oldest_txn: 'Älteste offene Transaktion:'
370
+ title: Tabellen-Gesundheit
340
371
  total: 'Insgesamt:'
341
372
  visible: 'Sichtbar:'
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ de:
345
376
  one: "%{count} Aufgabe konfiguriert"
346
377
  other: "%{count} Aufgaben konfiguriert"
347
378
  title: Wiederkehrende Aufgaben
348
- toggle:
349
- disabled: Aufgabe deaktiviert
350
- enabled: Aufgabe aktiviert
351
- failed: Aufgabe konnte nicht umgeschaltet werden
352
379
  show:
353
380
  back: Zurück
354
381
  configuration: Konfiguration
@@ -392,3 +419,7 @@ de:
392
419
  task: Aufgabe
393
420
  never: Nie
394
421
  run_now: Jetzt ausführen
422
+ toggle:
423
+ disabled: Aufgabe deaktiviert
424
+ enabled: Aufgabe aktiviert
425
+ failed: Aufgabe konnte nicht umgeschaltet werden
@@ -10,6 +10,28 @@ en:
10
10
  pid: PID
11
11
  status: Status
12
12
  title: Active Processes
13
+ queue_health:
14
+ dead_tuples: Dead Tuples
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Dead
18
+ kind: Kind
19
+ last_vacuum: Last Vacuum
20
+ live: Live
21
+ table: Table
22
+ kinds:
23
+ archive: Archive
24
+ queue: Queue
25
+ last_vacuum: Last Vacuum
26
+ live: Live
27
+ mvcc_horizon: MVCC Horizon
28
+ oldest_open_txn: Oldest open transaction
29
+ oldest_vacuum_ago: Oldest table vacuum
30
+ tables_need_vacuum:
31
+ one: "%{count} table needs vacuum"
32
+ other: "%{count} tables need vacuum"
33
+ title: Queue Health
34
+ worst_bloat: Worst Bloat
13
35
  queues_table:
14
36
  empty: No queues found
15
37
  headers:
@@ -399,6 +421,15 @@ en:
399
421
  resume: Resume
400
422
  retry: Retry
401
423
  retry_confirm: Reset visibility timeout and retry?
424
+ table_health:
425
+ headers:
426
+ bloat: Bloat
427
+ dead: Dead
428
+ last_vacuum: Last Vacuum
429
+ live: Live
430
+ table: Table
431
+ oldest_txn: 'Oldest open transaction:'
432
+ title: Table Health
402
433
  total: 'Total:'
403
434
  visible: 'Visible:'
404
435
  recurring_tasks:
@@ -407,10 +438,6 @@ en:
407
438
  one: "%{count} task configured"
408
439
  other: "%{count} tasks configured"
409
440
  title: Recurring Tasks
410
- toggle:
411
- disabled: Task disabled
412
- enabled: Task enabled
413
- failed: Failed to toggle task
414
441
  show:
415
442
  back: Back
416
443
  configuration: Configuration
@@ -454,3 +481,7 @@ en:
454
481
  task: Task
455
482
  never: Never
456
483
  run_now: Run Now
484
+ toggle:
485
+ disabled: Task disabled
486
+ enabled: Task enabled
487
+ failed: Failed to toggle task
@@ -10,6 +10,28 @@ es:
10
10
  pid: PID
11
11
  status: Estado
12
12
  title: Procesos activos
13
+ queue_health:
14
+ dead_tuples: Tuplas muertas
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Muertas
18
+ kind: Tipo
19
+ last_vacuum: Último Vacuum
20
+ live: Activas
21
+ table: Tabla
22
+ kinds:
23
+ archive: Archivo
24
+ queue: Cola
25
+ last_vacuum: Último Vacuum
26
+ live: Activas
27
+ mvcc_horizon: Horizonte MVCC
28
+ oldest_open_txn: Transacción abierta más antigua
29
+ oldest_vacuum_ago: Vacuum de tabla más antiguo
30
+ tables_need_vacuum:
31
+ one: "%{count} tabla necesita vacuum"
32
+ other: "%{count} tablas necesitan vacuum"
33
+ title: Salud de Colas
34
+ worst_bloat: Peor Bloat
13
35
  queues_table:
14
36
  empty: No se encontraron colas
15
37
  headers:
@@ -337,6 +359,15 @@ es:
337
359
  resume: Reanudar
338
360
  retry: Reintentar
339
361
  retry_confirm: "¿Restablecer tiempo de visibilidad y reintentar?"
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: Muertas
366
+ last_vacuum: Último Vacuum
367
+ live: Activas
368
+ table: Tabla
369
+ oldest_txn: 'Transacción abierta más antigua:'
370
+ title: Salud de Tablas
340
371
  total: 'Total:'
341
372
  visible: 'Visible:'
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ es:
345
376
  one: Tarea %{count} configurada
346
377
  other: Tareas %{count} configuradas
347
378
  title: Tareas recurrentes
348
- toggle:
349
- disabled: Tarea deshabilitada
350
- enabled: Tarea habilitada
351
- failed: No se pudo cambiar la tarea
352
379
  show:
353
380
  back: Atrás
354
381
  configuration: Configuración
@@ -392,3 +419,7 @@ es:
392
419
  task: Tarea
393
420
  never: Nunca
394
421
  run_now: Ejecutar ahora
422
+ toggle:
423
+ disabled: Tarea deshabilitada
424
+ enabled: Tarea habilitada
425
+ failed: No se pudo cambiar la tarea
@@ -10,6 +10,28 @@ fi:
10
10
  pid: PID
11
11
  status: Tila
12
12
  title: Aktiiviset prosessit
13
+ queue_health:
14
+ dead_tuples: Kuolleet tuplat
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Kuolleet
18
+ kind: Tyyppi
19
+ last_vacuum: Viimeisin Vacuum
20
+ live: Elävät
21
+ table: Taulu
22
+ kinds:
23
+ archive: Arkisto
24
+ queue: Jono
25
+ last_vacuum: Viimeisin Vacuum
26
+ live: Elävät
27
+ mvcc_horizon: MVCC-horisontti
28
+ oldest_open_txn: Vanhin avoin transaktio
29
+ oldest_vacuum_ago: Vanhin taulun vacuum
30
+ tables_need_vacuum:
31
+ one: "%{count} taulu tarvitsee vacuum-käsittelyn"
32
+ other: "%{count} taulua tarvitsee vacuum-käsittelyn"
33
+ title: Jonon kunto
34
+ worst_bloat: Pahin Bloat
13
35
  queues_table:
14
36
  empty: Jonot eivät löytyneet
15
37
  headers:
@@ -337,6 +359,15 @@ fi:
337
359
  resume: Jatka
338
360
  retry: Yritä uudelleen
339
361
  retry_confirm: Nollaa näkyvyysaika ja yritä uudelleen?
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: Kuolleet
366
+ last_vacuum: Viimeisin Vacuum
367
+ live: Elävät
368
+ table: Taulu
369
+ oldest_txn: 'Vanhin avoin transaktio:'
370
+ title: Taulun kunto
340
371
  total: 'Yhteensä:'
341
372
  visible: 'Näkyvissä:'
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ fi:
345
376
  one: "%{count} tehtävä määritetty"
346
377
  other: "%{count} tehtävää määritetty"
347
378
  title: Toistuvat tehtävät
348
- toggle:
349
- disabled: Tehtävä poistettu käytöstä
350
- enabled: Tehtävä otettu käyttöön
351
- failed: Tehtävän vaihto epäonnistui
352
379
  show:
353
380
  back: Takaisin
354
381
  configuration: Asetukset
@@ -392,3 +419,7 @@ fi:
392
419
  task: Tehtävä
393
420
  never: Ei koskaan
394
421
  run_now: Suorita nyt
422
+ toggle:
423
+ disabled: Tehtävä poistettu käytöstä
424
+ enabled: Tehtävä otettu käyttöön
425
+ failed: Tehtävän vaihto epäonnistui
@@ -10,6 +10,28 @@ fr:
10
10
  pid: PID
11
11
  status: Statut
12
12
  title: Processus actifs
13
+ queue_health:
14
+ dead_tuples: Tuples mortes
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Mortes
18
+ kind: Type
19
+ last_vacuum: Dernier Vacuum
20
+ live: Actives
21
+ table: Table
22
+ kinds:
23
+ archive: Archive
24
+ queue: File d'attente
25
+ last_vacuum: Dernier Vacuum
26
+ live: Actives
27
+ mvcc_horizon: Horizon MVCC
28
+ oldest_open_txn: Plus ancienne transaction ouverte
29
+ oldest_vacuum_ago: Plus ancien vacuum de table
30
+ tables_need_vacuum:
31
+ one: "%{count} table nécessite un vacuum"
32
+ other: "%{count} tables nécessitent un vacuum"
33
+ title: Santé des files d'attente
34
+ worst_bloat: Pire Bloat
13
35
  queues_table:
14
36
  empty: Aucune file d'attente trouvée
15
37
  headers:
@@ -337,6 +359,15 @@ fr:
337
359
  resume: Reprendre
338
360
  retry: Réessayer
339
361
  retry_confirm: Réinitialiser le délai de visibilité et réessayer ?
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: Mortes
366
+ last_vacuum: Dernier Vacuum
367
+ live: Actives
368
+ table: Table
369
+ oldest_txn: 'Plus ancienne transaction ouverte :'
370
+ title: Santé des tables
340
371
  total: 'Total :'
341
372
  visible: 'Visible :'
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ fr:
345
376
  one: Tâche %{count} configurée
346
377
  other: Tâches %{count} configurées
347
378
  title: Tâches récurrentes
348
- toggle:
349
- disabled: Tâche désactivée
350
- enabled: Tâche activée
351
- failed: Impossible de basculer la tâche
352
379
  show:
353
380
  back: Retour
354
381
  configuration: Configuration
@@ -392,3 +419,7 @@ fr:
392
419
  task: Tâche
393
420
  never: Jamais
394
421
  run_now: Exécuter maintenant
422
+ toggle:
423
+ disabled: Tâche désactivée
424
+ enabled: Tâche activée
425
+ failed: Impossible de basculer la tâche
@@ -10,6 +10,28 @@ it:
10
10
  pid: PID
11
11
  status: Stato
12
12
  title: Processi attivi
13
+ queue_health:
14
+ dead_tuples: Tuple morte
15
+ headers:
16
+ bloat: Bloat
17
+ dead: Morte
18
+ kind: Tipo
19
+ last_vacuum: Ultimo Vacuum
20
+ live: Attive
21
+ table: Tabella
22
+ kinds:
23
+ archive: Archivio
24
+ queue: Coda
25
+ last_vacuum: Ultimo Vacuum
26
+ live: Attive
27
+ mvcc_horizon: Orizzonte MVCC
28
+ oldest_open_txn: Transazione aperta più vecchia
29
+ oldest_vacuum_ago: Vacuum tabella più vecchio
30
+ tables_need_vacuum:
31
+ one: "%{count} tabella necessita di vacuum"
32
+ other: "%{count} tabelle necessitano di vacuum"
33
+ title: Salute delle Code
34
+ worst_bloat: Peggior Bloat
13
35
  queues_table:
14
36
  empty: Nessuna coda trovata
15
37
  headers:
@@ -337,6 +359,15 @@ it:
337
359
  resume: Riprendi
338
360
  retry: Riprova
339
361
  retry_confirm: Reimpostare il timeout di visibilità e riprovare?
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: Morte
366
+ last_vacuum: Ultimo Vacuum
367
+ live: Attive
368
+ table: Tabella
369
+ oldest_txn: 'Transazione aperta più vecchia:'
370
+ title: Salute delle Tabelle
340
371
  total: 'Totale:'
341
372
  visible: 'Visibile:'
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ it:
345
376
  one: "%{count} attività configurata"
346
377
  other: "%{count} attività configurate"
347
378
  title: Attività ricorrenti
348
- toggle:
349
- disabled: Attività disabilitata
350
- enabled: Attività abilitata
351
- failed: Impossibile cambiare lo stato dell'attività
352
379
  show:
353
380
  back: Indietro
354
381
  configuration: Configurazione
@@ -392,3 +419,7 @@ it:
392
419
  task: Attività
393
420
  never: Mai
394
421
  run_now: Esegui ora
422
+ toggle:
423
+ disabled: Attività disabilitata
424
+ enabled: Attività abilitata
425
+ failed: Impossibile cambiare lo stato dell'attività
@@ -10,6 +10,28 @@ ja:
10
10
  pid: PID
11
11
  status: ステータス
12
12
  title: アクティブなプロセス
13
+ queue_health:
14
+ dead_tuples: デッドタプル
15
+ headers:
16
+ bloat: Bloat
17
+ dead: デッド
18
+ kind: 種類
19
+ last_vacuum: 最終Vacuum
20
+ live: ライブ
21
+ table: テーブル
22
+ kinds:
23
+ archive: アーカイブ
24
+ queue: キュー
25
+ last_vacuum: 最終Vacuum
26
+ live: ライブ
27
+ mvcc_horizon: MVCCホライズン
28
+ oldest_open_txn: 最も古い未完了トランザクション
29
+ oldest_vacuum_ago: 最も古いテーブルvacuum
30
+ tables_need_vacuum:
31
+ one: "%{count} テーブルがvacuumを必要としています"
32
+ other: "%{count} テーブルがvacuumを必要としています"
33
+ title: キューの健全性
34
+ worst_bloat: 最悪のBloat
13
35
  queues_table:
14
36
  empty: キューが見つかりません
15
37
  headers:
@@ -337,6 +359,15 @@ ja:
337
359
  resume: 再開
338
360
  retry: リトライ
339
361
  retry_confirm: 可視性タイムアウトをリセットしてリトライしますか?
362
+ table_health:
363
+ headers:
364
+ bloat: Bloat
365
+ dead: デッド
366
+ last_vacuum: 最終Vacuum
367
+ live: ライブ
368
+ table: テーブル
369
+ oldest_txn: '最も古い未完了トランザクション:'
370
+ title: テーブルの健全性
340
371
  total: 合計:
341
372
  visible: 表示中:
342
373
  recurring_tasks:
@@ -345,10 +376,6 @@ ja:
345
376
  one: "%{count} タスクが設定されています"
346
377
  other: "%{count} タスクが設定されています"
347
378
  title: 定期タスク
348
- toggle:
349
- disabled: タスクが無効になりました
350
- enabled: タスクが有効になりました
351
- failed: タスクの切り替えに失敗しました
352
379
  show:
353
380
  back: 戻る
354
381
  configuration: 設定
@@ -392,3 +419,7 @@ ja:
392
419
  task: タスク
393
420
  never: なし
394
421
  run_now: 今すぐ実行
422
+ toggle:
423
+ disabled: タスクが無効になりました
424
+ enabled: タスクが有効になりました
425
+ failed: タスクの切り替えに失敗しました