pgbus 0.17.1 → 0.17.3

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/README.md +83 -13
  4. data/Rakefile +26 -0
  5. data/app/assets/javascripts/pgbus/stream_source_element.js +34 -2
  6. data/app/assets/javascripts/pgbus/stream_source_element.min.js +6 -0
  7. data/app/assets/javascripts/pgbus/stream_source_element.min.js.map +1 -0
  8. data/app/controllers/concerns/pgbus/job_listing.rb +37 -0
  9. data/app/controllers/concerns/pgbus/process_listing.rb +17 -0
  10. data/app/controllers/pgbus/application_controller.rb +5 -2
  11. data/app/controllers/pgbus/batches_controller.rb +4 -1
  12. data/app/controllers/pgbus/dashboard_controller.rb +20 -6
  13. data/app/controllers/pgbus/dead_letter_controller.rb +27 -3
  14. data/app/controllers/pgbus/events_controller.rb +52 -3
  15. data/app/controllers/pgbus/frontends_controller.rb +25 -11
  16. data/app/controllers/pgbus/insights_controller.rb +19 -1
  17. data/app/controllers/pgbus/jobs_controller.rb +45 -26
  18. data/app/controllers/pgbus/locks_controller.rb +7 -2
  19. data/app/controllers/pgbus/outbox_controller.rb +4 -1
  20. data/app/controllers/pgbus/processes_controller.rb +3 -1
  21. data/app/controllers/pgbus/queues_controller.rb +16 -4
  22. data/app/controllers/pgbus/recurring_tasks_controller.rb +5 -7
  23. data/app/frontend/pgbus/application.min.js +2 -0
  24. data/app/frontend/pgbus/application.min.js.map +1 -0
  25. data/app/frontend/pgbus/modules/charts.js +137 -77
  26. data/app/frontend/pgbus/modules/charts.min.js +2 -0
  27. data/app/frontend/pgbus/modules/charts.min.js.map +1 -0
  28. data/app/frontend/pgbus/style.css +1 -1
  29. data/app/frontend/pgbus/tailwind.css +18 -0
  30. data/app/frontend/pgbus/vendor/turbo.min.js +54 -0
  31. data/app/frontend/pgbus/vendor/turbo.min.js.map +1 -0
  32. data/app/helpers/pgbus/application_helper.rb +155 -113
  33. data/app/helpers/pgbus/button_helper.rb +88 -0
  34. data/app/helpers/pgbus/dashboard_helper.rb +157 -0
  35. data/app/helpers/pgbus/events_helper.rb +40 -0
  36. data/app/helpers/pgbus/insights_helper.rb +39 -0
  37. data/app/helpers/pgbus/processes_helper.rb +79 -0
  38. data/app/views/layouts/pgbus/application.html.erb +0 -1
  39. data/app/views/pgbus/batches/_batches_table.html.erb +16 -13
  40. data/app/views/pgbus/batches/show.html.erb +3 -4
  41. data/app/views/pgbus/dashboard/_processes_table.html.erb +11 -11
  42. data/app/views/pgbus/dashboard/_queue_health.html.erb +42 -51
  43. data/app/views/pgbus/dashboard/_queues_table.html.erb +18 -16
  44. data/app/views/pgbus/dashboard/_recent_failures.html.erb +16 -12
  45. data/app/views/pgbus/dashboard/_stats_cards.html.erb +70 -36
  46. data/app/views/pgbus/dashboard/show.html.erb +1 -1
  47. data/app/views/pgbus/dead_letter/_error.html.erb +13 -0
  48. data/app/views/pgbus/dead_letter/_messages_table.html.erb +37 -96
  49. data/app/views/pgbus/dead_letter/_row.html.erb +75 -0
  50. data/app/views/pgbus/dead_letter/index.html.erb +6 -9
  51. data/app/views/pgbus/dead_letter/show.html.erb +37 -21
  52. data/app/views/pgbus/events/_list.html.erb +55 -0
  53. data/app/views/pgbus/events/_processed_table.html.erb +45 -0
  54. data/app/views/pgbus/events/_replay.html.erb +10 -0
  55. data/app/views/pgbus/events/_row.html.erb +162 -0
  56. data/app/views/pgbus/events/_tabs.html.erb +13 -0
  57. data/app/views/pgbus/events/index.html.erb +27 -48
  58. data/app/views/pgbus/events/show.html.erb +25 -7
  59. data/app/views/pgbus/insights/_chart_card.html.erb +21 -0
  60. data/app/views/pgbus/insights/_latency_table.html.erb +20 -0
  61. data/app/views/pgbus/insights/_status_table.html.erb +19 -0
  62. data/app/views/pgbus/insights/_throughput_table.html.erb +18 -0
  63. data/app/views/pgbus/insights/show.html.erb +83 -100
  64. data/app/views/pgbus/jobs/_list.html.erb +64 -0
  65. data/app/views/pgbus/jobs/_row.html.erb +107 -0
  66. data/app/views/pgbus/jobs/_tabs.html.erb +14 -0
  67. data/app/views/pgbus/jobs/index.html.erb +10 -10
  68. data/app/views/pgbus/jobs/show.html.erb +18 -20
  69. data/app/views/pgbus/locks/_concurrency.html.erb +25 -23
  70. data/app/views/pgbus/locks/_uniqueness.html.erb +20 -22
  71. data/app/views/pgbus/outbox/index.html.erb +30 -27
  72. data/app/views/pgbus/processes/_processes_table.html.erb +6 -25
  73. data/app/views/pgbus/processes/_row.html.erb +48 -0
  74. data/app/views/pgbus/processes/_status.html.erb +4 -0
  75. data/app/views/pgbus/queues/_queues_list.html.erb +28 -32
  76. data/app/views/pgbus/queues/show.html.erb +69 -118
  77. data/app/views/pgbus/recurring_tasks/_tasks_table.html.erb +75 -76
  78. data/app/views/pgbus/recurring_tasks/index.html.erb +1 -1
  79. data/app/views/pgbus/recurring_tasks/show.html.erb +45 -51
  80. data/app/views/pgbus/shared/_empty_row.html.erb +2 -0
  81. data/app/views/pgbus/shared/_pager.html.erb +34 -0
  82. data/config/i18n-tasks.yml +11 -2
  83. data/config/locales/da.yml +405 -113
  84. data/config/locales/de.yml +405 -113
  85. data/config/locales/en.yml +405 -113
  86. data/config/locales/es.yml +404 -112
  87. data/config/locales/fi.yml +404 -112
  88. data/config/locales/fr.yml +406 -114
  89. data/config/locales/it.yml +405 -113
  90. data/config/locales/ja.yml +405 -113
  91. data/config/locales/nb.yml +405 -113
  92. data/config/locales/nl.yml +405 -113
  93. data/config/locales/pt.yml +406 -114
  94. data/config/locales/sv.yml +404 -112
  95. data/config/routes.rb +1 -1
  96. data/lib/generators/pgbus/add_presence_generator.rb +2 -1
  97. data/lib/generators/pgbus/add_presence_seats_generator.rb +45 -0
  98. data/lib/generators/pgbus/templates/add_presence.rb.erb +32 -7
  99. data/lib/generators/pgbus/templates/add_presence_seats.rb.erb +38 -0
  100. data/lib/generators/pgbus/templates/initializer.rb.erb +4 -0
  101. data/lib/pgbus/active_job/executor.rb +16 -6
  102. data/lib/pgbus/cli/dlq.rb +32 -5
  103. data/lib/pgbus/client.rb +4 -2
  104. data/lib/pgbus/configuration/presence_settings.rb +103 -0
  105. data/lib/pgbus/configuration.rb +51 -2
  106. data/lib/pgbus/dead_letter_header.rb +129 -0
  107. data/lib/pgbus/doctor.rb +8 -4
  108. data/lib/pgbus/engine.rb +13 -7
  109. data/lib/pgbus/event_bus/handler.rb +18 -11
  110. data/lib/pgbus/event_bus/registry.rb +6 -0
  111. data/lib/pgbus/failed_event_recorder.rb +34 -0
  112. data/lib/pgbus/generators/migration_detector.rb +9 -1
  113. data/lib/pgbus/instrumentation.rb +2 -1
  114. data/lib/pgbus/mcp/base_tool.rb +25 -0
  115. data/lib/pgbus/mcp/tools/concurrency_tool.rb +23 -4
  116. data/lib/pgbus/mcp/tools/dlq_detail_tool.rb +4 -2
  117. data/lib/pgbus/mcp/tools/dlq_tool.rb +10 -4
  118. data/lib/pgbus/mcp/tools/locks_tool.rb +23 -5
  119. data/lib/pgbus/mcp/tools/recurring_tool.rb +33 -4
  120. data/lib/pgbus/outbox/poller.rb +1 -1
  121. data/lib/pgbus/process/consumer.rb +53 -3
  122. data/lib/pgbus/process/dispatcher.rb +1 -1
  123. data/lib/pgbus/process/supervisor.rb +32 -11
  124. data/lib/pgbus/process/worker.rb +45 -8
  125. data/lib/pgbus/recurring/scheduler.rb +2 -1
  126. data/lib/pgbus/streams/presence.rb +317 -81
  127. data/lib/pgbus/version.rb +1 -1
  128. data/lib/pgbus/web/data_source/dashboard_signals.rb +170 -0
  129. data/lib/pgbus/web/data_source/dead_letter.rb +142 -0
  130. data/lib/pgbus/web/data_source/event_list.rb +161 -0
  131. data/lib/pgbus/web/data_source/job_list.rb +323 -0
  132. data/lib/pgbus/web/data_source/list_counts.rb +80 -0
  133. data/lib/pgbus/web/data_source/process_list.rb +69 -0
  134. data/lib/pgbus/web/data_source/queue_summary.rb +122 -0
  135. data/lib/pgbus/web/data_source.rb +132 -254
  136. data/lib/pgbus/web/dead_letter_reason.rb +81 -0
  137. data/lib/pgbus/web/event_state.rb +71 -0
  138. data/lib/pgbus/web/health_app.rb +7 -3
  139. data/lib/pgbus/web/health_verdict.rb +78 -0
  140. data/lib/pgbus/web/insights_charts.rb +84 -0
  141. data/lib/pgbus/web/job_state.rb +111 -0
  142. data/lib/pgbus/web/process_activity.rb +97 -0
  143. data/lib/pgbus/web/process_state.rb +187 -0
  144. data/lib/pgbus/web/queue_summary.rb +104 -0
  145. data/lib/pgbus/web/stream_app.rb +18 -6
  146. data/lib/pgbus/web/streamer/connection.rb +7 -1
  147. data/lib/pgbus/web/streamer/falcon_connection.rb +7 -1
  148. data/lib/pgbus/web/streamer/heartbeat.rb +9 -3
  149. data/lib/pgbus/web/streamer/instance.rb +2 -1
  150. data/lib/pgbus/web/streamer/presence_tracker.rb +155 -0
  151. data/lib/pgbus/web/streamer/stream_event_dispatcher.rb +8 -37
  152. data/lib/pgbus/web/time_format.rb +128 -0
  153. metadata +55 -4
  154. data/app/views/pgbus/events/_pending_table.html.erb +0 -169
  155. data/app/views/pgbus/jobs/_enqueued_table.html.erb +0 -118
  156. data/app/views/pgbus/jobs/_failed_table.html.erb +0 -76
