pgbus 0.19.3 → 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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +104 -9
  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/adapter.rb +67 -26
  64. data/lib/pgbus/active_job/batch_id.rb +23 -1
  65. data/lib/pgbus/active_job/delivery.rb +49 -0
  66. data/lib/pgbus/active_job/executor.rb +3 -1
  67. data/lib/pgbus/batch/builder.rb +1 -0
  68. data/lib/pgbus/batch.rb +35 -3
  69. data/lib/pgbus/configuration/workflow_settings.rb +99 -0
  70. data/lib/pgbus/configuration.rb +21 -3
  71. data/lib/pgbus/generators/migration_detector.rb +40 -0
  72. data/lib/pgbus/instrumentation.rb +32 -0
  73. data/lib/pgbus/integrations/appsignal/dashboard.json +128 -1
  74. data/lib/pgbus/integrations/appsignal/event_span.rb +43 -0
  75. data/lib/pgbus/integrations/appsignal/job_span.rb +47 -0
  76. data/lib/pgbus/integrations/appsignal/span_subscriber.rb +128 -0
  77. data/lib/pgbus/integrations/appsignal/subscriber.rb +50 -100
  78. data/lib/pgbus/mcp/rack_app.rb +7 -2
  79. data/lib/pgbus/mcp/runner.rb +2 -1
  80. data/lib/pgbus/mcp/serialization.rb +25 -0
  81. data/lib/pgbus/mcp/server.rb +53 -10
  82. data/lib/pgbus/mcp/tools/deploy_tasks_tool.rb +1 -10
  83. data/lib/pgbus/mcp/tools/workflow_cancel_tool.rb +23 -0
  84. data/lib/pgbus/mcp/tools/workflow_definitions_tool.rb +36 -0
  85. data/lib/pgbus/mcp/tools/workflow_detail_tool.rb +38 -0
  86. data/lib/pgbus/mcp/tools/workflow_resume_at_tool.rb +32 -0
  87. data/lib/pgbus/mcp/tools/workflow_resume_tool.rb +24 -0
  88. data/lib/pgbus/mcp/tools/workflow_run_now_tool.rb +23 -0
  89. data/lib/pgbus/mcp/tools/workflow_signal_tool.rb +77 -0
  90. data/lib/pgbus/mcp/tools/workflow_skip_step_tool.rb +23 -0
  91. data/lib/pgbus/mcp/tools/workflow_stats_tool.rb +42 -0
  92. data/lib/pgbus/mcp/tools/workflows_attention_tool.rb +42 -0
  93. data/lib/pgbus/mcp/tools/workflows_tool.rb +60 -0
  94. data/lib/pgbus/mcp/workflow_insights_payload.rb +15 -0
  95. data/lib/pgbus/mcp/workflow_payloads.rb +53 -0
  96. data/lib/pgbus/mcp/write_tool.rb +134 -0
  97. data/lib/pgbus/mcp.rb +15 -0
  98. data/lib/pgbus/metrics/backends/statsd.rb +6 -0
  99. data/lib/pgbus/metrics/subscriber.rb +14 -1
  100. data/lib/pgbus/metrics/workflow_metrics.rb +65 -0
  101. data/lib/pgbus/process/dispatcher.rb +26 -0
  102. data/lib/pgbus/version.rb +1 -1
  103. data/lib/pgbus/web/data_source/workflow_actions.rb +109 -0
  104. data/lib/pgbus/web/data_source/workflow_insights.rb +99 -0
  105. data/lib/pgbus/web/data_source/workflow_list.rb +248 -0
  106. data/lib/pgbus/web/data_source.rb +3 -0
  107. data/lib/pgbus/web/workflow_action_plan.rb +62 -0
  108. data/lib/pgbus/web/workflow_insights_queries.rb +250 -0
  109. data/lib/pgbus/web/workflow_insights_report.rb +171 -0
  110. data/lib/pgbus/web/workflow_payload.rb +36 -0
  111. data/lib/pgbus/web/workflow_query.rb +82 -0
  112. data/lib/pgbus/web/workflow_state.rb +76 -0
  113. data/lib/pgbus/web/workflow_timeline.rb +113 -0
  114. data/lib/pgbus/web/workflow_window.rb +51 -0
  115. data/lib/pgbus/workflow/batch_finished_job.rb +21 -0
  116. data/lib/pgbus/workflow/dsl.rb +105 -0
  117. data/lib/pgbus/workflow/error_capture.rb +63 -0
  118. data/lib/pgbus/workflow/exception_policy.rb +170 -0
  119. data/lib/pgbus/workflow/fan_out.rb +157 -0
  120. data/lib/pgbus/workflow/fan_out_definition.rb +41 -0
  121. data/lib/pgbus/workflow/flow_control.rb +94 -0
  122. data/lib/pgbus/workflow/instance.rb +183 -0
  123. data/lib/pgbus/workflow/outside_verbs.rb +138 -0
  124. data/lib/pgbus/workflow/payload.rb +53 -0
  125. data/lib/pgbus/workflow/registry.rb +53 -0
  126. data/lib/pgbus/workflow/removed_step.rb +14 -0
  127. data/lib/pgbus/workflow/runner.rb +218 -0
  128. data/lib/pgbus/workflow/signal_matcher.rb +53 -0
  129. data/lib/pgbus/workflow/signals.rb +132 -0
  130. data/lib/pgbus/workflow/states.rb +119 -0
  131. data/lib/pgbus/workflow/step_context.rb +58 -0
  132. data/lib/pgbus/workflow/step_definition.rb +131 -0
  133. data/lib/pgbus/workflow/step_execution.rb +242 -0
  134. data/lib/pgbus/workflow/step_job.rb +28 -0
  135. data/lib/pgbus/workflow/step_outcome.rb +151 -0
  136. data/lib/pgbus/workflow/steps.rb +103 -0
  137. data/lib/pgbus/workflow/sweep.rb +156 -0
  138. data/lib/pgbus/workflow/test_helpers.rb +152 -0
  139. data/lib/pgbus/workflow/wait_timeout.rb +73 -0
  140. data/lib/pgbus/workflow/waiting.rb +82 -0
  141. data/lib/pgbus/workflow.rb +183 -0
  142. data/sig/pgbus/configuration.rbs +22 -0
  143. metadata +95 -1
