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 @@ fr:
140
140
  throughput: Débit
141
141
  throughput_detail: tâches/min sur les %{minutes} dernières min
142
142
  throughput_unavailable: nécessite les statistiques de jobs (rails g pgbus:add_job_stats)
143
+ workflows: Workflows
144
+ workflows_attention:
145
+ one: "%{count} requiert votre attention"
146
+ other: "%{count} requièrent votre attention"
147
+ workflows_detail: en cours (%{paused} en pause)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Dead letters
@@ -723,6 +728,7 @@ fr:
723
728
  processes: Processus
724
729
  queues: Files d'attente
725
730
  recurring: Récurrent
731
+ workflows: Workflows
726
732
  return_to_app: Retour à l'application
727
733
  title: Tableau de bord Pgbus
728
734
  toggle_dark_mode: Basculer en mode sombre
@@ -1023,3 +1029,439 @@ fr:
1023
1029
  disabled: Tâche désactivée
1024
1030
  enabled: Tâche activée
1025
1031
  failed: Impossible de basculer la tâche
1032
+ workflow_insights:
1033
+ back_to_classes: Toutes les classes de workflow
1034
+ back_to_runs: Toutes les exécutions de workflow
1035
+ bad_request: 'Requête invalide : %{reason}'
1036
+ capped: 'Limité à workflow_retention (%{retention}) : les exécutions terminées et annulées plus anciennes sont supprimées.'
1037
+ few_samples:
1038
+ one: n=%{count}, peu d'échantillons
1039
+ other: n=%{count}, peu d'échantillons
1040
+ index:
1041
+ description: 'Comment chaque classe de workflow s''est comportée sur %{window} : les exécutions en cours, celles qui se sont terminées et la durée d''une exécution du début à la fin.'
1042
+ empty_hint: 'Définissez une sous-classe de Pgbus::Workflow et démarrez une exécution : YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Aucune classe de workflow n'a encore tourné.
1044
+ headers:
1045
+ attention: À traiter
1046
+ cancelled: Annulées
1047
+ duration_p50: Durée p50
1048
+ duration_p95: Durée p95
1049
+ finished: Terminées
1050
+ ongoing: En cours
1051
+ paused: En pause
1052
+ workflow_class: Classe de workflow
1053
+ title: Analyse des workflows
1054
+ links:
1055
+ at_step: "%{status} exécutions à %{step}"
1056
+ attention: exécutions de %{workflow} à traiter
1057
+ cancelled: exécutions de %{workflow} annulées dans la fenêtre
1058
+ cancelled_bucket: exécutions annulées sur cette période
1059
+ finished: exécutions de %{workflow} terminées dans la fenêtre
1060
+ finished_bucket: exécutions terminées sur cette période
1061
+ ongoing: exécutions en cours de %{workflow}
1062
+ paused: exécutions en pause de %{workflow}
1063
+ started: exécutions de %{workflow} démarrées dans la fenêtre
1064
+ started_bucket: exécutions démarrées sur cette période
1065
+ not_found:
1066
+ hint: Aucune sous-classe de Pgbus::Workflow ni aucune exécution ne s'appelle %{workflow} (ou la lecture a échoué, voir le journal).
1067
+ title: Classe de workflow inconnue
1068
+ not_loaded: Définition non chargée
1069
+ not_loaded_hint: 'Cette classe ne se charge plus dans l''application : ses étapes viennent des lignes de ses exécutions, dans l''ordre où les exécutions les ont atteintes.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} exécution sur l'étape supprimée %{step}"
1073
+ other: "%{count} exécutions sur l'étape supprimée %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Toutes les étapes
1077
+ caption: 'Les mêmes chiffres pour les cinq dernières révisions de l''application qui ont terminé une tentative dans la fenêtre, la plus récente d''abord : une régression après un déploiement apparaît comme une ligne.'
1078
+ empty: Aucune tentative dans cette fenêtre n'a enregistré de révision de l'application (config.app_revision).
1079
+ headers:
1080
+ attempts: Tentatives
1081
+ failed: Échouées
1082
+ reattempted: Relancées
1083
+ revision: Révision
1084
+ run_time: Durée d'exécution
1085
+ skipped: Ignorées
1086
+ step: Étape
1087
+ seen_html: vue de %{from} à %{to}
1088
+ title: Par révision de l'application
1089
+ worse: en hausse depuis %{rate} sur %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Combien de temps a pris l'exécution (%{count}) terminée dans la fenêtre, du début à la fin.
1095
+ other: Combien de temps ont pris les %{count} exécutions terminées dans la fenêtre, du début à la fin.
1096
+ headers:
1097
+ range: Durée
1098
+ runs: Exécutions
1099
+ over: "%{from} ou plus"
1100
+ title: Durée de bout en bout
1101
+ under: moins de %{to}
1102
+ series:
1103
+ cancelled: Annulées
1104
+ finished: Terminées
1105
+ runs: Exécutions
1106
+ started: Démarrées
1107
+ throughput:
1108
+ caption: 'Exécutions démarrées, terminées et annulées par %{bucket} sur %{window} : %{started} démarrées, %{finished} terminées, %{cancelled} annulées.'
1109
+ headers:
1110
+ cancelled: Annulées
1111
+ finished: Terminées
1112
+ from: Depuis
1113
+ started: Démarrées
1114
+ title: Exécutions par %{bucket}
1115
+ description: 'Sur %{window} : où en sont ses exécutions, comment chaque étape se comporte et où les exécutions s''arrêtent.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'Sur l''exécution (%{count}) démarrée dans la fenêtre : combien ont atteint chaque étape, et où elle en est.'
1119
+ other: 'Sur les %{count} exécutions démarrées dans la fenêtre : combien ont atteint chaque étape, et où chacune en est.'
1120
+ empty: Aucune exécution n'a démarré dans cette fenêtre.
1121
+ headers:
1122
+ now_here: Maintenant à cette étape
1123
+ reached: Atteinte
1124
+ share: Des démarrées
1125
+ step: Étape
1126
+ here:
1127
+ cancelled:
1128
+ one: "%{count} annulée"
1129
+ other: "%{count} annulées"
1130
+ finished:
1131
+ one: "%{count} terminée"
1132
+ other: "%{count} terminées"
1133
+ paused:
1134
+ one: "%{count} en pause"
1135
+ other: "%{count} en pause"
1136
+ performing:
1137
+ one: "%{count} en exécution"
1138
+ other: "%{count} en exécution"
1139
+ ready:
1140
+ one: "%{count} planifiée"
1141
+ other: "%{count} planifiées"
1142
+ waiting:
1143
+ one: "%{count} en attente"
1144
+ other: "%{count} en attente"
1145
+ title: Entonnoir
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} tentative"
1149
+ other: "%{count} tentatives"
1150
+ caption: 'Chaque étape dans l''ordre : les exécutions qui s''y trouvent maintenant, et comment se sont passées ses tentatives terminées dans la fenêtre.'
1151
+ empty: 'Aucune étape pour l''instant : aucune exécution de cette classe n''a d''étape dans la fenêtre et aucune n''est en cours.'
1152
+ failed: Échouées
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Supprimée
1156
+ signal: Attend un signal
1157
+ undeclared: Absente de la définition
1158
+ live:
1159
+ paused: En pause
1160
+ performing: En exécution
1161
+ ready: Planifiées
1162
+ waiting: En attente
1163
+ now_label: Exécutions à cette étape maintenant
1164
+ pickup: Prise en charge
1165
+ reattempted: Relancées
1166
+ run_time: Durée d'exécution
1167
+ skipped: Ignorées
1168
+ step_link: Exécutions en cours à %{step}
1169
+ title: Pipeline
1170
+ window_label: Tentatives terminées dans la fenêtre
1171
+ summary:
1172
+ attention: À traiter
1173
+ cancelled: Annulées
1174
+ duration: Durée p50
1175
+ finished: Terminées
1176
+ ongoing: En cours
1177
+ started: Démarrées
1178
+ window_label: Fenêtre de temps
1179
+ windows:
1180
+ 1h: la dernière heure
1181
+ 24h: les dernières 24 heures
1182
+ 30d: les 30 derniers jours
1183
+ 7d: les 7 derniers jours
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Tout annuler
1187
+ bulk_resume: Tout reprendre
1188
+ cancel: Annuler
1189
+ rerun: Relancer
1190
+ resume: Reprendre
1191
+ resume_at: Reprendre à l'étape
1192
+ run_now: Exécuter maintenant
1193
+ signal: Envoyer un signal
1194
+ skip_step: Ignorer l'étape
1195
+ attempt: tentative %{attempt}
1196
+ attention:
1197
+ at_step_html: à %{step}
1198
+ back: "← Workflows"
1199
+ cancel_all:
1200
+ one: Annuler %{count}
1201
+ other: Tout annuler (%{count})
1202
+ confirm:
1203
+ cancel:
1204
+ one: Annuler l'exécution bloquée à %{step} ?
1205
+ other: Annuler les %{count} exécutions bloquées à %{step} ?
1206
+ cancel_error:
1207
+ one: Annuler l'exécution bloquée à %{step} sur %{error} ?
1208
+ other: Annuler les %{count} exécutions bloquées à %{step} sur %{error} ?
1209
+ resume:
1210
+ one: Reprendre l'exécution en pause à %{step} ?
1211
+ other: Reprendre les %{count} exécutions en pause à %{step} ?
1212
+ resume_error:
1213
+ one: Reprendre l'exécution en pause à %{step} sur %{error} ?
1214
+ other: Reprendre les %{count} exécutions en pause à %{step} sur %{error} ?
1215
+ description: Exécutions en cours qui attendent une personne, regroupées selon ce qui les a arrêtées. Une fois la cause corrigée, agissez sur tout le groupe.
1216
+ empty_hint: Aucune exécution en cours n'est en pause, bloquée, en retard ou en attente au-delà de workflow_waiting_visibility_threshold.
1217
+ empty_title: Rien à traiter.
1218
+ first_seen_html: première fois %{time}
1219
+ headers:
1220
+ actions: Actions
1221
+ reason: Raison
1222
+ runs: Exécutions
1223
+ seen: Vu
1224
+ workflow: Workflow
1225
+ last_seen_html: dernière fois %{time}
1226
+ only_class_html: "%{workflow} uniquement."
1227
+ reasons:
1228
+ overdue: 'En retard : dû, mais pas pris en charge'
1229
+ paused_error: En pause sur une erreur
1230
+ paused_manual: Mis en pause manuellement
1231
+ stalled: 'Bloqué : son worker ne répond plus'
1232
+ waiting_overdue: Attente trop longue
1233
+ resume_all:
1234
+ one: Reprendre %{count}
1235
+ other: Tout reprendre (%{count})
1236
+ show_all: Afficher toutes les classes
1237
+ show_runs: Afficher les exécutions
1238
+ title: À traiter
1239
+ audit:
1240
+ by: "%{event} par %{actor}"
1241
+ empty: Aucun événement enregistré.
1242
+ headers:
1243
+ what: Ce qui s'est passé
1244
+ when: Quand
1245
+ title: Journal d'audit
1246
+ with_reason: "%{sentence} : %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Requête invalide : %{reason}'
1249
+ confirm:
1250
+ cancel: Annuler ce workflow ? Ses étapes ouvertes sont annulées et il ne s'exécutera plus.
1251
+ rerun: Relancer ce workflow comme nouvelle exécution, avec le même sujet et les mêmes arguments ?
1252
+ resume: Reprendre ce workflow ?
1253
+ resume_at: Reprendre ce workflow à l'étape choisie ? Ses étapes ouvertes sont d'abord annulées.
1254
+ run_now: Exécuter maintenant l'étape planifiée au lieu d'attendre ?
1255
+ signal: Envoyer ce signal au workflow ?
1256
+ skip_step: Ignorer l'étape attendue par ce workflow et passer à la suivante ?
1257
+ events:
1258
+ cancelled: Annulé
1259
+ fan_out_finished: Fan-out terminé
1260
+ fan_out_opened: Fan-out ouvert
1261
+ finished: Terminé
1262
+ late_completion_ignored: Fin tardive ignorée
1263
+ paused: Mis en pause
1264
+ rerun: Relancé
1265
+ rescheduled: Replanifié
1266
+ resumed: Repris
1267
+ run_now: Exécuter maintenant
1268
+ signal_claimed: Signal pris en charge
1269
+ signal_received: Signal reçu
1270
+ stall_detected: Blocage détecté
1271
+ started: Démarré
1272
+ step_completed: Étape terminée
1273
+ step_failed: Étape échouée
1274
+ step_reattempted: Étape réessayée
1275
+ step_scheduled: Étape planifiée
1276
+ step_skipped: Étape ignorée
1277
+ step_started: Étape démarrée
1278
+ step_waiting: Étape en attente
1279
+ wait_timed_out: Attente expirée
1280
+ filters:
1281
+ apply: Appliquer les filtres
1282
+ clear: Effacer
1283
+ created_from: Créé à partir du
1284
+ created_to: Créé jusqu'au
1285
+ ended_from: Terminé depuis
1286
+ ended_to: Terminé jusqu'au
1287
+ error_class: Classe d'erreur
1288
+ step: Étape en cours
1289
+ subject_id: ID du sujet
1290
+ subject_type: Type de sujet
1291
+ workflow_class: Classe du workflow
1292
+ workflow_id: ID du workflow
1293
+ flash:
1294
+ bad_group: Ce groupe n'est pas valide.
1295
+ bulk_cancel:
1296
+ one: "%{count} annulé."
1297
+ other: "%{count} annulés."
1298
+ bulk_cancel_skipped: "%{count} annulés ; %{skipped} avaient déjà avancé."
1299
+ bulk_failed: "%{count} n'ont pas pu être modifiés : %{reason}"
1300
+ bulk_more: 'D''autres exécutions attendent peut-être : appuyez à nouveau pour les %{cap} suivantes.'
1301
+ bulk_resume:
1302
+ one: "%{count} repris."
1303
+ other: "%{count} repris."
1304
+ bulk_resume_skipped: "%{count} repris ; %{skipped} avaient déjà avancé."
1305
+ cancel: Workflow annulé.
1306
+ choose_step: Choisissez une étape de reprise.
1307
+ failed:
1308
+ not_allowed: 'Non effectué : l''exécution est maintenant %{status}.'
1309
+ not_found: Ce workflow n'existe plus.
1310
+ other: "%{action} a échoué : %{reason}"
1311
+ payload_not_object: 'Non envoyé : la charge utile n''est pas un objet JSON.'
1312
+ payload_too_large: 'Non envoyé : la charge utile dépasse %{limit} octets.'
1313
+ rerun: Nouvelle exécution démarrée.
1314
+ resume: Workflow repris.
1315
+ resume_at: Workflow repris à l'étape %{step}.
1316
+ run_now: L'étape planifiée s'exécute maintenant.
1317
+ signal: Signal %{name} envoyé.
1318
+ signal_duplicate: Le signal %{name} a déjà été remis avec cette clé ; rien de nouveau n'a été envoyé.
1319
+ signal_name_missing: 'Non envoyé : le signal doit avoir un nom.'
1320
+ skip_step: Étape ignorée.
1321
+ headers:
1322
+ current_step: Étape en cours
1323
+ last_activity: Dernière activité
1324
+ started: Démarré
1325
+ status: Statut
1326
+ subject: Sujet
1327
+ workflow: Workflow
1328
+ index:
1329
+ attention_link:
1330
+ one: À traiter (%{count})
1331
+ other: À traiter (%{count})
1332
+ description: 'Exécutions durables en plusieurs étapes : ce que fait chacune et ce qui se passe ensuite.'
1333
+ empty_hint: Choisissez un autre statut ou effacez les filtres. Une exécution démarre avec YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Aucun workflow ne correspond.
1335
+ insights_link: Analyse par classe
1336
+ status_label: Filtrer par statut
1337
+ title: Workflows
1338
+ next:
1339
+ cancelled_html: Annulé %{ago}.
1340
+ due_html: 'Prêt : %{step} était dû %{ago} et attend un worker.'
1341
+ finished_html: Terminé %{ago}.
1342
+ overdue_html: 'En retard : %{step} était dû %{ago} ; le balayage le renvoie.'
1343
+ paused_error_html: 'En pause sur %{step} : %{error} — reprenez ou annulez.'
1344
+ paused_manual_html: En pause sur %{step} — reprenez ou annulez.
1345
+ performing_attempt_html: Exécution de %{step} (tentative %{attempt}).
1346
+ performing_html: Exécution de %{step}.
1347
+ ready_html: 'Prêt : %{step} s''exécute ensuite.'
1348
+ scheduled_html: 'Planifié : %{step} s''exécute %{time}.'
1349
+ unknown_html: 'Statut : %{status}.'
1350
+ waiting_batch_html: En attente du lot %{batch} (%{done} travaux sur %{total} terminés).
1351
+ waiting_signal_html: En attente du signal %{signal} depuis %{ago}.
1352
+ waiting_signal_timeout_html: En attente du signal %{signal} depuis %{ago}. L'attente expire %{time}.
1353
+ waiting_step_html: En attente de %{step}.
1354
+ not_found:
1355
+ hint: Il est peut-être terminé et supprimé après workflow_retention, ou la base de données n'a pas pu être lue (voir le journal).
1356
+ title: Workflow introuvable
1357
+ outcomes:
1358
+ cancelled: annulé
1359
+ completed: terminé
1360
+ finished_early: a terminé l'exécution plus tôt
1361
+ paused: a mis l'exécution en pause
1362
+ reattempted: réessayé
1363
+ skipped: ignoré
1364
+ resume:
1365
+ carry_on: 'Reprendre : poursuivre avec %{step}'
1366
+ continue: 'Reprendre : continuer avec %{step}'
1367
+ finish: 'Reprendre : terminer l''exécution'
1368
+ resend: 'Reprendre : renvoyer %{step}'
1369
+ retry: 'Reprendre : réessayer %{step}'
1370
+ rewait: 'Reprendre : attendre à nouveau %{step}'
1371
+ show:
1372
+ actions: Actions
1373
+ arguments: Arguments
1374
+ back: "← Workflows"
1375
+ cancelled_at: Annulé
1376
+ class_missing: "%{workflow_class} n'est pas chargé dans ce processus : l'exécution peut encore être annulée, mais pas reprise."
1377
+ definition_outdated: 'Cette exécution a démarré avec une ancienne définition de %{workflow_class} : ses étapes ont changé depuis.'
1378
+ details: Détails
1379
+ finished_at: Terminé
1380
+ no_arguments: Cette exécution n'a pas d'arguments.
1381
+ paused_at: Mis en pause
1382
+ reason_hint: Consigné dans le journal d'audit, avec l'auteur de l'action.
1383
+ reason_label: Motif (facultatif)
1384
+ rerun_of: Relance de
1385
+ reruns: Relancé en
1386
+ resume_at_label: Étape de reprise
1387
+ signal:
1388
+ hint: Une étape qui l'attend se réveille aussitôt ; sinon il reste en attente jusqu'à ce qu'une étape le prenne.
1389
+ name: Nom du signal
1390
+ payload: Charge utile (JSON)
1391
+ send: Envoyer le signal
1392
+ title: Envoyer un signal
1393
+ signal_statuses:
1394
+ claimed: Pris en charge
1395
+ consumed: Consommé
1396
+ pending: En attente
1397
+ signals:
1398
+ empty: Aucun signal remis à cette exécution.
1399
+ headers:
1400
+ claimed: Pris en charge
1401
+ consumed: Consommé
1402
+ idempotency_key: Clé d'idempotence
1403
+ name: Signal
1404
+ received: Reçu
1405
+ status: Statut
1406
+ payload: Charge utile
1407
+ title: Signaux
1408
+ statuses:
1409
+ cancelled: Annulé
1410
+ finished: Terminé
1411
+ gone: disparu
1412
+ paused: En pause
1413
+ performing: En exécution
1414
+ ready: Prêt
1415
+ scheduled: Planifié
1416
+ waiting: En attente
1417
+ step_statuses:
1418
+ cancelled: Annulée
1419
+ completed: Terminée
1420
+ failed: Échouée
1421
+ in_progress: En cours
1422
+ scheduled: Planifiée
1423
+ skipped: Ignorée
1424
+ waiting: En attente
1425
+ steps:
1426
+ batch: lot %{batch}
1427
+ caused_by: Causé par %{error}
1428
+ empty: Aucune tentative pour l'instant.
1429
+ headers:
1430
+ finished: Terminée
1431
+ queued: En file
1432
+ ran: Exécution
1433
+ scheduled: Planifiée
1434
+ started: Démarrée
1435
+ status: Statut
1436
+ step: Étape
1437
+ waited: Attente
1438
+ worker: Worker
1439
+ revision: révision %{revision}
1440
+ show_backtrace: Afficher la trace
1441
+ title: Tentatives
1442
+ waiting_for: puis attente de %{duration}
1443
+ waits_for_html: attend %{signal}
1444
+ tabs:
1445
+ all: Tous
1446
+ cancelled: Annulés
1447
+ finished: Terminés
1448
+ ongoing: En cours
1449
+ paused: En pause
1450
+ performing: En exécution
1451
+ ready: Prêts
1452
+ waiting: En attente
1453
+ timeline:
1454
+ caption: 'Chaque tentative, la plus ancienne en haut : attente (son délai), en file (due, pas encore prise), exécution (colorée selon son issue) et en attente (d''un signal ou de son lot), avec les pauses sur leur propre ligne. Le tableau des tentatives ci-dessous donne les mêmes durées.'
1455
+ empty: Aucune tentative pour l'instant.
1456
+ paused_period_html: En pause à %{from} pendant %{duration}
1457
+ paused_row: En pause
1458
+ series:
1459
+ paused: En pause
1460
+ queued: En file
1461
+ ran_cancelled: Exécuté, annulé
1462
+ ran_failed: Exécuté, échoué
1463
+ ran_ok: Exécuté
1464
+ ran_open: En cours
1465
+ waited: Attendu
1466
+ waiting: En attente
1467
+ title: Chronologie