@@ -41,6 +41,7 @@ sv:
41
41
  title: Aktiva processer
42
42
  queue_health:
43
43
  dead_tuples: Döda tuplar
44
+ empty: Inga kötabeller att mäta ännu
44
45
  headers:
45
46
  bloat: Bloat
46
47
  dead: Döda
@@ -60,14 +61,34 @@ sv:
60
61
  one: "%{count} tabell behöver vacuum"
61
62
  other: "%{count} tabeller behöver vacuum"
62
63
  title: Köhälsa
64
+ words:
65
+ bloat:
66
+ critical: "%{ratio} i %{table} — läsningarna blir långsammare; kör vacuum nu (kritiskt över %{critical}, varnar över %{warn})"
67
+ none: Inget att mäta ännu
68
+ ok: "%{ratio} i %{table} — bra (varnar över %{warn}, kritiskt över %{critical})"
69
+ warn: "%{ratio} i %{table} — vacuum behövs (varnar över %{warn}, kritiskt över %{critical})"
70
+ dead_tuples:
71
+ ok: Bra — varnar över %{limit} döda rader
72
+ warn: Över %{limit} — autovacuum ligger efter; tabellen nedan visar var
73
+ transaction:
74
+ critical: Över %{critical} — vacuum kan inte återvinna rader förrän den slutar; hitta den i pg_stat_activity (varnar vid %{warn}; hälsobedömningen försämras efter %{verdict})
75
+ none: Ingen öppen transaktion — vacuum kan återvinna varje död rad (varnar vid %{warn}, larmar vid %{critical}; hälsobedömningen försämras efter %{verdict})
76
+ ok: Bra — varnar vid %{warn}, larmar vid %{critical}; hälsobedömningen försämras efter %{verdict}
77
+ warn: Över %{warn} — en lång transaktion hindrar vacuum från att återvinna rader (larmar vid %{critical}; hälsobedömningen försämras efter %{verdict})
78
+ vacuum:
79
+ critical: Över %{critical} — autovacuum når inte dessa tabeller; kontrollera dess inställningar (varnar efter %{warn})
80
+ ok: Bra — varnar efter %{warn}, kritiskt efter %{critical}
81
+ unknown: Aldrig vacuumad, eller så är statistiken otillgänglig
82
+ warn: Över %{warn} — autovacuum kan ligga efter (kritiskt efter %{critical})
63
83
  worst_bloat: Värsta Bloat
