pgbus 0.19.4 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +96 -7
  4. data/Rakefile +6 -1
  5. data/app/controllers/pgbus/dashboard_controller.rb +2 -0
  6. data/app/controllers/pgbus/workflow_definitions_controller.rb +28 -0
  7. data/app/controllers/pgbus/workflows_controller.rb +197 -0
  8. data/app/frontend/pgbus/modules/charts.js +130 -4
  9. data/app/frontend/pgbus/modules/charts.min.js +1 -1
  10. data/app/frontend/pgbus/modules/charts.min.js.map +1 -1
  11. data/app/frontend/pgbus/style.css +1 -1
  12. data/app/helpers/pgbus/button_helper.rb +4 -2
  13. data/app/helpers/pgbus/workflow_insights_helper.rb +129 -0
  14. data/app/helpers/pgbus/workflows_helper.rb +165 -0
  15. data/app/models/pgbus/workflow_entry.rb +172 -0
  16. data/app/models/pgbus/workflow_event.rb +43 -0
  17. data/app/models/pgbus/workflow_signal.rb +77 -0
  18. data/app/models/pgbus/workflow_step.rb +142 -0
  19. data/app/views/layouts/pgbus/application.html.erb +2 -0
  20. data/app/views/pgbus/dashboard/_stats_cards.html.erb +17 -0
  21. data/app/views/pgbus/workflows/_actions.html.erb +59 -0
  22. data/app/views/pgbus/workflows/_events_table.html.erb +24 -0
  23. data/app/views/pgbus/workflows/_filters.html.erb +29 -0
  24. data/app/views/pgbus/workflows/_signal_form.html.erb +31 -0
  25. data/app/views/pgbus/workflows/_signals_table.html.erb +40 -0
  26. data/app/views/pgbus/workflows/_status_filter.html.erb +12 -0
  27. data/app/views/pgbus/workflows/_steps_table.html.erb +79 -0
  28. data/app/views/pgbus/workflows/_timeline.html.erb +39 -0
  29. data/app/views/pgbus/workflows/_workflows_table.html.erb +59 -0
  30. data/app/views/pgbus/workflows/attention.html.erb +88 -0
  31. data/app/views/pgbus/workflows/definitions/_by_revision.html.erb +52 -0
  32. data/app/views/pgbus/workflows/definitions/_duration_table.html.erb +18 -0
  33. data/app/views/pgbus/workflows/definitions/_funnel.html.erb +49 -0
  34. data/app/views/pgbus/workflows/definitions/_pipeline.html.erb +16 -0
  35. data/app/views/pgbus/workflows/definitions/_step_card.html.erb +31 -0
  36. data/app/views/pgbus/workflows/definitions/_throughput_table.html.erb +32 -0
  37. data/app/views/pgbus/workflows/definitions/_window.html.erb +17 -0
  38. data/app/views/pgbus/workflows/definitions/index.html.erb +71 -0
  39. data/app/views/pgbus/workflows/definitions/not_found.html.erb +5 -0
  40. data/app/views/pgbus/workflows/definitions/show.html.erb +80 -0
  41. data/app/views/pgbus/workflows/index.html.erb +15 -0
  42. data/app/views/pgbus/workflows/not_found.html.erb +5 -0
  43. data/app/views/pgbus/workflows/show.html.erb +93 -0
  44. data/config/i18n-tasks.yml +6 -0
  45. data/config/locales/da.yml +442 -0
  46. data/config/locales/de.yml +442 -0
  47. data/config/locales/en.yml +442 -0
  48. data/config/locales/es.yml +442 -0
  49. data/config/locales/fi.yml +442 -0
  50. data/config/locales/fr.yml +442 -0
  51. data/config/locales/it.yml +442 -0
  52. data/config/locales/ja.yml +442 -0
  53. data/config/locales/nb.yml +442 -0
  54. data/config/locales/nl.yml +442 -0
  55. data/config/locales/pt.yml +442 -0
  56. data/config/locales/sv.yml +442 -0
  57. data/config/routes.rb +26 -0
  58. data/lib/generators/pgbus/add_workflow_signals_generator.rb +56 -0
  59. data/lib/generators/pgbus/add_workflows_generator.rb +54 -0
  60. data/lib/generators/pgbus/templates/add_workflow_signals.rb.erb +51 -0
  61. data/lib/generators/pgbus/templates/add_workflows.rb.erb +150 -0
  62. data/lib/generators/pgbus/templates/migration.rb.erb +127 -0
  63. data/lib/pgbus/active_job/delivery.rb +49 -0
  64. data/lib/pgbus/active_job/executor.rb +3 -1
  65. data/lib/pgbus/configuration/workflow_settings.rb +99 -0
  66. data/lib/pgbus/configuration.rb +21 -3
  67. data/lib/pgbus/generators/migration_detector.rb +40 -0
  68. data/lib/pgbus/instrumentation.rb +32 -0
  69. data/lib/pgbus/integrations/appsignal/dashboard.json +128 -1
  70. data/lib/pgbus/integrations/appsignal/subscriber.rb +16 -1
  71. data/lib/pgbus/mcp/rack_app.rb +7 -2
  72. data/lib/pgbus/mcp/runner.rb +2 -1
  73. data/lib/pgbus/mcp/serialization.rb +25 -0
  74. data/lib/pgbus/mcp/server.rb +53 -10
  75. data/lib/pgbus/mcp/tools/deploy_tasks_tool.rb +1 -10
  76. data/lib/pgbus/mcp/tools/workflow_cancel_tool.rb +23 -0
  77. data/lib/pgbus/mcp/tools/workflow_definitions_tool.rb +36 -0
  78. data/lib/pgbus/mcp/tools/workflow_detail_tool.rb +38 -0
  79. data/lib/pgbus/mcp/tools/workflow_resume_at_tool.rb +32 -0
  80. data/lib/pgbus/mcp/tools/workflow_resume_tool.rb +24 -0
  81. data/lib/pgbus/mcp/tools/workflow_run_now_tool.rb +23 -0
  82. data/lib/pgbus/mcp/tools/workflow_signal_tool.rb +77 -0
  83. data/lib/pgbus/mcp/tools/workflow_skip_step_tool.rb +23 -0
  84. data/lib/pgbus/mcp/tools/workflow_stats_tool.rb +42 -0
  85. data/lib/pgbus/mcp/tools/workflows_attention_tool.rb +42 -0
  86. data/lib/pgbus/mcp/tools/workflows_tool.rb +60 -0
  87. data/lib/pgbus/mcp/workflow_insights_payload.rb +15 -0
  88. data/lib/pgbus/mcp/workflow_payloads.rb +53 -0
  89. data/lib/pgbus/mcp/write_tool.rb +134 -0
  90. data/lib/pgbus/mcp.rb +15 -0
  91. data/lib/pgbus/metrics/backends/statsd.rb +6 -0
  92. data/lib/pgbus/metrics/subscriber.rb +14 -1
  93. data/lib/pgbus/metrics/workflow_metrics.rb +65 -0
  94. data/lib/pgbus/process/dispatcher.rb +26 -0
  95. data/lib/pgbus/version.rb +1 -1
  96. data/lib/pgbus/web/data_source/workflow_actions.rb +109 -0
  97. data/lib/pgbus/web/data_source/workflow_insights.rb +99 -0
  98. data/lib/pgbus/web/data_source/workflow_list.rb +248 -0
  99. data/lib/pgbus/web/data_source.rb +3 -0
  100. data/lib/pgbus/web/workflow_action_plan.rb +62 -0
  101. data/lib/pgbus/web/workflow_insights_queries.rb +250 -0
  102. data/lib/pgbus/web/workflow_insights_report.rb +171 -0
  103. data/lib/pgbus/web/workflow_payload.rb +36 -0
  104. data/lib/pgbus/web/workflow_query.rb +82 -0
  105. data/lib/pgbus/web/workflow_state.rb +76 -0
  106. data/lib/pgbus/web/workflow_timeline.rb +113 -0
  107. data/lib/pgbus/web/workflow_window.rb +51 -0
  108. data/lib/pgbus/workflow/batch_finished_job.rb +21 -0
  109. data/lib/pgbus/workflow/dsl.rb +105 -0
  110. data/lib/pgbus/workflow/error_capture.rb +63 -0
  111. data/lib/pgbus/workflow/exception_policy.rb +170 -0
  112. data/lib/pgbus/workflow/fan_out.rb +157 -0
  113. data/lib/pgbus/workflow/fan_out_definition.rb +41 -0
  114. data/lib/pgbus/workflow/flow_control.rb +94 -0
  115. data/lib/pgbus/workflow/instance.rb +183 -0
  116. data/lib/pgbus/workflow/outside_verbs.rb +138 -0
  117. data/lib/pgbus/workflow/payload.rb +53 -0
  118. data/lib/pgbus/workflow/registry.rb +53 -0
  119. data/lib/pgbus/workflow/removed_step.rb +14 -0
  120. data/lib/pgbus/workflow/runner.rb +218 -0
  121. data/lib/pgbus/workflow/signal_matcher.rb +53 -0
  122. data/lib/pgbus/workflow/signals.rb +132 -0
  123. data/lib/pgbus/workflow/states.rb +119 -0
  124. data/lib/pgbus/workflow/step_context.rb +58 -0
  125. data/lib/pgbus/workflow/step_definition.rb +131 -0
  126. data/lib/pgbus/workflow/step_execution.rb +242 -0
  127. data/lib/pgbus/workflow/step_job.rb +28 -0
  128. data/lib/pgbus/workflow/step_outcome.rb +151 -0
  129. data/lib/pgbus/workflow/steps.rb +103 -0
  130. data/lib/pgbus/workflow/sweep.rb +156 -0
  131. data/lib/pgbus/workflow/test_helpers.rb +152 -0
  132. data/lib/pgbus/workflow/wait_timeout.rb +73 -0
  133. data/lib/pgbus/workflow/waiting.rb +82 -0
  134. data/lib/pgbus/workflow.rb +183 -0
  135. data/sig/pgbus/configuration.rbs +22 -0
  136. metadata +92 -1
