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 @@ da:
140
140
  throughput: Gennemløb
141
141
  throughput_detail: job/min de seneste %{minutes} min
142
142
  throughput_unavailable: kræver jobstatistik (rails g pgbus:add_job_stats)
143
+ workflows: Workflows
144
+ workflows_attention:
145
+ one: "%{count} kræver opmærksomhed"
146
+ other: "%{count} kræver opmærksomhed"
147
+ workflows_detail: i gang (%{paused} sat på pause)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Dead letters
@@ -723,6 +728,7 @@ da:
723
728
  processes: Processer
724
729
  queues: Køer
725
730
  recurring: Gentagende
731
+ workflows: Workflows
726
732
  return_to_app: Tilbage til app
727
733
  title: Pgbus Dashboard
728
734
  toggle_dark_mode: Skift til mørk tilstand
@@ -1023,3 +1029,439 @@ da:
1023
1029
  disabled: Opgave deaktiveret
1024
1030
  enabled: Opgave aktiveret
1025
1031
  failed: Kunne ikke ændre opgave
1032
+ workflow_insights:
1033
+ back_to_classes: Alle workflow-klasser
1034
+ back_to_runs: Alle workflow-kørsler
1035
+ bad_request: 'Ugyldig forespørgsel: %{reason}'
1036
+ capped: 'Begrænset til workflow_retention (%{retention}): færdige og annullerede kørsler, der er ældre, slettes.'
1037
+ few_samples:
1038
+ one: n=%{count}, få målinger
1039
+ other: n=%{count}, få målinger
1040
+ index:
1041
+ description: 'Hvordan hver workflow-klasse klarede sig over %{window}: kørslerne i gang nu, kørslerne der sluttede, og hvor lang tid en kørsel tager fra start til slut.'
1042
+ empty_hint: 'Definér en underklasse af Pgbus::Workflow og start en kørsel: YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Ingen workflow-klasse har kørt endnu.
1044
+ headers:
1045
+ attention: Kræver handling
1046
+ cancelled: Annullerede
1047
+ duration_p50: Varighed p50
1048
+ duration_p95: Varighed p95
1049
+ finished: Færdige
1050
+ ongoing: Igangværende
1051
+ paused: Pausede
1052
+ workflow_class: Workflow-klasse
1053
+ title: Workflow-indsigt
1054
+ links:
1055
+ at_step: "%{status} kørsler ved %{step}"
1056
+ attention: kørsler af %{workflow}, der kræver handling
1057
+ cancelled: kørsler af %{workflow}, der blev annulleret i vinduet
1058
+ cancelled_bucket: kørsler annulleret i perioden
1059
+ finished: kørsler af %{workflow}, der blev færdige i vinduet
1060
+ finished_bucket: kørsler færdige i perioden
1061
+ ongoing: igangværende kørsler af %{workflow}
1062
+ paused: pausede kørsler af %{workflow}
1063
+ started: kørsler af %{workflow}, der startede i vinduet
1064
+ started_bucket: kørsler startet i perioden
1065
+ not_found:
1066
+ hint: Ingen underklasse af Pgbus::Workflow og ingen kørsel hedder %{workflow} (eller læsningen fejlede, se loggen).
1067
+ title: Ukendt workflow-klasse
1068
+ not_loaded: Definitionen er ikke indlæst
1069
+ not_loaded_hint: 'Klassen indlæses ikke længere i appen: trinene kommer fra kørslernes rækker, i den rækkefølge kørslerne nåede dem.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} kørsel på fjernet trin %{step}"
1073
+ other: "%{count} kørsler på fjernet trin %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Alle trin
1077
+ caption: 'De samme tal for de seneste fem app-versioner, der afsluttede et forsøg i vinduet, nyeste først: en forringelse efter en udrulning ses som en række.'
1078
+ empty: Intet forsøg i dette vindue registrerede en app-version (config.app_revision).
1079
+ headers:
1080
+ attempts: Forsøg
1081
+ failed: Fejlet
1082
+ reattempted: Forsøgt igen
1083
+ revision: Version
1084
+ run_time: Køretid
1085
+ skipped: Sprunget over
1086
+ step: Trin
1087
+ seen_html: set %{from} til %{to}
1088
+ title: Pr. app-version
1089
+ worse: op fra %{rate} på %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Hvor lang tid den %{count} kørsel, der blev færdig i vinduet, tog fra start til slut.
1095
+ other: Hvor lang tid de %{count} kørsler, der blev færdige i vinduet, tog fra start til slut.
1096
+ headers:
1097
+ range: Varighed
1098
+ runs: Kørsler
1099
+ over: "%{from} eller mere"
1100
+ title: Varighed fra start til slut
1101
+ under: under %{to}
1102
+ series:
1103
+ cancelled: Annullerede
1104
+ finished: Færdige
1105
+ runs: Kørsler
1106
+ started: Startet
1107
+ throughput:
1108
+ caption: 'Kørsler startet, færdige og annulleret pr. %{bucket} over %{window}: %{started} startet, %{finished} færdige, %{cancelled} annulleret.'
1109
+ headers:
1110
+ cancelled: Annullerede
1111
+ finished: Færdige
1112
+ from: Fra
1113
+ started: Startet
1114
+ title: Kørsler pr. %{bucket}
1115
+ description: 'Over %{window}: hvor kørslerne er nu, hvordan hvert trin klarer sig, og hvor kørsler stopper.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'Af den %{count} kørsel, der startede i vinduet: hvor mange der nåede hvert trin, og hvor den er nu.'
1119
+ other: 'Af de %{count} kørsler, der startede i vinduet: hvor mange der nåede hvert trin, og hvor hver enkelt er nu.'
1120
+ empty: Ingen kørsel startede i dette vindue.
1121
+ headers:
1122
+ now_here: Nu ved trinnet
1123
+ reached: Nået
1124
+ share: Af startede
1125
+ step: Trin
1126
+ here:
1127
+ cancelled:
1128
+ one: "%{count} annulleret"
1129
+ other: "%{count} annulleret"
1130
+ finished:
1131
+ one: "%{count} færdig"
1132
+ other: "%{count} færdige"
1133
+ paused:
1134
+ one: "%{count} pauset"
1135
+ other: "%{count} pauset"
1136
+ performing:
1137
+ one: "%{count} kører"
1138
+ other: "%{count} kører"
1139
+ ready:
1140
+ one: "%{count} planlagt"
1141
+ other: "%{count} planlagt"
1142
+ waiting:
1143
+ one: "%{count} venter"
1144
+ other: "%{count} venter"
1145
+ title: Tragt
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} forsøg"
1149
+ other: "%{count} forsøg"
1150
+ caption: 'Hvert trin i rækkefølge: kørslerne der står ved det nu, og hvordan dets forsøg, der sluttede i vinduet, gik.'
1151
+ empty: 'Ingen trin endnu: ingen kørsel af klassen har et trin i vinduet, og ingen er i gang.'
1152
+ failed: Fejlet
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Fjernet
1156
+ signal: Venter på et signal
1157
+ undeclared: Ikke i definitionen
1158
+ live:
1159
+ paused: Pauset
1160
+ performing: Kører
1161
+ ready: Planlagt
1162
+ waiting: Venter
1163
+ now_label: Kørsler ved trinnet nu
1164
+ pickup: Afhentning
1165
+ reattempted: Forsøgt igen
1166
+ run_time: Køretid
1167
+ skipped: Sprunget over
1168
+ step_link: Igangværende kørsler ved %{step}
1169
+ title: Pipeline
1170
+ window_label: Forsøg der sluttede i vinduet
1171
+ summary:
1172
+ attention: Kræver handling
1173
+ cancelled: Annullerede
1174
+ duration: Varighed p50
1175
+ finished: Færdige
1176
+ ongoing: Igangværende
1177
+ started: Startet
1178
+ window_label: Tidsvindue
1179
+ windows:
1180
+ 1h: den seneste time
1181
+ 24h: de seneste 24 timer
1182
+ 30d: de seneste 30 dage
1183
+ 7d: de seneste 7 dage
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Annullér alle
1187
+ bulk_resume: Genoptag alle
1188
+ cancel: Annullér
1189
+ rerun: Kør igen
1190
+ resume: Genoptag
1191
+ resume_at: Genoptag ved trin
1192
+ run_now: Kør nu
1193
+ signal: Send signal
1194
+ skip_step: Spring trin over
1195
+ attempt: forsøg %{attempt}
1196
+ attention:
1197
+ at_step_html: ved %{step}
1198
+ back: "← Workflows"
1199
+ cancel_all:
1200
+ one: Annullér alle %{count}
1201
+ other: Annullér alle %{count}
1202
+ confirm:
1203
+ cancel:
1204
+ one: Annullér kørslen, der sidder fast ved %{step}?
1205
+ other: Annullér alle %{count} kørsler, der sidder fast ved %{step}?
1206
+ cancel_error:
1207
+ one: Annullér kørslen, der sidder fast ved %{step} pga. %{error}?
1208
+ other: Annullér alle %{count} kørsler, der sidder fast ved %{step} pga. %{error}?
1209
+ resume:
1210
+ one: Genoptag kørslen, der er sat på pause ved %{step}?
1211
+ other: Genoptag alle %{count} kørsler, der er sat på pause ved %{step}?
1212
+ resume_error:
1213
+ one: Genoptag kørslen, der er sat på pause ved %{step} pga. %{error}?
1214
+ other: Genoptag alle %{count} kørsler, der er sat på pause ved %{step} pga. %{error}?
1215
+ description: Igangværende kørsler, der venter på et menneske, grupperet efter hvad der stoppede dem. Når årsagen er rettet, handl på hele gruppen.
1216
+ empty_hint: Ingen igangværende kørsel er på pause, gået i stå, forsinket eller har ventet længere end workflow_waiting_visibility_threshold.
1217
+ empty_title: Intet kræver opmærksomhed.
1218
+ first_seen_html: første gang %{time}
1219
+ headers:
1220
+ actions: Handlinger
1221
+ reason: Årsag
1222
+ runs: Kørsler
1223
+ seen: Set
1224
+ workflow: Workflow
1225
+ last_seen_html: senest %{time}
1226
+ only_class_html: Kun %{workflow}.
1227
+ reasons:
1228
+ overdue: 'Forsinket: forfalden, men ikke hentet'
1229
+ paused_error: På pause pga. en fejl
1230
+ paused_manual: Sat på pause manuelt
1231
+ stalled: 'Gået i stå: dens worker svarer ikke længere'
1232
+ waiting_overdue: Venter for længe
1233
+ resume_all:
1234
+ one: Genoptag alle %{count}
1235
+ other: Genoptag alle %{count}
1236
+ show_all: Vis alle klasser
1237
+ show_runs: Vis kørsler
1238
+ title: Kræver opmærksomhed
1239
+ audit:
1240
+ by: "%{event} af %{actor}"
1241
+ empty: Ingen hændelser registreret.
1242
+ headers:
1243
+ what: Hvad skete der
1244
+ when: Hvornår
1245
+ title: Revisionslog
1246
+ with_reason: "%{sentence}: %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Ugyldig forespørgsel: %{reason}'
1249
+ confirm:
1250
+ cancel: Annullér denne workflow? Dens åbne trin annulleres, og den kører ikke igen.
1251
+ rerun: Start denne workflow igen som en ny kørsel med samme emne og argumenter?
1252
+ resume: Genoptag denne workflow?
1253
+ resume_at: Genoptag denne workflow ved det valgte trin? Dens åbne trin annulleres først.
1254
+ run_now: Kør det planlagte trin nu i stedet for at vente?
1255
+ signal: Send dette signal til workflowen?
1256
+ skip_step: Spring det trin over, som denne workflow venter på, og gå til det næste?
1257
+ events:
1258
+ cancelled: Annulleret
1259
+ fan_out_finished: Fan-out afsluttet
1260
+ fan_out_opened: Fan-out åbnet
1261
+ finished: Afsluttet
1262
+ late_completion_ignored: Sen fuldførelse ignoreret
1263
+ paused: På pause
1264
+ rerun: Kørt igen
1265
+ rescheduled: Omplanlagt
1266
+ resumed: Genoptaget
1267
+ run_now: Kør nu
1268
+ signal_claimed: Signal taget
1269
+ signal_received: Signal modtaget
1270
+ stall_detected: Gennemløbsstop registreret
1271
+ started: Startet
1272
+ step_completed: Trin fuldført
1273
+ step_failed: Trin mislykkedes
1274
+ step_reattempted: Trin forsøgt igen
1275
+ step_scheduled: Trin planlagt
1276
+ step_skipped: Trin sprunget over
1277
+ step_started: Trin startet
1278
+ step_waiting: Trin venter
1279
+ wait_timed_out: Ventetid udløbet
1280
+ filters:
1281
+ apply: Anvend filtre
1282
+ clear: Ryd
1283
+ created_from: Oprettet fra
1284
+ created_to: Oprettet til
1285
+ ended_from: Afsluttet fra
1286
+ ended_to: Afsluttet til
1287
+ error_class: Fejlklasse
1288
+ step: Nuværende trin
1289
+ subject_id: Emne-ID
1290
+ subject_type: Emnetype
1291
+ workflow_class: Workflow-klasse
1292
+ workflow_id: Workflow-ID
1293
+ flash:
1294
+ bad_group: Den gruppe er ikke gyldig.
1295
+ bulk_cancel:
1296
+ one: Annullerede %{count}.
1297
+ other: Annullerede %{count}.
1298
+ bulk_cancel_skipped: Annullerede %{count}; %{skipped} var allerede kørt videre.
1299
+ bulk_failed: "%{count} kunne ikke ændres: %{reason}"
1300
+ bulk_more: 'Der kan vente flere kørsler: tryk igen for de næste %{cap}.'
1301
+ bulk_resume:
1302
+ one: Genoptog %{count}.
1303
+ other: Genoptog %{count}.
1304
+ bulk_resume_skipped: Genoptog %{count}; %{skipped} var allerede kørt videre.
1305
+ cancel: Workflow annulleret.
1306
+ choose_step: Vælg et trin at genoptage ved.
1307
+ failed:
1308
+ not_allowed: 'Ikke udført: kørslen er nu %{status}.'
1309
+ not_found: Den workflow findes ikke længere.
1310
+ other: "%{action} mislykkedes: %{reason}"
1311
+ payload_not_object: 'Ikke sendt: payload er ikke et JSON-objekt.'
1312
+ payload_too_large: 'Ikke sendt: payload er over %{limit} bytes.'
1313
+ rerun: Ny kørsel startet.
1314
+ resume: Workflow genoptaget.
1315
+ resume_at: Workflow genoptaget ved %{step}.
1316
+ run_now: Det planlagte trin kører nu.
1317
+ signal: Signalet %{name} er sendt.
1318
+ signal_duplicate: Signalet %{name} er allerede leveret med denne nøgle; intet nyt blev sendt.
1319
+ signal_name_missing: 'Ikke sendt: signalet skal have et navn.'
1320
+ skip_step: Trin sprunget over.
1321
+ headers:
1322
+ current_step: Nuværende trin
1323
+ last_activity: Seneste aktivitet
1324
+ started: Startet
1325
+ status: Status
1326
+ subject: Emne
1327
+ workflow: Workflow
1328
+ index:
1329
+ attention_link:
1330
+ one: Kræver opmærksomhed (%{count})
1331
+ other: Kræver opmærksomhed (%{count})
1332
+ description: 'Varige kørsler i flere trin: hvad hver enkelt gør, og hvad der sker derefter.'
1333
+ empty_hint: Vælg en anden status, eller ryd filtrene. En kørsel starter med YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Ingen workflows matcher.
1335
+ insights_link: Indsigt pr. klasse
1336
+ status_label: Filtrér efter status
1337
+ title: Workflows
1338
+ next:
1339
+ cancelled_html: Annulleret %{ago}.
1340
+ due_html: 'Klar: %{step} skulle køre %{ago} og venter på en worker.'
1341
+ finished_html: Afsluttet %{ago}.
1342
+ overdue_html: 'Forsinket: %{step} skulle køre %{ago}; oprydningen sender det igen.'
1343
+ paused_error_html: 'På pause ved %{step}: %{error} — genoptag eller annullér.'
1344
+ paused_manual_html: På pause ved %{step} — genoptag eller annullér.
1345
+ performing_attempt_html: Kører %{step} (forsøg %{attempt}).
1346
+ performing_html: Kører %{step}.
1347
+ ready_html: 'Klar: %{step} kører næste gang.'
1348
+ scheduled_html: 'Planlagt: %{step} kører %{time}.'
1349
+ unknown_html: 'Status: %{status}.'
1350
+ waiting_batch_html: Venter på batch %{batch} (%{done} af %{total} jobs færdige).
1351
+ waiting_signal_html: Venter på signalet %{signal} siden %{ago}.
1352
+ waiting_signal_timeout_html: Venter på signalet %{signal} siden %{ago}. Ventetiden udløber %{time}.
1353
+ waiting_step_html: Venter på %{step}.
1354
+ not_found:
1355
+ hint: Det kan være afsluttet og fjernet efter workflow_retention, eller databasen kunne ikke læses (se loggen).
1356
+ title: Workflow ikke fundet
1357
+ outcomes:
1358
+ cancelled: annulleret
1359
+ completed: fuldført
1360
+ finished_early: afsluttede kørslen tidligt
1361
+ paused: satte kørslen på pause
1362
+ reattempted: forsøgt igen
1363
+ skipped: sprunget over
1364
+ resume:
1365
+ carry_on: 'Genoptag: fortsæt med %{step}'
1366
+ continue: 'Genoptag: fortsæt med %{step}'
1367
+ finish: 'Genoptag: afslut kørslen'
1368
+ resend: 'Genoptag: send %{step} igen'
1369
+ retry: 'Genoptag: forsøg %{step} igen'
1370
+ rewait: 'Genoptag: vent igen på %{step}'
1371
+ show:
1372
+ actions: Handlinger
1373
+ arguments: Argumenter
1374
+ back: "← Workflows"
1375
+ cancelled_at: Annulleret
1376
+ class_missing: "%{workflow_class} er ikke indlæst i denne proces: kørslen kan stadig annulleres, men ikke genoptages."
1377
+ definition_outdated: 'Denne kørsel startede på en ældre definition af %{workflow_class}: dens trin er ændret siden start.'
1378
+ details: Detaljer
1379
+ finished_at: Afsluttet
1380
+ no_arguments: Denne kørsel har ingen argumenter.
1381
+ paused_at: På pause
1382
+ reason_hint: Registreres i revisionsloggen sammen med, hvem der gjorde det.
1383
+ reason_label: Årsag (valgfri)
1384
+ rerun_of: Genkørsel af
1385
+ reruns: Kørt igen som
1386
+ resume_at_label: Trin der genoptages ved
1387
+ signal:
1388
+ hint: Et trin, der venter på det, vågner med det samme; ellers afventer det, indtil et trin tager det.
1389
+ name: Signalnavn
1390
+ payload: Payload (JSON)
1391
+ send: Send signal
1392
+ title: Send et signal
1393
+ signal_statuses:
1394
+ claimed: Taget
1395
+ consumed: Brugt
1396
+ pending: Afventer
1397
+ signals:
1398
+ empty: Ingen signaler leveret til denne kørsel.
1399
+ headers:
1400
+ claimed: Taget
1401
+ consumed: Brugt
1402
+ idempotency_key: Idempotensnøgle
1403
+ name: Signal
1404
+ received: Modtaget
1405
+ status: Status
1406
+ payload: Payload
1407
+ title: Signaler
1408
+ statuses:
1409
+ cancelled: Annulleret
1410
+ finished: Afsluttet
1411
+ gone: væk
1412
+ paused: På pause
1413
+ performing: Kører
1414
+ ready: Klar
1415
+ scheduled: Planlagt
1416
+ waiting: Venter
1417
+ step_statuses:
1418
+ cancelled: Annulleret
1419
+ completed: Fuldført
1420
+ failed: Mislykket
1421
+ in_progress: Kører
1422
+ scheduled: Planlagt
1423
+ skipped: Sprunget over
1424
+ waiting: Venter
1425
+ steps:
1426
+ batch: batch %{batch}
1427
+ caused_by: Forårsaget af %{error}
1428
+ empty: Ingen forsøg endnu.
1429
+ headers:
1430
+ finished: Afsluttet
1431
+ queued: I kø
1432
+ ran: Kørte
1433
+ scheduled: Planlagt
1434
+ started: Startet
1435
+ status: Status
1436
+ step: Trin
1437
+ waited: Ventede
1438
+ worker: Worker
1439
+ revision: revision %{revision}
1440
+ show_backtrace: Vis backtrace
1441
+ title: Forsøg
1442
+ waiting_for: venter derefter %{duration}
1443
+ waits_for_html: venter på %{signal}
1444
+ tabs:
1445
+ all: Alle
1446
+ cancelled: Annulleret
1447
+ finished: Afsluttet
1448
+ ongoing: I gang
1449
+ paused: På pause
1450
+ performing: Kører
1451
+ ready: Klar
1452
+ waiting: Venter
1453
+ timeline:
1454
+ caption: 'Hvert forsøg, ældste øverst: ventede (dets ventetid), i kø (forfalden, endnu ikke hentet), kørte (farvet efter udfald) og venter (på et signal eller sin batch), med pauserne i en egen række. Forsøgstabellen nedenfor viser de samme varigheder.'
1455
+ empty: Ingen forsøg endnu.
1456
+ paused_period_html: Sat på pause %{from} i %{duration}
1457
+ paused_row: På pause
1458
+ series:
1459
+ paused: På pause
1460
+ queued: I kø
1461
+ ran_cancelled: Kørte, annulleret
1462
+ ran_failed: Kørte, mislykkedes
1463
+ ran_ok: Kørte
1464
+ ran_open: Kører
1465
+ waited: Ventede
1466
+ waiting: Venter
1467
+ title: Tidslinje