64
84
  queues_table:
65
85
  empty: Inga köer hittades
66
86
  headers:
67
87
  depth: Djup
68
- oldest_claimable: Äldsta tillgänglig (s)
88
+ oldest_claimable: Äldsta tillgänglig
69
89
  parked: Parkerade
70
90
  queue: Kö
91
+ status: Status
71
92
  total: Totalt
72
93
  visible: Synliga
73
94
  title: Köer
@@ -75,7 +96,9 @@ sv:
75
96
  recent_failures:
76
97
  empty: Inga fel
77
98
  headers:
99
+ attempt: Försök
78
100
  error: Fel
101
+ job: Jobb
79
102
  queue: Kö
80
103
  when: När
81
104
  title: Senaste fel
@@ -83,19 +106,72 @@ sv:
83
106
  show:
84
107
  title: Instrumentpanel
85
108
  stats_cards:
109
+ dead_lettered: Dead-lettered
110
+ dlq_newest_html: 'senaste: %{error_class} i %{job} %{ago}'
111
+ dlq_newest_legacy_html: 'senaste: %{job} %{ago} — ingen orsak registrerad'
112
+ dlq_newest_no_error_html: 'senaste: %{job} %{ago} — inget fel registrerat'
113
+ dlq_none: Inget dead-lettered
114
+ dlq_see_why: öppna dead letter-sidan för att se varför varje jobb dog
86
115
  enqueued: Inlagda
87
- failed_dlq: Misslyckade / DLQ
88
- failed_dlq_labels: Misslyckade / Dead Lettered
116
+ enqueued_detail: "%{claimable} hämtbara nu · %{waiting} schemalagda, pågående eller nytt försök"
117
+ enqueued_paused:
118
+ one: "%{count} i pausade köer"
119
+ other: "%{count} i pausade köer"
89
120
  parked_jobs: Parkerade jobb
90
121
  parked_jobs_oldest: äldst %{age}
91
122
  processes: Processer
123
+ processes_detail: "%{healthy} friska · %{stalled} fastnade · %{stale} inaktuella"
124
+ processes_none: Inget körs — inget jobb hämtas
125
+ processes_stale: inaktuella processer har slutat skicka hjärtslag; deras pågående jobb körs igen när deras visibility timeout löper ut
92
126
  queues: Köer
127
+ queues_detail: "%{paused} pausade · %{dlq} dead-letter"
128
+ queues_undrained:
129
+ one: "%{count} innehåller jobb som inget tömmer"
130
+ other: "%{count} innehåller jobb som inget tömmer"
93
131
  recurring: Återkommande
132
+ recurring_detail: Uppgifter som schemaläggaren lägger i kö enligt sitt schema
133
+ retrying: Nytt försök
134
+ retrying_due:
135
+ one: "%{count} förfaller nu"
136
+ other: "%{count} förfaller nu"
137
+ retrying_newest: senaste fel %{error_class}
138
+ retrying_next_html: nästa försök %{time}
139
+ retrying_none: Inget görs om
94
140
  throughput: Genomströmning
95
- throughput_unit: meddelanden/s
96
- view_tasks: Visa uppgifter
97
- visible: synliga
141
+ throughput_detail: jobb/min under de senaste %{minutes} min
142
+ throughput_unavailable: kräver jobbstatistik (rails g pgbus:add_job_stats)
143
+ verdict:
144
+ links:
145
+ dlq: Dead letters
146
+ processes: Processer
147
+ look_at: 'Titta på:'
148
+ meaning:
149
+ degraded: Något behöver uppmärksamhet, men jobb flödar fortfarande. /readyz svarar fortfarande ready.
150
+ ok: Varje kö med arbete töms och varje process skickar hjärtslag. /readyz svarar ready.
151
+ stalled: Jobb väntar och inget hämtar dem. /readyz svarar not ready (503).
152
+ statuses:
153
+ degraded: DEGRADED
154
+ ok: OK
155
+ stalled: STALLED
156
+ title: 'Hälsa: %{status}'
157
+ unavailable: Hälsobedömning otillgänglig — kontrollerna bakom den kunde inte läsas; se loggen
98
158
  dead_letter:
159
+ detail:
160
+ backtrace: Backtrace (första raderna)
161
+ died: 'Dog:'
162
+ dlq: 'Dead letter-kö:'
163
+ error_from_attempt: Fel från försök %{attempt}; försök %{from}–%{to} registrerade inget fel.
164
+ source: 'Flyttad av:'
165
+ sources:
166
+ consumer: händelsekonsument
167
+ worker: jobb-worker
168
+ why: Varför den dog
169
+ filters:
170
+ all: Alla
171
+ clear_error_class: Rensa filter
172
+ error_class: 'Fel: %{error_class}'
173
+ filter_error_class: Visa bara %{error_class}
174
+ label: Filtrera dead letters
99
175
  index:
100
176
  discard_all: Kassera alla
101
177
  discard_all_confirm: Kassera permanent alla DLQ-meddelanden?
@@ -115,10 +191,12 @@ sv:
115
191
  empty: Dead letter-kön är tom
116
192
  full_json_payload: Fullständig JSON-payload
117
193
  headers:
118
- enqueued: Inlagda
194
+ actions: Åtgärder
195
+ attempts: Försök
196
+ died: Dog
119
197
  id: ID
120
- job_class: Jobbklass
121
- reads: Läser
198
+ job: Jobb
199
+ reason: Orsak
122
200
  source_queue: Källkö
123
201
  headers_section: Rubriker
124
202
  job_id: 'Jobb-ID:'
@@ -131,6 +209,16 @@ sv:
131
209
  visible_at: 'Synlig vid:'
132
210
  retry: Försök igen
133
211
  total_label: meddelanden i dead letter-kö
212
+ view: Visa
213
+ reasons:
214
+ error_earlier_attempt_html: 'Omförsök förbrukade. Senast registrerade fel, från försök %{error_attempt}: %{error_class}: %{error_message}'
215
+ error_html: 'Omförsök förbrukade. Senaste fel: %{error_class}: %{error_message}'
216
+ event_no_error_html: Hanteraren misslyckades vid %{attempts} leveranser (max %{max}) — inget hanterarfel registrerades
217
+ no_error_recorded_html: Överskred %{max} omförsök efter %{attempts} läsningar — inget fel registrerades; varje misslyckat försök kraschade innan det kunde rapportera
218
+ not_recorded_html: Orsak inte registrerad (flyttad till DLQ före pgbus %{version})
219
+ retried_before:
220
+ one: Omförsökt från DLQ en gång tidigare.
221
+ other: Omförsökt från DLQ %{count} gånger tidigare.
134
222
  show:
135
223
  back: Tillbaka till DLQ
136
224
  context: Kontext
@@ -138,8 +226,10 @@ sv:
138
226
  discard_confirm: Kassera permanent?
139
227
  headers: Rubriker
140
228
  labels:
229
+ attempts: Försök
230
+ died: Dog
231
+ dlq: Dead letter-kö
141
232
  enqueued_at: Inlagd den
142
- read_count: Antal läsningar
143
233
  source_queue: Källkö
144
234
  visibility_timeout: Synlighetstidsgräns
145
235
  not_found: Meddelande hittades inte
@@ -163,6 +253,7 @@ sv:
163
253
  mark_handled_failed: Kunde inte markera händelsen som hanterad.
164
254
  marked_handled: Händelse markerad som hanterad.
165
255
  none_selected: Inga händelser valda.
256
+ payload_redacted: 'Inte sparat: payloaden innehåller fortfarande maskerade ([FILTERED]) värden som skulle ersätta de riktiga.'
166
257
  payload_update_failed: Kunde inte uppdatera payload. Kontrollera att JSON är giltig.
167
258
  payload_updated: Payload uppdaterad och händelsen återköad.
168
259
  replay_failed: Händelsen hittades inte eller kunde inte spelas upp.
@@ -170,56 +261,118 @@ sv:
170
261
  reroute_failed: Kunde inte omdirigera händelsen.
171
262
  rerouted: Händelsen omdirigerades till målhanteraren.
172
263
  index:
173
- discard_selected: Kassera valda
174
- discard_selected_confirm: Kassera valda händelser?
175
- pending_empty: Inga väntande händelser
176
- pending_headers:
177
- enqueued: Köad
178
- handler_queue: Handler-kö
179
- id: ID
180
- reads: Läsningar
181
- routing_key: Routing-nyckel
182
264
  pending_title: Väntande händelser
183
- processed_empty: Inga händelser behandlade än
184
- processed_headers:
185
- event_id: Händelse-ID
186
- handler: Hanterare
187
- processed_at: Behandlad den
188
265
  processed_title: Behandlade händelser
266
+ subscribers:
267
+ covered: Hanteras av en körande consumer
268
+ uncovered: Ingen körande consumer täcker det här mönstret
269
+ unknown: Consumer-täckning okänd
270
+ view_pending: Visa väntande
189
271
  subscribers_empty: Inga registrerade prenumeranter
190
272
  subscribers_headers:
273
+ consumer: Consumer
191
274
  handler: Hanterare
192
275
  pattern: Mönster
276
+ pending: Väntande
193
277
  queue: Kö
194
278
  subscribers_title: Registrerade prenumeranter
195
279
  title: Händelser
196
- pending_table:
197
- arguments: Payload
280
+ list:
198
281
  context: Kontext
199
282
  discard: Kassera
200
283
  discard_confirm: Kassera denna händelse? Den kommer att arkiveras.
284
+ discard_failure_confirm: Kassera den här misslyckade händelsen? Dess meddelande finns inte längre i kön.
285
+ discard_selected: Kassera valda
286
+ discard_selected_confirm: Kassera valda händelser?
201
287
  edit_payload: Redigera & Försök igen
202
288
  edit_payload_confirm: Uppdatera payload och återköa denna händelse?
203
289
  edit_payload_label: 'JSON Payload:'
290
+ empty:
291
+ all: Inga väntande händelser
292
+ ready: Inga händelser väntar på att hanteras
293
+ retrying: Inga händelser väntar på nytt försök
294
+ running: Inga händelser hanteras
295
+ scheduled: Inga schemalagda händelser
204
296
  event_id: 'Händelse-ID:'
205
297
  full_json_payload: Fullständig JSON Payload
298
+ headers:
299
+ actions: Åtgärder
300
+ attempts: Försök
301
+ event: Händelse
302
+ handler: Hanterare
303
+ id: ID
304
+ reason: Nästa körning / Orsak
305
+ state: Status
206
306
  headers_section: Headers