@@ -140,6 +140,11 @@ de:
140
140
  throughput: Durchsatz
141
141
  throughput_detail: Aufträge/Min in den letzten %{minutes} Min
142
142
  throughput_unavailable: benötigt Job-Statistiken (rails g pgbus:add_job_stats)
143
+ workflows: Workflows
144
+ workflows_attention:
145
+ one: "%{count} braucht Aufmerksamkeit"
146
+ other: "%{count} brauchen Aufmerksamkeit"
147
+ workflows_detail: laufend (%{paused} pausiert)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Dead Letters
@@ -723,6 +728,7 @@ de:
723
728
  processes: Prozesse
724
729
  queues: Warteschlangen
725
730
  recurring: Wiederkehrend
731
+ workflows: Workflows
726
732
  return_to_app: Zurück zur App
727
733
  title: Pgbus Dashboard
728
734
  toggle_dark_mode: Dunkelmodus umschalten
@@ -1023,3 +1029,439 @@ de:
1023
1029
  disabled: Aufgabe deaktiviert
1024
1030
  enabled: Aufgabe aktiviert
1025
1031
  failed: Aufgabe konnte nicht umgeschaltet werden
1032
+ workflow_insights:
1033
+ back_to_classes: Alle Workflow-Klassen
1034
+ back_to_runs: Alle Workflow-Läufe
1035
+ bad_request: 'Ungültige Anfrage: %{reason}'
1036
+ capped: 'Begrenzt auf workflow_retention (%{retention}): ältere beendete und abgebrochene Läufe werden gelöscht.'
1037
+ few_samples:
1038
+ one: n=%{count}, wenige Messwerte
1039
+ other: n=%{count}, wenige Messwerte
1040
+ index:
1041
+ description: 'Wie jede Workflow-Klasse in %{window} lief: die Läufe, die gerade laufen, die beendeten Läufe und wie lange ein Lauf von Anfang bis Ende dauert.'
1042
+ empty_hint: 'Definieren Sie eine Unterklasse von Pgbus::Workflow und starten Sie einen Lauf: YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Noch keine Workflow-Klasse ist gelaufen.
1044
+ headers:
1045
+ attention: Brauchen Aufmerksamkeit
1046
+ cancelled: Abgebrochen
1047
+ duration_p50: Dauer p50
1048
+ duration_p95: Dauer p95
1049
+ finished: Beendet
1050
+ ongoing: Laufend
1051
+ paused: Pausiert
1052
+ workflow_class: Workflow-Klasse
1053
+ title: Workflow-Einblicke
1054
+ links:
1055
+ at_step: "%{status} Läufe bei %{step}"
1056
+ attention: Läufe von %{workflow}, die Aufmerksamkeit brauchen
1057
+ cancelled: im Zeitfenster abgebrochene Läufe von %{workflow}
1058
+ cancelled_bucket: in diesem Zeitraum abgebrochene Läufe
1059
+ finished: im Zeitfenster beendete Läufe von %{workflow}
1060
+ finished_bucket: in diesem Zeitraum beendete Läufe
1061
+ ongoing: laufende Läufe von %{workflow}
1062
+ paused: pausierte Läufe von %{workflow}
1063
+ started: im Zeitfenster gestartete Läufe von %{workflow}
1064
+ started_bucket: in diesem Zeitraum gestartete Läufe
1065
+ not_found:
1066
+ hint: Keine Unterklasse von Pgbus::Workflow und kein Lauf heißt %{workflow} (oder das Lesen ist fehlgeschlagen, siehe Log).
1067
+ title: Unbekannte Workflow-Klasse
1068
+ not_loaded: Definition nicht geladen
1069
+ not_loaded_hint: 'Diese Klasse lädt in der App nicht mehr: Die Schritte stammen aus den Zeilen ihrer Läufe, in der Reihenfolge, in der die Läufe sie erreicht haben.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} Lauf auf dem entfernten Schritt %{step}"
1073
+ other: "%{count} Läufe auf dem entfernten Schritt %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Alle Schritte
1077
+ caption: 'Dieselben Zahlen für die letzten fünf App-Revisionen, die im Zeitfenster einen Versuch beendet haben, die neueste zuerst: Eine Verschlechterung nach einem Deploy zeigt sich als Zeile.'
1078
+ empty: Kein Versuch in diesem Zeitfenster hat eine App-Revision aufgezeichnet (config.app_revision).
1079
+ headers:
1080
+ attempts: Versuche
1081
+ failed: Fehlgeschlagen
1082
+ reattempted: Wiederholt
1083
+ revision: Revision
1084
+ run_time: Laufzeit
1085
+ skipped: Übersprungen
1086
+ step: Schritt
1087
+ seen_html: gesehen %{from} bis %{to}
1088
+ title: Nach App-Revision
1089
+ worse: gestiegen von %{rate} auf %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Wie lange der %{count} im Zeitfenster beendete Lauf von Anfang bis Ende gedauert hat.
1095
+ other: Wie lange die %{count} im Zeitfenster beendeten Läufe von Anfang bis Ende gedauert haben.
1096
+ headers:
1097
+ range: Dauer
1098
+ runs: Läufe
1099
+ over: "%{from} oder mehr"
1100
+ title: Dauer von Anfang bis Ende
1101
+ under: unter %{to}
1102
+ series:
1103
+ cancelled: Abgebrochen
1104
+ finished: Beendet
1105
+ runs: Läufe
1106
+ started: Gestartet
1107
+ throughput:
1108
+ caption: 'Gestartete, beendete und abgebrochene Läufe pro %{bucket} in %{window}: %{started} gestartet, %{finished} beendet, %{cancelled} abgebrochen.'
1109
+ headers:
1110
+ cancelled: Abgebrochen
1111
+ finished: Beendet
1112
+ from: Ab
1113
+ started: Gestartet
1114
+ title: Läufe pro %{bucket}
1115
+ description: 'In %{window}: wo die Läufe gerade sind, wie jeder Schritt abschneidet und wo Läufe stehen bleiben.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'Von dem %{count} im Zeitfenster gestarteten Lauf: wie viele jeden Schritt erreicht haben und wo er jetzt ist.'
1119
+ other: 'Von den %{count} im Zeitfenster gestarteten Läufen: wie viele jeden Schritt erreicht haben und wo jeder jetzt ist.'
1120
+ empty: In diesem Zeitfenster wurde kein Lauf gestartet.
1121
+ headers:
1122
+ now_here: Jetzt bei diesem Schritt
1123
+ reached: Erreicht
1124
+ share: Der gestarteten
1125
+ step: Schritt
1126
+ here:
1127
+ cancelled:
1128
+ one: "%{count} abgebrochen"
1129
+ other: "%{count} abgebrochen"
1130
+ finished:
1131
+ one: "%{count} beendet"
1132
+ other: "%{count} beendet"
1133
+ paused:
1134
+ one: "%{count} pausiert"
1135
+ other: "%{count} pausiert"
1136
+ performing:
1137
+ one: "%{count} läuft"
1138
+ other: "%{count} laufen"
1139
+ ready:
1140
+ one: "%{count} geplant"
1141
+ other: "%{count} geplant"
1142
+ waiting:
1143
+ one: "%{count} wartet"
1144
+ other: "%{count} warten"
1145
+ title: Trichter
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} Versuch"
1149
+ other: "%{count} Versuche"
1150
+ caption: 'Jeder Schritt der Reihe nach: die Läufe, die gerade bei ihm stehen, und wie seine im Zeitfenster beendeten Versuche liefen.'
1151
+ empty: 'Noch keine Schritte: Kein Lauf dieser Klasse hat einen Schritt im Zeitfenster, und keiner läuft.'
1152
+ failed: Fehlgeschlagen
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Entfernt
1156
+ signal: Wartet auf ein Signal
1157
+ undeclared: Nicht in der Definition
1158
+ live:
1159
+ paused: Pausiert
1160
+ performing: Läuft
1161
+ ready: Geplant
1162
+ waiting: Wartet
1163
+ now_label: Läufe bei diesem Schritt
1164
+ pickup: Abholung
1165
+ reattempted: Wiederholt
1166
+ run_time: Laufzeit
1167
+ skipped: Übersprungen
1168
+ step_link: Laufende Läufe bei %{step}
1169
+ title: Pipeline
1170
+ window_label: Im Zeitfenster beendete Versuche
1171
+ summary:
1172
+ attention: Brauchen Aufmerksamkeit
1173
+ cancelled: Abgebrochen
1174
+ duration: Dauer p50
1175
+ finished: Beendet
1176
+ ongoing: Laufend
1177
+ started: Gestartet
1178
+ window_label: Zeitfenster
1179
+ windows:
1180
+ 1h: der letzten Stunde
1181
+ 24h: der letzten 24 Stunden
1182
+ 30d: der letzten 30 Tage
1183
+ 7d: der letzten 7 Tage
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Alle abbrechen
1187
+ bulk_resume: Alle fortsetzen
1188
+ cancel: Abbrechen
1189
+ rerun: Wiederholen
1190
+ resume: Fortsetzen
1191
+ resume_at: Bei Schritt fortsetzen
1192
+ run_now: Jetzt ausführen
1193
+ signal: Signal senden
1194
+ skip_step: Schritt überspringen
1195
+ attempt: Versuch %{attempt}
1196
+ attention:
1197
+ at_step_html: bei %{step}
1198
+ back: "← Workflows"
1199
+ cancel_all:
1200
+ one: Alle %{count} abbrechen
1201
+ other: Alle %{count} abbrechen
1202
+ confirm:
1203
+ cancel:
1204
+ one: Den bei %{step} festhängenden Lauf abbrechen?
1205
+ other: Alle %{count} bei %{step} festhängenden Läufe abbrechen?
1206
+ cancel_error:
1207
+ one: Den bei %{step} wegen %{error} festhängenden Lauf abbrechen?
1208
+ other: Alle %{count} bei %{step} wegen %{error} festhängenden Läufe abbrechen?
1209
+ resume:
1210
+ one: Den bei %{step} pausierten Lauf fortsetzen?
1211
+ other: Alle %{count} bei %{step} pausierten Läufe fortsetzen?
1212
+ resume_error:
1213
+ one: Den bei %{step} wegen %{error} pausierten Lauf fortsetzen?
1214
+ other: Alle %{count} bei %{step} wegen %{error} pausierten Läufe fortsetzen?
1215
+ description: Laufende Läufe, die auf einen Menschen warten, gruppiert nach dem Grund des Stopps. Ist die Ursache behoben, handle für die ganze Gruppe.
1216
+ empty_hint: Kein laufender Lauf ist pausiert, im Stillstand, überfällig oder wartet länger als workflow_waiting_visibility_threshold.
1217
+ empty_title: Nichts braucht Aufmerksamkeit.
1218
+ first_seen_html: erstmals %{time}
1219
+ headers:
1220
+ actions: Aktionen
1221
+ reason: Grund
1222
+ runs: Läufe
1223
+ seen: Gesehen
1224
+ workflow: Workflow
1225
+ last_seen_html: zuletzt %{time}
1226
+ only_class_html: Nur %{workflow}.
1227
+ reasons:
1228
+ overdue: 'Überfällig: fällig, aber nicht abgeholt'
1229
+ paused_error: Wegen eines Fehlers pausiert
1230
+ paused_manual: Von Hand pausiert
1231
+ stalled: 'Stillstand: Der Worker antwortet nicht mehr'
1232
+ waiting_overdue: Wartet zu lange
1233
+ resume_all:
1234
+ one: Alle %{count} fortsetzen
1235
+ other: Alle %{count} fortsetzen
1236
+ show_all: Alle Klassen anzeigen
1237
+ show_runs: Läufe anzeigen
1238
+ title: Braucht Aufmerksamkeit
1239
+ audit:
1240
+ by: "%{event} durch %{actor}"
1241
+ empty: Keine Ereignisse aufgezeichnet.
1242
+ headers:
1243
+ what: Was geschah
1244
+ when: Wann
1245
+ title: Audit-Protokoll
1246
+ with_reason: "%{sentence}: %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Ungültige Anfrage: %{reason}'
1249
+ confirm:
1250
+ cancel: Diesen Workflow abbrechen? Die offenen Schritte werden abgebrochen und er läuft nicht mehr.
1251
+ rerun: Diesen Workflow als neuen Lauf mit demselben Subjekt und denselben Argumenten erneut starten?
1252
+ resume: Diesen Workflow fortsetzen?
1253
+ resume_at: Diesen Workflow beim gewählten Schritt fortsetzen? Die offenen Schritte werden zuvor abgebrochen.
1254
+ run_now: Den geplanten Schritt jetzt ausführen, statt zu warten?
1255
+ signal: Dieses Signal an den Workflow senden?
1256
+ skip_step: Den Schritt, auf den dieser Workflow wartet, überspringen und zum nächsten gehen?
1257
+ events:
1258
+ cancelled: Abgebrochen
1259
+ fan_out_finished: Fan-out abgeschlossen
1260
+ fan_out_opened: Fan-out geöffnet
1261
+ finished: Abgeschlossen
1262
+ late_completion_ignored: Späte Fertigmeldung ignoriert
1263
+ paused: Pausiert
1264
+ rerun: Wiederholt
1265
+ rescheduled: Neu geplant
1266
+ resumed: Fortgesetzt
1267
+ run_now: Jetzt ausführen
1268
+ signal_claimed: Signal übernommen
1269
+ signal_received: Signal empfangen
1270
+ stall_detected: Stillstand erkannt
1271
+ started: Gestartet
1272
+ step_completed: Schritt abgeschlossen
1273
+ step_failed: Schritt fehlgeschlagen
1274
+ step_reattempted: Schritt erneut versucht
1275
+ step_scheduled: Schritt geplant
1276
+ step_skipped: Schritt übersprungen
1277
+ step_started: Schritt gestartet
1278
+ step_waiting: Schritt wartet
1279
+ wait_timed_out: Wartezeit abgelaufen
1280
+ filters:
1281
+ apply: Filter anwenden
1282
+ clear: Zurücksetzen
1283
+ created_from: Erstellt ab
1284
+ created_to: Erstellt bis
1285
+ ended_from: Beendet ab
1286
+ ended_to: Beendet bis
1287
+ error_class: Fehlerklasse
1288
+ step: Aktueller Schritt
1289
+ subject_id: Subjekt-ID
1290
+ subject_type: Subjekttyp
1291
+ workflow_class: Workflow-Klasse
1292
+ workflow_id: Workflow-ID
1293
+ flash:
1294
+ bad_group: Diese Gruppe ist ungültig.
1295
+ bulk_cancel:
1296
+ one: "%{count} abgebrochen."
1297
+ other: "%{count} abgebrochen."
1298
+ bulk_cancel_skipped: "%{count} abgebrochen; %{skipped} waren bereits weitergelaufen."
1299
+ bulk_failed: "%{count} konnten nicht geändert werden: %{reason}"
1300
+ bulk_more: 'Es warten möglicherweise weitere Läufe: Erneut drücken für die nächsten %{cap}.'
1301
+ bulk_resume:
1302
+ one: "%{count} fortgesetzt."
1303
+ other: "%{count} fortgesetzt."
1304
+ bulk_resume_skipped: "%{count} fortgesetzt; %{skipped} waren bereits weitergelaufen."
1305
+ cancel: Workflow abgebrochen.
1306
+ choose_step: Wähle einen Schritt zum Fortsetzen.
1307
+ failed:
1308
+ not_allowed: 'Nicht ausgeführt: Der Lauf ist jetzt %{status}.'
1309
+ not_found: Dieser Workflow existiert nicht mehr.
1310
+ other: "%{action} fehlgeschlagen: %{reason}"
1311
+ payload_not_object: 'Nicht gesendet: Die Payload ist kein JSON-Objekt.'
1312
+ payload_too_large: 'Nicht gesendet: Die Payload ist größer als %{limit} Bytes.'
1313
+ rerun: Neuer Lauf gestartet.
1314
+ resume: Workflow fortgesetzt.
1315
+ resume_at: Workflow bei %{step} fortgesetzt.
1316
+ run_now: Der geplante Schritt läuft jetzt.
1317
+ signal: Signal %{name} gesendet.
1318
+ signal_duplicate: Signal %{name} wurde mit diesem Schlüssel bereits zugestellt; es wurde nichts Neues gesendet.
1319
+ signal_name_missing: 'Nicht gesendet: Das Signal braucht einen Namen.'
1320
+ skip_step: Schritt übersprungen.
1321
+ headers:
1322
+ current_step: Aktueller Schritt
1323
+ last_activity: Letzte Aktivität
1324
+ started: Gestartet
1325
+ status: Status
1326
+ subject: Subjekt
1327
+ workflow: Workflow
1328
+ index:
1329
+ attention_link:
1330
+ one: Braucht Aufmerksamkeit (%{count})
1331
+ other: Braucht Aufmerksamkeit (%{count})
1332
+ description: 'Dauerhafte mehrstufige Läufe: was jeder gerade tut und was als Nächstes passiert.'
1333
+ empty_hint: Wähle einen anderen Status oder entferne die Filter. Ein Lauf startet mit YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Keine passenden Workflows.
1335
+ insights_link: Einblicke nach Klasse
1336
+ status_label: Nach Status filtern
1337
+ title: Workflows
1338
+ next:
1339
+ cancelled_html: Abgebrochen %{ago}.
1340
+ due_html: 'Bereit: %{step} war fällig %{ago} und wartet auf einen Worker.'
1341
+ finished_html: Abgeschlossen %{ago}.
1342
+ overdue_html: 'Überfällig: %{step} war fällig %{ago}; der Sweep sendet es erneut.'
1343
+ paused_error_html: 'Pausiert bei %{step}: %{error} — fortsetzen oder abbrechen.'
1344
+ paused_manual_html: Pausiert bei %{step} — fortsetzen oder abbrechen.
1345
+ performing_attempt_html: "%{step} wird ausgeführt (Versuch %{attempt})."
1346
+ performing_html: "%{step} wird ausgeführt."
1347
+ ready_html: 'Bereit: %{step} läuft als Nächstes.'
1348
+ scheduled_html: 'Geplant: %{step} läuft %{time}.'
1349
+ unknown_html: 'Status: %{status}.'
1350
+ waiting_batch_html: Wartet auf Stapel %{batch} (%{done} von %{total} Jobs erledigt).
1351
+ waiting_signal_html: Wartet auf Signal %{signal} seit %{ago}.
1352
+ waiting_signal_timeout_html: Wartet auf Signal %{signal} seit %{ago}. Das Warten läuft ab %{time}.
1353
+ waiting_step_html: Wartet auf %{step}.
1354
+ not_found:
1355
+ hint: Er ist eventuell abgeschlossen und nach workflow_retention entfernt worden, oder die Datenbank konnte nicht gelesen werden (siehe Log).
1356
+ title: Workflow nicht gefunden
1357
+ outcomes:
1358
+ cancelled: abgebrochen
1359
+ completed: abgeschlossen
1360
+ finished_early: hat den Lauf vorzeitig beendet
1361
+ paused: hat den Lauf pausiert
1362
+ reattempted: erneut versucht
1363
+ skipped: übersprungen
1364
+ resume:
1365
+ carry_on: 'Fortsetzen: mit %{step} weitermachen'
1366
+ continue: 'Fortsetzen: weiter mit %{step}'
1367
+ finish: 'Fortsetzen: Lauf beenden'
1368
+ resend: 'Fortsetzen: %{step} erneut senden'
1369
+ retry: 'Fortsetzen: %{step} wiederholen'
1370
+ rewait: 'Fortsetzen: erneut auf %{step} warten'
1371
+ show:
1372
+ actions: Aktionen
1373
+ arguments: Argumente
1374
+ back: "← Workflows"
1375
+ cancelled_at: Abgebrochen
1376
+ class_missing: "%{workflow_class} ist in diesem Prozess nicht geladen: Der Lauf kann noch abgebrochen, aber nicht fortgesetzt werden."
1377
+ definition_outdated: 'Dieser Lauf wurde mit einer älteren Definition von %{workflow_class} gestartet: Die Schritte haben sich seitdem geändert.'
1378
+ details: Details
1379
+ finished_at: Abgeschlossen
1380
+ no_arguments: Dieser Lauf hat keine Argumente.
1381
+ paused_at: Pausiert
1382
+ reason_hint: Wird im Audit-Protokoll festgehalten, neben der ausführenden Person.
1383
+ reason_label: Grund (optional)
1384
+ rerun_of: Wiederholung von
1385
+ reruns: Wiederholt als
1386
+ resume_at_label: Schritt zum Fortsetzen
1387
+ signal:
1388
+ hint: Ein darauf wartender Schritt wird sofort geweckt; sonst bleibt es ausstehend, bis ein Schritt es übernimmt.
1389
+ name: Signalname
1390
+ payload: Payload (JSON)
1391
+ send: Signal senden
1392
+ title: Signal senden
1393
+ signal_statuses:
1394
+ claimed: Übernommen
1395
+ consumed: Verbraucht
1396
+ pending: Ausstehend
1397
+ signals:
1398
+ empty: Diesem Lauf wurden keine Signale zugestellt.
1399
+ headers:
1400
+ claimed: Übernommen
1401
+ consumed: Verbraucht
1402
+ idempotency_key: Idempotenzschlüssel
1403
+ name: Signal
1404
+ received: Empfangen
1405
+ status: Status
1406
+ payload: Payload
1407
+ title: Signale
1408
+ statuses:
1409
+ cancelled: Abgebrochen
1410
+ finished: Abgeschlossen
1411
+ gone: entfernt
1412
+ paused: Pausiert
1413
+ performing: In Ausführung
1414
+ ready: Bereit
1415
+ scheduled: Geplant
1416
+ waiting: Wartend
1417
+ step_statuses:
1418
+ cancelled: Abgebrochen
1419
+ completed: Abgeschlossen
1420
+ failed: Fehlgeschlagen
1421
+ in_progress: Läuft
1422
+ scheduled: Geplant
1423
+ skipped: Übersprungen
1424
+ waiting: Wartend
1425
+ steps:
1426
+ batch: Stapel %{batch}
1427
+ caused_by: Verursacht durch %{error}
1428
+ empty: Noch keine Versuche.
1429
+ headers:
1430
+ finished: Abgeschlossen
1431
+ queued: Eingereiht
1432
+ ran: Gelaufen
1433
+ scheduled: Geplant
1434
+ started: Gestartet
1435
+ status: Status
1436
+ step: Schritt
1437
+ waited: Gewartet
1438
+ worker: Worker
1439
+ revision: Revision %{revision}
1440
+ show_backtrace: Backtrace anzeigen
1441
+ title: Versuche
1442
+ waiting_for: danach Wartezeit %{duration}
1443
+ waits_for_html: wartet auf %{signal}
1444
+ tabs:
1445
+ all: Alle
1446
+ cancelled: Abgebrochen
1447
+ finished: Abgeschlossen
1448
+ ongoing: Laufend
1449
+ paused: Pausiert
1450
+ performing: In Ausführung
1451
+ ready: Bereit
1452
+ waiting: Wartend
1453
+ timeline:
1454
+ caption: 'Jeder Versuch, der älteste oben: gewartet (seine Wartezeit), eingereiht (fällig, noch nicht abgeholt), gelaufen (nach Ausgang eingefärbt) und wartend (auf ein Signal oder seinen Stapel), die Pausen in einer eigenen Zeile. Die Versuchstabelle darunter listet dieselben Dauern.'
1455
+ empty: Noch keine Versuche.
1456
+ paused_period_html: Pausiert ab %{from} für %{duration}
1457
+ paused_row: Pausiert
1458
+ series:
1459
+ paused: Pausiert
1460
+ queued: Eingereiht
1461
+ ran_cancelled: Gelaufen, abgebrochen
1462
+ ran_failed: Gelaufen, fehlgeschlagen
1463
+ ran_ok: Gelaufen
1464
+ ran_open: Läuft
1465
+ waited: Gewartet
1466
+ waiting: Wartend
1467
+ title: Zeitachse