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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +104 -9
- data/Rakefile +6 -1
- data/app/controllers/pgbus/dashboard_controller.rb +2 -0
- data/app/controllers/pgbus/workflow_definitions_controller.rb +28 -0
- data/app/controllers/pgbus/workflows_controller.rb +197 -0
- data/app/frontend/pgbus/modules/charts.js +130 -4
- data/app/frontend/pgbus/modules/charts.min.js +1 -1
- data/app/frontend/pgbus/modules/charts.min.js.map +1 -1
- data/app/frontend/pgbus/style.css +1 -1
- data/app/helpers/pgbus/button_helper.rb +4 -2
- data/app/helpers/pgbus/workflow_insights_helper.rb +129 -0
- data/app/helpers/pgbus/workflows_helper.rb +165 -0
- data/app/models/pgbus/workflow_entry.rb +172 -0
- data/app/models/pgbus/workflow_event.rb +43 -0
- data/app/models/pgbus/workflow_signal.rb +77 -0
- data/app/models/pgbus/workflow_step.rb +142 -0
- data/app/views/layouts/pgbus/application.html.erb +2 -0
- data/app/views/pgbus/dashboard/_stats_cards.html.erb +17 -0
- data/app/views/pgbus/workflows/_actions.html.erb +59 -0
- data/app/views/pgbus/workflows/_events_table.html.erb +24 -0
- data/app/views/pgbus/workflows/_filters.html.erb +29 -0
- data/app/views/pgbus/workflows/_signal_form.html.erb +31 -0
- data/app/views/pgbus/workflows/_signals_table.html.erb +40 -0
- data/app/views/pgbus/workflows/_status_filter.html.erb +12 -0
- data/app/views/pgbus/workflows/_steps_table.html.erb +79 -0
- data/app/views/pgbus/workflows/_timeline.html.erb +39 -0
- data/app/views/pgbus/workflows/_workflows_table.html.erb +59 -0
- data/app/views/pgbus/workflows/attention.html.erb +88 -0
- data/app/views/pgbus/workflows/definitions/_by_revision.html.erb +52 -0
- data/app/views/pgbus/workflows/definitions/_duration_table.html.erb +18 -0
- data/app/views/pgbus/workflows/definitions/_funnel.html.erb +49 -0
- data/app/views/pgbus/workflows/definitions/_pipeline.html.erb +16 -0
- data/app/views/pgbus/workflows/definitions/_step_card.html.erb +31 -0
- data/app/views/pgbus/workflows/definitions/_throughput_table.html.erb +32 -0
- data/app/views/pgbus/workflows/definitions/_window.html.erb +17 -0
- data/app/views/pgbus/workflows/definitions/index.html.erb +71 -0
- data/app/views/pgbus/workflows/definitions/not_found.html.erb +5 -0
- data/app/views/pgbus/workflows/definitions/show.html.erb +80 -0
- data/app/views/pgbus/workflows/index.html.erb +15 -0
- data/app/views/pgbus/workflows/not_found.html.erb +5 -0
- data/app/views/pgbus/workflows/show.html.erb +93 -0
- data/config/i18n-tasks.yml +6 -0
- data/config/locales/da.yml +442 -0
- data/config/locales/de.yml +442 -0
- data/config/locales/en.yml +442 -0
- data/config/locales/es.yml +442 -0
- data/config/locales/fi.yml +442 -0
- data/config/locales/fr.yml +442 -0
- data/config/locales/it.yml +442 -0
- data/config/locales/ja.yml +442 -0
- data/config/locales/nb.yml +442 -0
- data/config/locales/nl.yml +442 -0
- data/config/locales/pt.yml +442 -0
- data/config/locales/sv.yml +442 -0
- data/config/routes.rb +26 -0
- data/lib/generators/pgbus/add_workflow_signals_generator.rb +56 -0
- data/lib/generators/pgbus/add_workflows_generator.rb +54 -0
- data/lib/generators/pgbus/templates/add_workflow_signals.rb.erb +51 -0
- data/lib/generators/pgbus/templates/add_workflows.rb.erb +150 -0
- data/lib/generators/pgbus/templates/migration.rb.erb +127 -0
- data/lib/pgbus/active_job/adapter.rb +67 -26
- data/lib/pgbus/active_job/batch_id.rb +23 -1
- data/lib/pgbus/active_job/delivery.rb +49 -0
- data/lib/pgbus/active_job/executor.rb +3 -1
- data/lib/pgbus/batch/builder.rb +1 -0
- data/lib/pgbus/batch.rb +35 -3
- data/lib/pgbus/configuration/workflow_settings.rb +99 -0
- data/lib/pgbus/configuration.rb +21 -3
- data/lib/pgbus/generators/migration_detector.rb +40 -0
- data/lib/pgbus/instrumentation.rb +32 -0
- data/lib/pgbus/integrations/appsignal/dashboard.json +128 -1
- data/lib/pgbus/integrations/appsignal/event_span.rb +43 -0
- data/lib/pgbus/integrations/appsignal/job_span.rb +47 -0
- data/lib/pgbus/integrations/appsignal/span_subscriber.rb +128 -0
- data/lib/pgbus/integrations/appsignal/subscriber.rb +50 -100
- data/lib/pgbus/mcp/rack_app.rb +7 -2
- data/lib/pgbus/mcp/runner.rb +2 -1
- data/lib/pgbus/mcp/serialization.rb +25 -0
- data/lib/pgbus/mcp/server.rb +53 -10
- data/lib/pgbus/mcp/tools/deploy_tasks_tool.rb +1 -10
- data/lib/pgbus/mcp/tools/workflow_cancel_tool.rb +23 -0
- data/lib/pgbus/mcp/tools/workflow_definitions_tool.rb +36 -0
- data/lib/pgbus/mcp/tools/workflow_detail_tool.rb +38 -0
- data/lib/pgbus/mcp/tools/workflow_resume_at_tool.rb +32 -0
- data/lib/pgbus/mcp/tools/workflow_resume_tool.rb +24 -0
- data/lib/pgbus/mcp/tools/workflow_run_now_tool.rb +23 -0
- data/lib/pgbus/mcp/tools/workflow_signal_tool.rb +77 -0
- data/lib/pgbus/mcp/tools/workflow_skip_step_tool.rb +23 -0
- data/lib/pgbus/mcp/tools/workflow_stats_tool.rb +42 -0
- data/lib/pgbus/mcp/tools/workflows_attention_tool.rb +42 -0
- data/lib/pgbus/mcp/tools/workflows_tool.rb +60 -0
- data/lib/pgbus/mcp/workflow_insights_payload.rb +15 -0
- data/lib/pgbus/mcp/workflow_payloads.rb +53 -0
- data/lib/pgbus/mcp/write_tool.rb +134 -0
- data/lib/pgbus/mcp.rb +15 -0
- data/lib/pgbus/metrics/backends/statsd.rb +6 -0
- data/lib/pgbus/metrics/subscriber.rb +14 -1
- data/lib/pgbus/metrics/workflow_metrics.rb +65 -0
- data/lib/pgbus/process/dispatcher.rb +26 -0
- data/lib/pgbus/version.rb +1 -1
- data/lib/pgbus/web/data_source/workflow_actions.rb +109 -0
- data/lib/pgbus/web/data_source/workflow_insights.rb +99 -0
- data/lib/pgbus/web/data_source/workflow_list.rb +248 -0
- data/lib/pgbus/web/data_source.rb +3 -0
- data/lib/pgbus/web/workflow_action_plan.rb +62 -0
- data/lib/pgbus/web/workflow_insights_queries.rb +250 -0
- data/lib/pgbus/web/workflow_insights_report.rb +171 -0
- data/lib/pgbus/web/workflow_payload.rb +36 -0
- data/lib/pgbus/web/workflow_query.rb +82 -0
- data/lib/pgbus/web/workflow_state.rb +76 -0
- data/lib/pgbus/web/workflow_timeline.rb +113 -0
- data/lib/pgbus/web/workflow_window.rb +51 -0
- data/lib/pgbus/workflow/batch_finished_job.rb +21 -0
- data/lib/pgbus/workflow/dsl.rb +105 -0
- data/lib/pgbus/workflow/error_capture.rb +63 -0
- data/lib/pgbus/workflow/exception_policy.rb +170 -0
- data/lib/pgbus/workflow/fan_out.rb +157 -0
- data/lib/pgbus/workflow/fan_out_definition.rb +41 -0
- data/lib/pgbus/workflow/flow_control.rb +94 -0
- data/lib/pgbus/workflow/instance.rb +183 -0
- data/lib/pgbus/workflow/outside_verbs.rb +138 -0
- data/lib/pgbus/workflow/payload.rb +53 -0
- data/lib/pgbus/workflow/registry.rb +53 -0
- data/lib/pgbus/workflow/removed_step.rb +14 -0
- data/lib/pgbus/workflow/runner.rb +218 -0
- data/lib/pgbus/workflow/signal_matcher.rb +53 -0
- data/lib/pgbus/workflow/signals.rb +132 -0
- data/lib/pgbus/workflow/states.rb +119 -0
- data/lib/pgbus/workflow/step_context.rb +58 -0
- data/lib/pgbus/workflow/step_definition.rb +131 -0
- data/lib/pgbus/workflow/step_execution.rb +242 -0
- data/lib/pgbus/workflow/step_job.rb +28 -0
- data/lib/pgbus/workflow/step_outcome.rb +151 -0
- data/lib/pgbus/workflow/steps.rb +103 -0
- data/lib/pgbus/workflow/sweep.rb +156 -0
- data/lib/pgbus/workflow/test_helpers.rb +152 -0
- data/lib/pgbus/workflow/wait_timeout.rb +73 -0
- data/lib/pgbus/workflow/waiting.rb +82 -0
- data/lib/pgbus/workflow.rb +183 -0
- data/sig/pgbus/configuration.rbs +22 -0
- metadata +95 -1
data/config/locales/fr.yml
CHANGED
|
@@ -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
|