207
307
  mark_handled: Markera som hanterad
208
- mark_handled_confirm: Markera denna händelse som hanterad? Den kommer att arkiveras och hoppas över vid uppspelning.
308
+ mark_handled_confirm: Markera den här händelsen som hanterad? Meddelandet arkiveras och hanteraren kör den inte.
209
309
  metadata: Metadata
210
310
  metadata_labels:
311
+ enqueued: 'Köad:'
211
312
  last_read: 'Senast läst:'
313
+ published: 'Publicerad:'
212
314
  read_count: 'Läsantal:'
213
315
  visible_at: 'Synlig vid:'
316
+ payload: Payload
317
+ reasons:
318
+ handling_html: Hanteras av %{handler} — hämtad %{ago} · lease går ut %{time}
319
+ lease_expired_html: Lease har gått ut (consumern dog troligen) — levereras igen till %{handler}, försök %{attempt}
320
+ no_consumer_for_queue_html: Ingen körande consumer prenumererar på %{pattern} (%{handler})
321
+ no_consumers_html: Ingen frisk consumer körs
322
+ orphaned_html: Misslyckades med %{error} i %{handler} — meddelandet finns inte längre i kön
323
+ paused_html: Kön är pausad
324
+ retrying_dlq_html: "%{handler} försök %{attempt}/%{max} misslyckades: %{error} — nästa läsning flyttar den till DLQ"
325
+ retrying_due_html: "%{handler} försök %{attempt}/%{max} misslyckades: %{error} — nästa försök nu"
326
+ retrying_html: "%{handler} försök %{attempt}/%{max} misslyckades: %{error} — nästa försök %{time}"
327
+ scheduled_html: Schemalagd — hanteras av %{handler} %{time}
328
+ waiting_html: 'Väntar — %{count} före · nästa: %{handler}'
329
+ waiting_unknown_html: Väntar på %{handler}
214
330
  reroute: Omdirigera
215
331
  reroute_confirm: Omdirigera denna händelse till en annan hanterare?
216
332
  reroute_label: 'Målhanterare:'
333
+ states:
334
+ ready: Redo
335
+ retrying: Försöker igen
336
+ running: Hanteras
337
+ scheduled: Schemalagd
338
+ tabs:
339
+ all: Alla
340
+ ready: Redo
341
+ retrying: Försöker igen
342
+ running: Hanteras
343
+ scheduled: Schemalagda
344
+ tabs_label: Händelsetillstånd
345
+ view_failure: Visa fel
346
+ processed:
347
+ empty: Inga händelser behandlade än
348
+ headers:
349
+ actions: Åtgärder
350
+ event_id: Händelse-ID
351
+ handler: Hanterare
352
+ reason: Orsak
353
+ state: Status
354
+ reasons:
355
+ abandoned_html: Claimen tystnade %{ago} — nästa leverans kör hanteraren igen
356
+ completed_html: Klar %{ago}
357
+ completed_legacy_html: Registrerad %{ago} (enfas-claim; uppgradera med pgbus:add_processed_event_completion)
358
+ handling_html: Hanteras — claim förnyad %{ago}
359
+ replay: Spela upp igen
360
+ replay_confirm: Leverera den här händelsen till sin hanterare igen med ett nytt händelse-ID? Hanteraren körs igen.
361
+ replay_unavailable:
362
+ no_handler: Hanteraren är inte längre registrerad
363
+ not_archived: Finns inte längre i arkivet
364
+ states:
365
+ abandoned: Tyst
366
+ completed: Klar
367
+ handling: Hanteras
217
368
  show:
218
369
  back: Tillbaka till händelser
219
370
  labels:
371
+ completed_at: Klar
220
372
  event_id: Händelse-ID
221
373
  handler: Hanterare
222
374
  processed_at: Behandlad den
375
+ state: Tillstånd
223
376
  not_found: Händelse hittades inte
224
377
  title: Händelse %{event_id}
225
378
  helpers:
@@ -231,6 +384,7 @@ sv:
231
384
  bulk_select_row: Markera %{id}
232
385
  bulk_selected: valda
233
386
  pagination:
387
+ label: Sidnumrering
234
388
  next: Nästa
235
389
  previous: Föregående
236
390
  showing: Visar %{from}–%{to} av %{total}
@@ -245,24 +399,50 @@ sv:
245
399
  healthy: Hälsosam
246
400
  stale: Föråldrad
247
401
  stalled: Fastlåst
402
+ time:
403
+ absolute_format: "%Y-%m-%d %H:%M:%S %Z"
404
+ clock_format: "%H:%M"
405
+ future: om %{distance}
406
+ now: nu
407
+ past: för %{distance} sedan
408
+ range:
409
+ days:
410
+ one: "%{count} dag"
411
+ other: "%{count} dagar"
412
+ hours:
413
+ one: "%{count} timme"
414
+ other: "%{count} timmar"
415
+ minutes:
416
+ one: "%{count} minut"
417
+ other: "%{count} minuter"
418
+ units:
419
+ days: "%{count}d"
420
+ hours: "%{count}t"
421
+ milliseconds: "%{count}ms"
422
+ minutes: "%{count}m"
423
+ seconds: "%{count}s"
248
424
  insights:
249
425
  show:
250
426
  charts:
251
- failed_to_load: Misslyckades att ladda diagramdata
252
- latency: Köfördröjning (ms)
427
+ captions:
428
+ latency: Jobben väntade i genomsnitt %{avg} innan en worker hämtade dem, p95 %{p95}
429
+ status: "%{success} lyckades, %{failed} misslyckades, %{dead_lettered} dead-lettered"
430
+ throughput_html: "%{total} jobb under de senaste %{range}, topp %{peak} jobb/min %{at}"
431
+ data_table: Datatabell
432
+ latency: Köfördröjning
253
433
  latency_avg: Genomsnitt
254
434
  latency_p95: P95
255
435
  no_data: Inga data än
256
436
  series_name: Jobb/min
257
437
  status_distribution: Statusfördelning