@@ -140,6 +140,11 @@ nb:
140
140
  throughput: Gjennomstrømning
141
141
  throughput_detail: jobber/min de siste %{minutes} min
142
142
  throughput_unavailable: krever jobbstatistikk (rails g pgbus:add_job_stats)
143
+ workflows: Arbeidsflyter
144
+ workflows_attention:
145
+ one: "%{count} trenger oppmerksomhet"
146
+ other: "%{count} trenger oppmerksomhet"
147
+ workflows_detail: pågående (%{paused} satt på pause)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Dead letters
@@ -723,6 +728,7 @@ nb:
723
728
  processes: Prosesser
724
729
  queues: Køer
725
730
  recurring: Gjentakende
731
+ workflows: Arbeidsflyter
726
732
  return_to_app: Tilbake til appen
727
733
  title: Pgbus-dashbord
728
734
  toggle_dark_mode: Bytt til mørk modus
@@ -1023,3 +1029,439 @@ nb:
1023
1029
  disabled: Oppgave deaktivert
1024
1030
  enabled: Oppgave aktivert
1025
1031
  failed: Kunne ikke endre oppgave
1032
+ workflow_insights:
1033
+ back_to_classes: Alle arbeidsflytklasser
1034
+ back_to_runs: Alle arbeidsflytkjøringer
1035
+ bad_request: 'Ugyldig forespørsel: %{reason}'
1036
+ capped: 'Begrenset til workflow_retention (%{retention}): fullførte og avbrutte kjøringer som er eldre, slettes.'
1037
+ few_samples:
1038
+ one: n=%{count}, få målinger
1039
+ other: n=%{count}, få målinger
1040
+ index:
1041
+ description: 'Hvordan hver arbeidsflytklasse gjorde det over %{window}: kjøringene som pågår nå, kjøringene som ble avsluttet, og hvor lang tid en kjøring tar fra start til slutt.'
1042
+ empty_hint: 'Definer en underklasse av Pgbus::Workflow og start en kjøring: YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Ingen arbeidsflytklasse har kjørt ennå.
1044
+ headers:
1045
+ attention: Trenger tiltak
1046
+ cancelled: Avbrutt
1047
+ duration_p50: Varighet p50
1048
+ duration_p95: Varighet p95
1049
+ finished: Fullført
1050
+ ongoing: Pågående
1051
+ paused: Pauset
1052
+ workflow_class: Arbeidsflytklasse
1053
+ title: Arbeidsflytinnsikt
1054
+ links:
1055
+ at_step: "%{status} kjøringer ved %{step}"
1056
+ attention: kjøringer av %{workflow} som trenger tiltak
1057
+ cancelled: kjøringer av %{workflow} som ble avbrutt i vinduet
1058
+ cancelled_bucket: kjøringer avbrutt i perioden
1059
+ finished: kjøringer av %{workflow} som ble fullført i vinduet
1060
+ finished_bucket: kjøringer fullført i perioden
1061
+ ongoing: pågående kjøringer av %{workflow}
1062
+ paused: pausede kjøringer av %{workflow}
1063
+ started: kjøringer av %{workflow} som startet i vinduet
1064
+ started_bucket: kjøringer startet i perioden
1065
+ not_found:
1066
+ hint: Ingen underklasse av Pgbus::Workflow og ingen kjøring heter %{workflow} (eller lesingen feilet, se loggen).
1067
+ title: Ukjent arbeidsflytklasse
1068
+ not_loaded: Definisjonen er ikke lastet
1069
+ not_loaded_hint: 'Klassen lastes ikke lenger i appen: stegene kommer fra kjøringenes rader, i den rekkefølgen kjøringene nådde dem.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} kjøring på fjernet steg %{step}"
1073
+ other: "%{count} kjøringer på fjernet steg %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Alle steg
1077
+ caption: 'De samme tallene for de fem siste appversjonene som avsluttet et forsøk i vinduet, nyeste først: en forverring etter en utrulling vises som en rad.'
1078
+ empty: Ingen forsøk i dette vinduet registrerte en appversjon (config.app_revision).
1079
+ headers:
1080
+ attempts: Forsøk
1081
+ failed: Feilet
1082
+ reattempted: Forsøkt på nytt
1083
+ revision: Versjon
1084
+ run_time: Kjøretid
1085
+ skipped: Hoppet over
1086
+ step: Steg
1087
+ seen_html: sett %{from} til %{to}
1088
+ title: Per appversjon
1089
+ worse: opp fra %{rate} på %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Hvor lang tid den %{count} kjøringen som ble fullført i vinduet, tok fra start til slutt.
1095
+ other: Hvor lang tid de %{count} kjøringene som ble fullført i vinduet, tok fra start til slutt.
1096
+ headers:
1097
+ range: Varighet
1098
+ runs: Kjøringer
1099
+ over: "%{from} eller mer"
1100
+ title: Varighet fra start til slutt
1101
+ under: under %{to}
1102
+ series:
1103
+ cancelled: Avbrutt
1104
+ finished: Fullført
1105
+ runs: Kjøringer
1106
+ started: Startet
1107
+ throughput:
1108
+ caption: 'Kjøringer startet, fullført og avbrutt per %{bucket} over %{window}: %{started} startet, %{finished} fullført, %{cancelled} avbrutt.'
1109
+ headers:
1110
+ cancelled: Avbrutt
1111
+ finished: Fullført
1112
+ from: Fra
1113
+ started: Startet
1114
+ title: Kjøringer per %{bucket}
1115
+ description: 'Over %{window}: hvor kjøringene er nå, hvordan hvert steg presterer, og hvor kjøringer stopper.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'Av den %{count} kjøringen som startet i vinduet: hvor mange som nådde hvert steg, og hvor den er nå.'
1119
+ other: 'Av de %{count} kjøringene som startet i vinduet: hvor mange som nådde hvert steg, og hvor hver av dem er nå.'
1120
+ empty: Ingen kjøring startet i dette vinduet.
1121
+ headers:
1122
+ now_here: Nå ved steget
1123
+ reached: Nådd
1124
+ share: Av startede
1125
+ step: Steg
1126
+ here:
1127
+ cancelled:
1128
+ one: "%{count} avbrutt"
1129
+ other: "%{count} avbrutt"
1130
+ finished:
1131
+ one: "%{count} fullført"
1132
+ other: "%{count} fullført"
1133
+ paused:
1134
+ one: "%{count} pauset"
1135
+ other: "%{count} pauset"
1136
+ performing:
1137
+ one: "%{count} kjører"
1138
+ other: "%{count} kjører"
1139
+ ready:
1140
+ one: "%{count} planlagt"
1141
+ other: "%{count} planlagt"
1142
+ waiting:
1143
+ one: "%{count} venter"
1144
+ other: "%{count} venter"
1145
+ title: Trakt
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} forsøk"
1149
+ other: "%{count} forsøk"
1150
+ caption: 'Hvert steg i rekkefølge: kjøringene som står ved det nå, og hvordan forsøkene som ble avsluttet i vinduet, gikk.'
1151
+ empty: 'Ingen steg ennå: ingen kjøring av klassen har et steg i vinduet, og ingen pågår.'
1152
+ failed: Feilet
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Fjernet
1156
+ signal: Venter på et signal
1157
+ undeclared: Ikke i definisjonen
1158
+ live:
1159
+ paused: Pauset
1160
+ performing: Kjører
1161
+ ready: Planlagt
1162
+ waiting: Venter
1163
+ now_label: Kjøringer ved steget nå
1164
+ pickup: Henting
1165
+ reattempted: Forsøkt på nytt
1166
+ run_time: Kjøretid
1167
+ skipped: Hoppet over
1168
+ step_link: Pågående kjøringer ved %{step}
1169
+ title: Pipeline
1170
+ window_label: Forsøk som ble avsluttet i vinduet
1171
+ summary:
1172
+ attention: Trenger tiltak
1173
+ cancelled: Avbrutt
1174
+ duration: Varighet p50
1175
+ finished: Fullført
1176
+ ongoing: Pågående
1177
+ started: Startet
1178
+ window_label: Tidsvindu
1179
+ windows:
1180
+ 1h: den siste timen
1181
+ 24h: de siste 24 timene
1182
+ 30d: de siste 30 dagene
1183
+ 7d: de siste 7 dagene
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Avbryt alle
1187
+ bulk_resume: Gjenoppta alle
1188
+ cancel: Avbryt
1189
+ rerun: Kjør på nytt
1190
+ resume: Gjenoppta
1191
+ resume_at: Gjenoppta ved trinn
1192
+ run_now: Kjør nå
1193
+ signal: Send signal
1194
+ skip_step: Hopp over trinn
1195
+ attempt: forsøk %{attempt}
1196
+ attention:
1197
+ at_step_html: ved %{step}
1198
+ back: "← Arbeidsflyter"
1199
+ cancel_all:
1200
+ one: Avbryt alle %{count}
1201
+ other: Avbryt alle %{count}
1202
+ confirm:
1203
+ cancel:
1204
+ one: Avbryte kjøringen som sitter fast ved %{step}?
1205
+ other: Avbryte alle %{count} kjøringer som sitter fast ved %{step}?
1206
+ cancel_error:
1207
+ one: Avbryte kjøringen som sitter fast ved %{step} på grunn av %{error}?
1208
+ other: Avbryte alle %{count} kjøringer som sitter fast ved %{step} på grunn av %{error}?
1209
+ resume:
1210
+ one: Gjenoppta kjøringen som er på pause ved %{step}?
1211
+ other: Gjenoppta alle %{count} kjøringer som er på pause ved %{step}?
1212
+ resume_error:
1213
+ one: Gjenoppta kjøringen som er på pause ved %{step} på grunn av %{error}?
1214
+ other: Gjenoppta alle %{count} kjøringer som er på pause ved %{step} på grunn av %{error}?
1215
+ description: Pågående kjøringer som venter på et menneske, gruppert etter hva som stoppet dem. Når årsaken er rettet, handle på hele gruppen.
1216
+ empty_hint: Ingen pågående kjøring er på pause, har stoppet, er forsinket eller har ventet lenger enn workflow_waiting_visibility_threshold.
1217
+ empty_title: Ingenting trenger oppmerksomhet.
1218
+ first_seen_html: første gang %{time}
1219
+ headers:
1220
+ actions: Handlinger
1221
+ reason: Årsak
1222
+ runs: Kjøringer
1223
+ seen: Sett
1224
+ workflow: Arbeidsflyt
1225
+ last_seen_html: sist %{time}
1226
+ only_class_html: Bare %{workflow}.
1227
+ reasons:
1228
+ overdue: 'Forsinket: forfalt, men ikke hentet'
1229
+ paused_error: På pause på grunn av en feil
1230
+ paused_manual: Satt på pause for hånd
1231
+ stalled: 'Har stoppet: workeren svarer ikke lenger'
1232
+ waiting_overdue: Venter for lenge
1233
+ resume_all:
1234
+ one: Gjenoppta alle %{count}
1235
+ other: Gjenoppta alle %{count}
1236
+ show_all: Vis alle klasser
1237
+ show_runs: Vis kjøringer
1238
+ title: Trenger oppmerksomhet
1239
+ audit:
1240
+ by: "%{event} av %{actor}"
1241
+ empty: Ingen hendelser registrert.
1242
+ headers:
1243
+ what: Hva skjedde
1244
+ when: Når
1245
+ title: Revisjonslogg
1246
+ with_reason: "%{sentence}: %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Ugyldig forespørsel: %{reason}'
1249
+ confirm:
1250
+ cancel: Avbryte denne arbeidsflyten? De åpne trinnene avbrytes, og den kjører ikke igjen.
1251
+ rerun: Starte denne arbeidsflyten på nytt som en ny kjøring, med samme emne og argumenter?
1252
+ resume: Gjenoppta denne arbeidsflyten?
1253
+ resume_at: Gjenoppta denne arbeidsflyten ved det valgte trinnet? De åpne trinnene avbrytes først.
1254
+ run_now: Kjøre det planlagte trinnet nå i stedet for å vente?
1255
+ signal: Sende dette signalet til arbeidsflyten?
1256
+ skip_step: Hoppe over trinnet denne arbeidsflyten venter på og gå til neste?
1257
+ events:
1258
+ cancelled: Avbrutt
1259
+ fan_out_finished: Fan-out fullført
1260
+ fan_out_opened: Fan-out åpnet
1261
+ finished: Fullført
1262
+ late_completion_ignored: Sen fullføring ignorert
1263
+ paused: På pause
1264
+ rerun: Kjørt på nytt
1265
+ rescheduled: Omplanlagt
1266
+ resumed: Gjenopptatt
1267
+ run_now: Kjør nå
1268
+ signal_claimed: Signal tatt
1269
+ signal_received: Signal mottatt
1270
+ stall_detected: Stopp oppdaget
1271
+ started: Startet
1272
+ step_completed: Trinn fullført
1273
+ step_failed: Trinn mislyktes
1274
+ step_reattempted: Trinn forsøkt på nytt
1275
+ step_scheduled: Trinn planlagt
1276
+ step_skipped: Trinn hoppet over
1277
+ step_started: Trinn startet
1278
+ step_waiting: Trinn venter
1279
+ wait_timed_out: Ventetid utløpt
1280
+ filters:
1281
+ apply: Bruk filtre
1282
+ clear: Fjern
1283
+ created_from: Opprettet fra
1284
+ created_to: Opprettet til
1285
+ ended_from: Avsluttet fra
1286
+ ended_to: Avsluttet til
1287
+ error_class: Feilklasse
1288
+ step: Gjeldende trinn
1289
+ subject_id: Emne-ID
1290
+ subject_type: Emnetype
1291
+ workflow_class: Arbeidsflytklasse
1292
+ workflow_id: Arbeidsflyt-ID
1293
+ flash:
1294
+ bad_group: Den gruppen er ikke gyldig.
1295
+ bulk_cancel:
1296
+ one: Avbrøt %{count}.
1297
+ other: Avbrøt %{count}.
1298
+ bulk_cancel_skipped: Avbrøt %{count}; %{skipped} hadde allerede gått videre.
1299
+ bulk_failed: "%{count} kunne ikke endres: %{reason}"
1300
+ bulk_more: 'Flere kjøringer kan vente: trykk igjen for de neste %{cap}.'
1301
+ bulk_resume:
1302
+ one: Gjenopptok %{count}.
1303
+ other: Gjenopptok %{count}.
1304
+ bulk_resume_skipped: Gjenopptok %{count}; %{skipped} hadde allerede gått videre.
1305
+ cancel: Arbeidsflyten ble avbrutt.
1306
+ choose_step: Velg et trinn å gjenoppta ved.
1307
+ failed:
1308
+ not_allowed: 'Ikke utført: kjøringen er nå %{status}.'
1309
+ not_found: Den arbeidsflyten finnes ikke lenger.
1310
+ other: "%{action} mislyktes: %{reason}"
1311
+ payload_not_object: 'Ikke sendt: payload er ikke et JSON-objekt.'
1312
+ payload_too_large: 'Ikke sendt: payload er over %{limit} byte.'
1313
+ rerun: En ny kjøring ble startet.
1314
+ resume: Arbeidsflyten ble gjenopptatt.
1315
+ resume_at: Arbeidsflyten ble gjenopptatt ved %{step}.
1316
+ run_now: Det planlagte trinnet kjører nå.
1317
+ signal: Signalet %{name} ble sendt.
1318
+ signal_duplicate: Signalet %{name} er allerede levert med denne nøkkelen; ingenting nytt ble sendt.
1319
+ signal_name_missing: 'Ikke sendt: signalet trenger et navn.'
1320
+ skip_step: Trinnet ble hoppet over.
1321
+ headers:
1322
+ current_step: Gjeldende trinn
1323
+ last_activity: Siste aktivitet
1324
+ started: Startet
1325
+ status: Status
1326
+ subject: Emne
1327
+ workflow: Arbeidsflyt
1328
+ index:
1329
+ attention_link:
1330
+ one: Trenger oppmerksomhet (%{count})
1331
+ other: Trenger oppmerksomhet (%{count})
1332
+ description: 'Varige kjøringer i flere trinn: hva hver enkelt gjør og hva som skjer videre.'
1333
+ empty_hint: Velg en annen status eller fjern filtrene. En kjøring starter med YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Ingen arbeidsflyter samsvarer.
1335
+ insights_link: Innsikt per klasse
1336
+ status_label: Filtrer på status
1337
+ title: Arbeidsflyter
1338
+ next:
1339
+ cancelled_html: Avbrutt %{ago}.
1340
+ due_html: 'Klar: %{step} skulle kjørt %{ago} og venter på en worker.'
1341
+ finished_html: Fullført %{ago}.
1342
+ overdue_html: 'Forsinket: %{step} skulle kjørt %{ago}; opprydningen sender det på nytt.'
1343
+ paused_error_html: 'På pause ved %{step}: %{error} — gjenoppta eller avbryt.'
1344
+ paused_manual_html: På pause ved %{step} — gjenoppta eller avbryt.
1345
+ performing_attempt_html: Kjører %{step} (forsøk %{attempt}).
1346
+ performing_html: Kjører %{step}.
1347
+ ready_html: 'Klar: %{step} kjører neste gang.'
1348
+ scheduled_html: 'Planlagt: %{step} kjører %{time}.'
1349
+ unknown_html: 'Status: %{status}.'
1350
+ waiting_batch_html: Venter på gruppen %{batch} (%{done} av %{total} jobber ferdige).
1351
+ waiting_signal_html: Venter på signalet %{signal} siden %{ago}.
1352
+ waiting_signal_timeout_html: Venter på signalet %{signal} siden %{ago}. Ventetiden utløper %{time}.
1353
+ waiting_step_html: Venter på %{step}.
1354
+ not_found:
1355
+ hint: Den kan ha blitt fullført og fjernet etter workflow_retention, eller databasen kunne ikke leses (se loggen).
1356
+ title: Arbeidsflyten ble ikke funnet
1357
+ outcomes:
1358
+ cancelled: avbrutt
1359
+ completed: fullført
1360
+ finished_early: avsluttet kjøringen tidlig
1361
+ paused: satte kjøringen på pause
1362
+ reattempted: forsøkt på nytt
1363
+ skipped: hoppet over
1364
+ resume:
1365
+ carry_on: 'Gjenoppta: fortsett med %{step}'
1366
+ continue: 'Gjenoppta: fortsett med %{step}'
1367
+ finish: 'Gjenoppta: avslutt kjøringen'
1368
+ resend: 'Gjenoppta: send %{step} på nytt'
1369
+ retry: 'Gjenoppta: prøv %{step} på nytt'
1370
+ rewait: 'Gjenoppta: vent på %{step} igjen'
1371
+ show:
1372
+ actions: Handlinger
1373
+ arguments: Argumenter
1374
+ back: "← Arbeidsflyter"
1375
+ cancelled_at: Avbrutt
1376
+ class_missing: "%{workflow_class} er ikke lastet i denne prosessen: kjøringen kan fortsatt avbrytes, men ikke gjenopptas."
1377
+ definition_outdated: 'Denne kjøringen startet på en eldre definisjon av %{workflow_class}: trinnene har endret seg siden start.'
1378
+ details: Detaljer
1379
+ finished_at: Fullført
1380
+ no_arguments: Denne kjøringen har ingen argumenter.
1381
+ paused_at: På pause
1382
+ reason_hint: Lagres i revisjonsloggen, ved siden av hvem som gjorde det.
1383
+ reason_label: Årsak (valgfri)
1384
+ rerun_of: Omkjøring av
1385
+ reruns: Kjørt på nytt som
1386
+ resume_at_label: Trinn å gjenoppta ved
1387
+ signal:
1388
+ hint: Et trinn som venter på det våkner med en gang; ellers blir det liggende ventende til et trinn tar det.
1389
+ name: Signalnavn
1390
+ payload: Payload (JSON)
1391
+ send: Send signal
1392
+ title: Send et signal
1393
+ signal_statuses:
1394
+ claimed: Tatt
1395
+ consumed: Brukt
1396
+ pending: Venter
1397
+ signals:
1398
+ empty: Ingen signaler er levert til denne kjøringen.
1399
+ headers:
1400
+ claimed: Tatt
1401
+ consumed: Brukt
1402
+ idempotency_key: Idempotensnøkkel
1403
+ name: Signal
1404
+ received: Mottatt
1405
+ status: Status
1406
+ payload: Payload
1407
+ title: Signaler
1408
+ statuses:
1409
+ cancelled: Avbrutt
1410
+ finished: Fullført
1411
+ gone: borte
1412
+ paused: På pause
1413
+ performing: Kjører
1414
+ ready: Klar
1415
+ scheduled: Planlagt
1416
+ waiting: Venter
1417
+ step_statuses:
1418
+ cancelled: Avbrutt
1419
+ completed: Fullført
1420
+ failed: Mislyktes
1421
+ in_progress: Kjører
1422
+ scheduled: Planlagt
1423
+ skipped: Hoppet over
1424
+ waiting: Venter
1425
+ steps:
1426
+ batch: gruppe %{batch}
1427
+ caused_by: Forårsaket av %{error}
1428
+ empty: Ingen forsøk ennå.
1429
+ headers:
1430
+ finished: Fullført
1431
+ queued: I kø
1432
+ ran: Kjørte
1433
+ scheduled: Planlagt
1434
+ started: Startet
1435
+ status: Status
1436
+ step: Trinn
1437
+ waited: Ventet
1438
+ worker: Worker
1439
+ revision: revisjon %{revision}
1440
+ show_backtrace: Vis backtrace
1441
+ title: Forsøk
1442
+ waiting_for: venter deretter %{duration}
1443
+ waits_for_html: venter på %{signal}
1444
+ tabs:
1445
+ all: Alle
1446
+ cancelled: Avbrutt
1447
+ finished: Fullført
1448
+ ongoing: Pågående
1449
+ paused: På pause
1450
+ performing: Kjører
1451
+ ready: Klare
1452
+ waiting: Venter
1453
+ timeline:
1454
+ caption: 'Hvert forsøk, eldst øverst: ventet (ventetiden), i kø (forfalt, ikke hentet ennå), kjørte (farget etter utfall) og venter (på et signal eller sin gruppe), med pausene på en egen rad. Forsøkstabellen under viser de samme varighetene.'
1455
+ empty: Ingen forsøk ennå.
1456
+ paused_period_html: Satt på pause %{from} i %{duration}
1457
+ paused_row: På pause
1458
+ series:
1459
+ paused: På pause
1460
+ queued: I kø
1461
+ ran_cancelled: Kjørte, avbrutt
1462
+ ran_failed: Kjørte, mislyktes
1463
+ ran_ok: Kjørte
1464
+ ran_open: Kjører
1465
+ waited: Ventet
1466
+ waiting: Venter
1467
+ title: Tidslinje