258
- throughput: Genomströmning (jobb/min)
438
+ throughput: Genomströmning
259
439
  description_html: Jobbprestandamått för de senaste %{range}
260
440
  latency_by_queue:
261
441
  empty: Ingen fördröjningsdata än
262
442
  headers:
263
- avg: Genomsnitt (ms)
443
+ avg: Genomsnitt
264
444
  count: Antal
265
- p95: P95 (ms)
445
+ p95: P95
266
446
  queue: Kö
267
447
  title: Fördröjning per kö
268
448
  live_streams:
@@ -282,6 +462,10 @@ sv:
282
462
  job_class: Jobbklass
283
463
  max: Max
284
464
  title: Långsammaste jobbklasser (genomsnittlig varaktighet)
465
+ statuses:
466
+ dead_lettered: Dead-lettered
467
+ failed: Misslyckades
468
+ success: Lyckades
285
469
  streams:
286
470
  summary:
287
471
  active: Aktiv
@@ -310,6 +494,20 @@ sv:
310
494
  p99_latency: P99-fördröjning
311
495
  succeeded: Lyckades
312
496
  total_jobs: Totalt antal jobb
497
+ tables:
498
+ captions:
499
+ latency_minute: Köfördröjning per minut
500
+ latency_step: Köfördröjning per %{step}
501
+ status: Jobb per slutstatus
502
+ throughput_minute: Jobb per minut
503
+ throughput_step: Jobb per %{step}
504
+ headers:
505
+ avg: Genomsnitt
506
+ from: Från
507
+ highest_p95: Högsta p95
508
+ jobs: Jobb
509
+ share: Andel
510
+ status: Status
313
511
  time_ranges:
314
512
  1h: 1h
315
513
  24h: 24h
@@ -317,60 +515,87 @@ sv:
317
515
  7d: 7d
318
516
  title: Insikter
319
517
  jobs:
320
- enqueued_table:
518
+ index:
519
+ discard_all: Kassera alla
520
+ discard_all_confirm: Kassera alla misslyckade jobb?
521
+ discard_all_enqueued_notice: Kasserade %{count} köade jobb och frigjorde deras lås.
522
+ discard_selected: Kassera valda
523
+ discard_selected_confirm: Kassera valda objekt?
524
+ discarded_selected:
525
+ one: Kasserade 1 valt objekt.
526
+ other: Kasserade %{count} valda objekt.
527
+ none_selected: Inga objekt valda.
528
+ retry_all: Försök igen alla
529
+ retry_all_confirm: Försök igen alla misslyckade jobb?
530
+ title: Jobb
531
+ list:
321
532
  arguments: Argument
322
533
  discard: Kassera
323
- discard_all: Kassera alla
324
- discard_all_confirm: Kassera alla köade jobb och frigör deras lås? Detta kan inte ångras.
325
- discard_confirm: Kassera detta meddelande?
326
- empty: Inga köade jobb
534
+ discard_all_enqueued: Kasta alla köade
535
+ discard_all_enqueued_confirm: Kassera alla köade jobb och frigör deras lås? Detta kan inte ångras.
536
+ discard_confirm: Kassera detta jobb?
537
+ empty:
538
+ all: Inga jobb
539
+ blocked: Inga jobb blockerade av en samtidighetsgräns
540
+ ready: Inga jobb väntar på att köras
541
+ retrying: Inga jobb väntar på nytt försök
542
+ running: Inga jobb körs
543
+ scheduled: Inga schemalagda jobb
327
544
  full_json_payload: Fullständig JSON-payload
328
545
  headers:
329
- enqueued: Köade
546
+ actions: Åtgärder
547
+ attempts: Försök
330
548
  id: ID
331
- job_class: Jobbklass
549
+ job: Jobb
332
550
  queue: Kö
333
- reads: Läser
551
+ reason: Nästa körning / Orsak
552
+ state: Status
334
553
  headers_section: Headers
335
554
  job_id: 'Jobb-ID:'
336
555
  metadata: Metadata
337
556
  metadata_labels:
557
+ concurrency_key: 'Samtidighetsnyckel:'
558
+ enqueued: 'Köad:'
338
559
  last_read: 'Senast läst:'
339
560
  locale: 'Språk:'
340
561
  priority: 'Prioritet:'
341
- queue: 'Kö:'
342
562
  scheduled: 'Schemalagt:'
343
563
  timezone: 'Tidszon:'
344
564
  visible_at: 'Synlig vid:'
565
+ reasons:
566
+ blocked_html: Väntar på en samtidighetsplats för %{key} (upptagna %{held}/%{limit}) · parkerad %{ago}
567
+ blocked_no_slots_html: Väntar på en samtidighetsplats för %{key} · parkerad %{ago}
568
+ lease_expired_html: Lease har gått ut (workern dog troligen) — levereras igen, försök %{attempt}
569
+ no_workers_html: Ingen frisk worker körs
570
+ not_drained_html: Ingen worker tömmer den här kön
571
+ orphaned_html: Misslyckades med %{error} — meddelandet finns inte längre i kön
572
+ paused_html: Kön är pausad
573
+ retrying_dlq_html: 'Försök %{attempt}/%{max} misslyckades: %{error} — nästa läsning flyttar den till DLQ'
574
+ retrying_due_html: 'Försök %{attempt}/%{max} misslyckades: %{error} — nästa försök nu'
575
+ retrying_html: 'Försök %{attempt}/%{max} misslyckades: %{error} — nästa försök %{time}'
576
+ running_html: Hämtad %{ago} · lease går ut %{time}
577
+ scheduled_html: Schemalagd — körs %{time}
578
+ waiting_html: Väntar — %{count} före
579
+ waiting_priority_html: Väntar — %{count} före med den här prioriteten
580
+ waiting_unknown_html: Väntar på att hämtas
345
581
  retry: Försök igen
346
582
  retry_confirm: Återställ synlighetstimeout och försök igen?
347
- title: Köade jobb
348
- failed_table:
349
- discard: Kassera
350
- discard_confirm: Kassera detta jobb?
351
- empty: Inga misslyckade jobb
352
- headers:
353
- actions: Åtgärder
354
- error: Fel
355
- failed: Misslyckades
356
- id: ID
357
- queue: Kö
358
- retries: Försök igen
359
- retry: Försök igen
360
- title: Misslyckade jobb
361
- index:
362
- discard_all: Kassera alla
363
- discard_all_confirm: Kassera alla misslyckade jobb?
364
- discard_all_enqueued_notice: Kasserade %{count} köade jobb och frigjorde deras lås.
365
- discard_selected: Kassera valda
366
- discard_selected_confirm: Kassera valda objekt?
367
- discarded_selected:
368
- one: Kasserade 1 valt objekt.
369
- other: Kasserade %{count} valda objekt.
370
- none_selected: Inga objekt valda.
371
- retry_all: Försök igen alla
372
- retry_all_confirm: Försök igen alla misslyckade jobb?
373
- title: Jobb
583
+ states:
584
+ blocked: Blockerad
585
+ ready: Redo
586
+ retrying: Försöker igen
587
+ running: Körs
588
+ scheduled: Schemalagd
589
+ tabs:
590
+ all: Alla
591
+ blocked: Blockerade
592
+ ready: Redo
593
+ retrying: Försöker igen
594
+ running: Körs
595
+ scheduled: Schemalagda
596
+ tabs_label: Jobbstatus
597
+ view_failure: Visa fel
598
+ view_locks: Visa lås
374
599
  show:
375
600
  back: Tillbaka till jobb
376
601
  backtrace: Backtrace
@@ -423,6 +648,7 @@ sv:
423
648
  other: Kasta de %{count} jobb som parkerats bakom denna nyckel? De kommer aldrig att köras.
424
649
  empty: Inga samtidighetsnycklar används
425
650
  headers:
651
+ actions: Åtgärder
426
652
  in_use: Används
427
653
  key: Nyckel
428
654
  lease: Lås
@@ -456,6 +682,7 @@ sv:
456
682
  discard_selected_confirm: Kassera valda lås?
457
683
  empty: Inga aktiva lås
458
684
  headers:
685
+ actions: Åtgärder
459
686
  age: Ålder
460
687
  lock_key: Låsningsnyckel
461
688
  msg_id: Meddelande-ID
@@ -483,8 +710,6 @@ sv:
483
710
  pending: Väntande
484
711
  published: Publicerad
485
712
  stats:
486
- no_age: "—"
487
- oldest_age: "%{seconds}s"
488
713
  oldest_unpublished: Äldsta opublicerade
489
714
  total: Totalt
490
715
  unpublished: Opublicerad
@@ -493,18 +718,76 @@ sv:
493
718
  index:
494
719
  title: Processer
495
720
  processes_table:
721
+ capsule: kapsel %{capsule} · process %{process}
496
722
  empty: Inga processer körs
497
723
  headers:
498
- hostname: Värdnamn
499
- kind: Typ
500
- last_heartbeat: Senaste hjärtslag
501
- metadata: Metadata
502
- pid: PID
724
+ activity: Aktivitet
725
+ heartbeat: Hjärtslag
726
+ process: Process
727
+ recycle: Återvinning
503
728
  status: Status
504
- rates:
505
- dequeued: hämtade
506
- failed: misslyckade
507
- processed: bearbetade
729
+ no_raw_metadata: Inga andra metadata
730
+ raw_metadata: Andra metadata
731
+ started: Startad
732
+ under_supervisor: under supervisor %{pid}
733
+ uptime: uppe %{duration}
734
+ state:
735
+ activity:
736
+ buffered: "%{number} i buffert"
737
+ busy_slots: "%{busy}/%{capacity} platser upptagna"
738
+ busy_threads: "%{busy}/%{capacity} trådar upptagna"
739
+ consumes: Konsumerar %{topics}
740
+ drains: Tömmer %{queues}
741
+ drains_all: Tömmer alla köer
742
+ failed_rate: "%{rate} misslyckade/s"
743
+ handled: "%{number} hanterade"
744
+ maintenance: Kör underhåll var %{interval} (schemalagda jobb, döda processer, arkiv)
745
+ outbox: Publicerar outbox-poster
746
+ rate: "%{rate} jobb/s"
747
+ schedule:
748
+ one: Kör %{count} återkommande uppgift, kontrollerar var %{interval}
749
+ other: Kör %{count} återkommande uppgifter, kontrollerar var %{interval}
750
+ slots:
751
+ one: "%{count} plats"
752
+ other: "%{count} platser"
753
+ supervises: Övervakar %{children}
754
+ supervises_none: Övervakar inga processer på den här värden
755
+ threads:
756
+ one: "%{count} tråd"
757
+ other: "%{count} trådar"
758
+ kinds:
759
+ consumer:
760
+ one: "%{count} consumer"
761
+ other: "%{count} consumers"
762
+ dispatcher:
763
+ one: dispatcher
764
+ other: "%{count} dispatchers"
765
+ outbox_poller:
766
+ one: outbox-poller
767
+ other: "%{count} outbox-pollers"
768
+ scheduler:
769
+ one: schemaläggare
770
+ other: "%{count} schemaläggare"
771
+ worker:
772
+ one: "%{count} worker"
773
+ other: "%{count} workers"
774
+ next:
775
+ stale_reaped: troligen död; tas bort vid dispatcherns nästa städning (inom %{within})
776
+ stale_unreaped: troligen död; ingen levande dispatcher som kan ta bort den
777
+ stalled_maintenance: schemalagda jobb, städning av döda processer och arkivkomprimering står still
778
+ stalled_schedule: återkommande uppgifter läggs inte i kö
779
+ stalled_standalone: ingen supervisor som kan starta om den
780
+ stalled_supervised: supervisorns watchdog startar om den
781
+ reasons:
782
+ healthy_detection_off_html: Hjärtslag %{ago} (gräns %{limit}) · stoppdetektering av
783
+ healthy_heartbeat_html: Hjärtslag %{ago} (gräns %{limit})
784
+ healthy_loop_html: Loopen tickade %{ago} (gräns %{limit})
785
+ stale_html: Inget hjärtslag på %{age} (gräns %{limit})
786
+ stalled_html: Loopen tickade senast %{ago} (gräns %{limit})
787
+ recycle:
788
+ jobs: "%{done} / %{limit} jobb"
789
+ lifetime: uppe %{uptime} / %{limit}
790
+ memory: "%{used} / %{limit} MB"
508
791
  queues:
509
792
  destroy:
510
793
  success: Kön %{name} borttagen.
@@ -517,59 +800,70 @@ sv:
517
800
  headers:
518
801
  actions: Åtgärder
519
802
  depth: Djup
520
- newest: Nyaste (s)
521
- oldest_claimable: Äldsta tillgänglig (s)
803
+ newest: Nyaste
804
+ oldest_claimable: Äldsta tillgänglig
522
805
  parked: Parkerade
523
806
  queue: Kö
524
807
  total_ever: Totalt någonsin
525
808
  visible: Synliga
526
809
  pause: Pausa
527
810
  pause_confirm: Pausa bearbetning för %{name}?
528
- paused: Pausad
529
811
  purge: Rensa
530
812
  purge_confirm: Rensa alla meddelanden från %{name}?
531
813
  resume: Återuppta
532
814
  show:
533
- arguments: Argument
534
815
  back: Tillbaka till köer
535
816
  delete_confirm: Ta bort denna kö permanent? Detta kan inte ångras.
536
817
  delete_queue: Ta bort kö
537
- depth: 'Djup:'
538
- discard: Kassera
539
- discard_confirm: Kassera detta meddelande?
540
- empty: Kön är tom
541
- full_json_payload: Fullständig JSON-payload
542
- headers:
543
- enqueued: Inlagd
544
- id: ID
545
- job_class: Jobbklass
546
- reads: Läsningar
547
- vt: VT
548
- headers_section: Headers
549
- job_id: 'Jobb-ID:'
818
+ dlq_link: Försök igen eller kassera dem på Dead Letter-sidan
819
+ dlq_pointer:
820
+ one: Dead letter-kö för %{logical} — %{count} meddelande.
821
+ other: Dead letter-kö för %{logical} — %{count} meddelanden.
550
822
  message_discard_failed: Kunde inte kassera meddelandet.
551
823
  message_discarded: Meddelande kasserat.
552
824
  message_retried: Meddelandets synlighet återställd.
553
825
  message_retry_failed: Kunde inte försöka igen med meddelandet.
554
- metadata: Metadata
555
- metadata_labels:
556
- last_read: 'Senast läst:'
557
- locale: 'Språk:'
558
- priority: 'Prioritet:'
559
- queue: 'Kö:'
560
- scheduled: 'Schemalagt:'
561
- timezone: 'Tidszon:'
562
- visible_at: 'Synlig vid:'
563
- oldest: 'Äldsta:'
564
- oldest_claimable: 'Äldsta tillgänglig:'
565
- parked: 'Parkerade:'
826
+ metrics:
827
+ claimable: Hämtbara nu
828
+ depth: Djup
829
+ oldest: Äldsta
830
+ oldest_claimable: Äldsta hämtbara
831
+ parked: Parkerade
832
+ total: Totalt hittills
833
+ other_levels: 'Andra prioritetsnivåer:'
566
834
  pause: Pausa
567
835
  pause_confirm: Pausa bearbetning?
568
836
  purge_confirm: Rensa alla meddelanden?
569
837
  purge_queue: Rensa kö
570
838
  resume: Återuppta
571
- retry: Försök igen
572
- retry_confirm: Återställ synlighetstimeout och försök igen?
839
+ summary:
840
+ backlog_html: "%{visible} hämtbara nu, äldsta har väntat %{age} · %{parked} parkerade (schemalagda eller nytt försök)"
841
+ backlog_parked_only_html: Inget hämtbart nu · %{parked} parkerade (schemalagda eller nytt försök)
842
+ dlq_html: 'Dead letter-kö för %{logical}: jobb hamnar här efter %{max} misslyckade försök'
843
+ drained_by_html:
844
+ one: Töms av %{capsules} (%{count} frisk worker)
845
+ other: Töms av %{capsules} (%{count} friska workers)
846
+ drained_live_html:
847
+ one: Töms av %{count} frisk worker som lyssnar på den här kön
848
+ other: Töms av %{count} friska workers som lyssnar på den här kön
849
+ drained_wildcard_html:
850
+ one: Töms av en jokertecken-worker-kapsel (%{count} frisk worker)
851
+ other: Töms av en jokertecken-worker-kapsel (%{count} friska workers)
852
+ empty_html: Inget väntar
853
+ handler_html: Händelsehanterarkö — töms av consumers (%{count} friska)
854
+ no_consumers_html:
855
+ one: Händelsehanterarkö utan frisk consumer — %{count} händelse väntar
856
+ other: Händelsehanterarkö utan frisk consumer — %{count} händelser väntar
857
+ no_workers_html:
858
+ one: Ingen frisk worker körs — %{count} jobb är hämtbart men inget hämtar det
859
+ other: Ingen frisk worker körs — %{count} jobb är hämtbara men inget hämtar dem
860
+ not_drained_html: Ingen worker-kapsel tömmer den här kön — jobb väntar tills en är konfigurerad
861
+ paused_circuit_breaker_html: 'Automatiskt pausad %{ago} efter %{failures} fel i rad — återupptas %{time} (utlösning #%{trip})'
862
+ paused_operator_html: Pausad %{ago} — %{reason}
863
+ paused_operator_no_reason_html: Pausad %{ago} av en operatör
864
+ priority_level_html: Prioritetsnivå %{level} av %{logical}
865
+ stream_html: Stream-kö — levereras med peek, töms inte av workers
866
+ summary_label: Kööversikt
573
867
  table_health:
574
868
  headers:
575
869
  bloat: Bloat
@@ -579,8 +873,6 @@ sv:
579
873
  table: Tabell
580
874
  oldest_txn: 'Äldsta öppna transaktion:'
581
875
  title: Tabellhälsa
582
- total: 'Totalt:'
583
- visible: 'Synliga:'
584
876
  recurring_tasks:
585
877
  index:
586
878
  task_count: