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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +96 -7
- 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/delivery.rb +49 -0
- data/lib/pgbus/active_job/executor.rb +3 -1
- 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/subscriber.rb +16 -1
- 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 +92 -1
data/config/locales/en.yml
CHANGED
|
@@ -140,6 +140,11 @@ en:
|
|
|
140
140
|
throughput: Throughput
|
|
141
141
|
throughput_detail: jobs/min over the last %{minutes} min
|
|
142
142
|
throughput_unavailable: needs job stats (rails g pgbus:add_job_stats)
|
|
143
|
+
workflows: Workflows
|
|
144
|
+
workflows_attention:
|
|
145
|
+
one: "%{count} needs attention"
|
|
146
|
+
other: "%{count} need attention"
|
|
147
|
+
workflows_detail: ongoing (%{paused} paused)
|
|
143
148
|
verdict:
|
|
144
149
|
links:
|
|
145
150
|
dlq: Dead letters
|
|
@@ -723,6 +728,7 @@ en:
|
|
|
723
728
|
processes: Processes
|
|
724
729
|
queues: Queues
|
|
725
730
|
recurring: Recurring
|
|
731
|
+
workflows: Workflows
|
|
726
732
|
return_to_app: Back to app
|
|
727
733
|
title: Pgbus Dashboard
|
|
728
734
|
toggle_dark_mode: Toggle dark mode
|
|
@@ -1023,3 +1029,439 @@ en:
|
|
|
1023
1029
|
disabled: Task disabled
|
|
1024
1030
|
enabled: Task enabled
|
|
1025
1031
|
failed: Failed to toggle task
|
|
1032
|
+
workflow_insights:
|
|
1033
|
+
back_to_classes: All workflow classes
|
|
1034
|
+
back_to_runs: All workflow runs
|
|
1035
|
+
bad_request: 'Bad request: %{reason}'
|
|
1036
|
+
capped: 'Capped at workflow_retention (%{retention}): finished and cancelled runs older than that are deleted.'
|
|
1037
|
+
few_samples:
|
|
1038
|
+
one: n=%{count}, few samples
|
|
1039
|
+
other: n=%{count}, few samples
|
|
1040
|
+
index:
|
|
1041
|
+
description: 'How each workflow class did over %{window}: the runs going on now, the runs that ended, and how long a run takes end to end.'
|
|
1042
|
+
empty_hint: 'Define a Pgbus::Workflow subclass and start a run: YourWorkflow.start!(subject, **arguments).'
|
|
1043
|
+
empty_title: No workflow class has run yet.
|
|
1044
|
+
headers:
|
|
1045
|
+
attention: Need attention
|
|
1046
|
+
cancelled: Cancelled
|
|
1047
|
+
duration_p50: Duration p50
|
|
1048
|
+
duration_p95: Duration p95
|
|
1049
|
+
finished: Finished
|
|
1050
|
+
ongoing: Ongoing
|
|
1051
|
+
paused: Paused
|
|
1052
|
+
workflow_class: Workflow class
|
|
1053
|
+
title: Workflow insights
|
|
1054
|
+
links:
|
|
1055
|
+
at_step: "%{status} runs at %{step}"
|
|
1056
|
+
attention: runs of %{workflow} that need attention
|
|
1057
|
+
cancelled: runs of %{workflow} cancelled in the window
|
|
1058
|
+
cancelled_bucket: runs cancelled in this period
|
|
1059
|
+
finished: runs of %{workflow} that finished in the window
|
|
1060
|
+
finished_bucket: runs finished in this period
|
|
1061
|
+
ongoing: ongoing runs of %{workflow}
|
|
1062
|
+
paused: paused runs of %{workflow}
|
|
1063
|
+
started: runs of %{workflow} started in the window
|
|
1064
|
+
started_bucket: runs started in this period
|
|
1065
|
+
not_found:
|
|
1066
|
+
hint: No Pgbus::Workflow subclass and no run is called %{workflow} (or reading it failed, see the log).
|
|
1067
|
+
title: Unknown workflow class
|
|
1068
|
+
not_loaded: Definition not loaded
|
|
1069
|
+
not_loaded_hint: 'This class does not load in this app any more: its steps come from its runs'' rows, in the order the runs reached them.'
|
|
1070
|
+
percentile: "%{name} %{value}"
|
|
1071
|
+
removed_in_flight:
|
|
1072
|
+
one: "%{count} run on removed step %{step}"
|
|
1073
|
+
other: "%{count} runs on removed step %{step}"
|
|
1074
|
+
show:
|
|
1075
|
+
by_revision:
|
|
1076
|
+
all_steps: All steps
|
|
1077
|
+
caption: 'The same numbers for the last five app revisions that finished an attempt in the window, newest first: a regression after a deploy shows as a row.'
|
|
1078
|
+
empty: No attempt in this window recorded an app revision (config.app_revision).
|
|
1079
|
+
headers:
|
|
1080
|
+
attempts: Attempts
|
|
1081
|
+
failed: Failed
|
|
1082
|
+
reattempted: Reattempted
|
|
1083
|
+
revision: Revision
|
|
1084
|
+
run_time: Run time
|
|
1085
|
+
skipped: Skipped
|
|
1086
|
+
step: Step
|
|
1087
|
+
seen_html: seen %{from} to %{to}
|
|
1088
|
+
title: By app revision
|
|
1089
|
+
worse: up from %{rate} on %{revision}
|
|
1090
|
+
charts:
|
|
1091
|
+
durations:
|
|
1092
|
+
between: "%{from}–%{to}"
|
|
1093
|
+
caption:
|
|
1094
|
+
one: How long the %{count} run that finished in the window took, from start to finish.
|
|
1095
|
+
other: How long the %{count} runs that finished in the window took, from start to finish.
|
|
1096
|
+
headers:
|
|
1097
|
+
range: Duration
|
|
1098
|
+
runs: Runs
|
|
1099
|
+
over: "%{from} or more"
|
|
1100
|
+
title: End-to-end duration
|
|
1101
|
+
under: under %{to}
|
|
1102
|
+
series:
|
|
1103
|
+
cancelled: Cancelled
|
|
1104
|
+
finished: Finished
|
|
1105
|
+
runs: Runs
|
|
1106
|
+
started: Started
|
|
1107
|
+
throughput:
|
|
1108
|
+
caption: 'Runs started, finished and cancelled per %{bucket} over %{window}: %{started} started, %{finished} finished, %{cancelled} cancelled.'
|
|
1109
|
+
headers:
|
|
1110
|
+
cancelled: Cancelled
|
|
1111
|
+
finished: Finished
|
|
1112
|
+
from: From
|
|
1113
|
+
started: Started
|
|
1114
|
+
title: Runs per %{bucket}
|
|
1115
|
+
description: 'Over %{window}: where its runs are now, how each step performs, and where runs stop.'
|
|
1116
|
+
funnel:
|
|
1117
|
+
caption:
|
|
1118
|
+
one: 'Of the %{count} run started in the window: how many reached each step, and where it is now.'
|
|
1119
|
+
other: 'Of the %{count} runs started in the window: how many reached each step, and where each one is now.'
|
|
1120
|
+
empty: No run started in this window.
|
|
1121
|
+
headers:
|
|
1122
|
+
now_here: Now at this step
|
|
1123
|
+
reached: Reached
|
|
1124
|
+
share: Of started
|
|
1125
|
+
step: Step
|
|
1126
|
+
here:
|
|
1127
|
+
cancelled:
|
|
1128
|
+
one: "%{count} cancelled"
|
|
1129
|
+
other: "%{count} cancelled"
|
|
1130
|
+
finished:
|
|
1131
|
+
one: "%{count} finished"
|
|
1132
|
+
other: "%{count} finished"
|
|
1133
|
+
paused:
|
|
1134
|
+
one: "%{count} paused"
|
|
1135
|
+
other: "%{count} paused"
|
|
1136
|
+
performing:
|
|
1137
|
+
one: "%{count} running"
|
|
1138
|
+
other: "%{count} running"
|
|
1139
|
+
ready:
|
|
1140
|
+
one: "%{count} scheduled"
|
|
1141
|
+
other: "%{count} scheduled"
|
|
1142
|
+
waiting:
|
|
1143
|
+
one: "%{count} waiting"
|
|
1144
|
+
other: "%{count} waiting"
|
|
1145
|
+
title: Funnel
|
|
1146
|
+
pipeline:
|
|
1147
|
+
attempts:
|
|
1148
|
+
one: "%{count} attempt"
|
|
1149
|
+
other: "%{count} attempts"
|
|
1150
|
+
caption: 'Each step in order: the runs sitting at it now, and how its attempts that finished in the window did.'
|
|
1151
|
+
empty: 'No step yet: no run of this class has a step in the window and none is going on.'
|
|
1152
|
+
failed: Failed
|
|
1153
|
+
kinds:
|
|
1154
|
+
fan_out: Fan-out
|
|
1155
|
+
removed: Removed
|
|
1156
|
+
signal: Waits for a signal
|
|
1157
|
+
undeclared: Not in the definition
|
|
1158
|
+
live:
|
|
1159
|
+
paused: Paused
|
|
1160
|
+
performing: Running
|
|
1161
|
+
ready: Scheduled
|
|
1162
|
+
waiting: Waiting
|
|
1163
|
+
now_label: Runs at this step now
|
|
1164
|
+
pickup: Pickup
|
|
1165
|
+
reattempted: Reattempted
|
|
1166
|
+
run_time: Run time
|
|
1167
|
+
skipped: Skipped
|
|
1168
|
+
step_link: Ongoing runs at %{step}
|
|
1169
|
+
title: Pipeline
|
|
1170
|
+
window_label: Attempts that finished in the window
|
|
1171
|
+
summary:
|
|
1172
|
+
attention: Need attention
|
|
1173
|
+
cancelled: Cancelled
|
|
1174
|
+
duration: Duration p50
|
|
1175
|
+
finished: Finished
|
|
1176
|
+
ongoing: Ongoing
|
|
1177
|
+
started: Started
|
|
1178
|
+
window_label: Time window
|
|
1179
|
+
windows:
|
|
1180
|
+
1h: the last hour
|
|
1181
|
+
24h: the last 24 hours
|
|
1182
|
+
30d: the last 30 days
|
|
1183
|
+
7d: the last 7 days
|
|
1184
|
+
workflows:
|
|
1185
|
+
actions:
|
|
1186
|
+
bulk_cancel: Cancel all
|
|
1187
|
+
bulk_resume: Resume all
|
|
1188
|
+
cancel: Cancel
|
|
1189
|
+
rerun: Rerun
|
|
1190
|
+
resume: Resume
|
|
1191
|
+
resume_at: Resume at step
|
|
1192
|
+
run_now: Run now
|
|
1193
|
+
signal: Send signal
|
|
1194
|
+
skip_step: Skip step
|
|
1195
|
+
attempt: attempt %{attempt}
|
|
1196
|
+
attention:
|
|
1197
|
+
at_step_html: at %{step}
|
|
1198
|
+
back: "← Workflows"
|
|
1199
|
+
cancel_all:
|
|
1200
|
+
one: Cancel all %{count}
|
|
1201
|
+
other: Cancel all %{count}
|
|
1202
|
+
confirm:
|
|
1203
|
+
cancel:
|
|
1204
|
+
one: Cancel the run stuck at %{step}?
|
|
1205
|
+
other: Cancel all %{count} runs stuck at %{step}?
|
|
1206
|
+
cancel_error:
|
|
1207
|
+
one: Cancel the run stuck at %{step} on %{error}?
|
|
1208
|
+
other: Cancel all %{count} runs stuck at %{step} on %{error}?
|
|
1209
|
+
resume:
|
|
1210
|
+
one: Resume the run paused at %{step}?
|
|
1211
|
+
other: Resume all %{count} runs paused at %{step}?
|
|
1212
|
+
resume_error:
|
|
1213
|
+
one: Resume the run paused at %{step} on %{error}?
|
|
1214
|
+
other: Resume all %{count} runs paused at %{step} on %{error}?
|
|
1215
|
+
description: Ongoing runs that wait on a person, grouped by what stopped them. Once the cause is fixed, act on the whole group.
|
|
1216
|
+
empty_hint: No ongoing run is paused, stalled, overdue or waiting past workflow_waiting_visibility_threshold.
|
|
1217
|
+
empty_title: Nothing needs attention.
|
|
1218
|
+
first_seen_html: first %{time}
|
|
1219
|
+
headers:
|
|
1220
|
+
actions: Actions
|
|
1221
|
+
reason: Reason
|
|
1222
|
+
runs: Runs
|
|
1223
|
+
seen: Seen
|
|
1224
|
+
workflow: Workflow
|
|
1225
|
+
last_seen_html: last %{time}
|
|
1226
|
+
only_class_html: "%{workflow} only."
|
|
1227
|
+
reasons:
|
|
1228
|
+
overdue: 'Overdue: due, but not picked up'
|
|
1229
|
+
paused_error: Paused on an error
|
|
1230
|
+
paused_manual: Paused by hand
|
|
1231
|
+
stalled: 'Stalled: its worker stopped responding'
|
|
1232
|
+
waiting_overdue: Waiting too long
|
|
1233
|
+
resume_all:
|
|
1234
|
+
one: Resume all %{count}
|
|
1235
|
+
other: Resume all %{count}
|
|
1236
|
+
show_all: Show every class
|
|
1237
|
+
show_runs: Show runs
|
|
1238
|
+
title: Needs attention
|
|
1239
|
+
audit:
|
|
1240
|
+
by: "%{event} by %{actor}"
|
|
1241
|
+
empty: No events recorded.
|
|
1242
|
+
headers:
|
|
1243
|
+
what: What happened
|
|
1244
|
+
when: When
|
|
1245
|
+
title: Audit trail
|
|
1246
|
+
with_reason: "%{sentence}: %{reason}"
|
|
1247
|
+
with_step: "%{sentence} (%{step} #%{attempt})"
|
|
1248
|
+
bad_request: 'Bad request: %{reason}'
|
|
1249
|
+
confirm:
|
|
1250
|
+
cancel: Cancel this workflow? Its open steps are cancelled and it does not run again.
|
|
1251
|
+
rerun: Start this workflow again as a new run, with the same subject and arguments?
|
|
1252
|
+
resume: Resume this workflow?
|
|
1253
|
+
resume_at: Resume this workflow at the chosen step? Its open steps are cancelled first.
|
|
1254
|
+
run_now: Run the scheduled step now instead of waiting?
|
|
1255
|
+
signal: Send this signal to the workflow?
|
|
1256
|
+
skip_step: Skip the step this workflow waits on and move to the next one?
|
|
1257
|
+
events:
|
|
1258
|
+
cancelled: Cancelled
|
|
1259
|
+
fan_out_finished: Fan-out finished
|
|
1260
|
+
fan_out_opened: Fan-out opened
|
|
1261
|
+
finished: Finished
|
|
1262
|
+
late_completion_ignored: Late completion ignored
|
|
1263
|
+
paused: Paused
|
|
1264
|
+
rerun: Rerun
|
|
1265
|
+
rescheduled: Rescheduled
|
|
1266
|
+
resumed: Resumed
|
|
1267
|
+
run_now: Run now
|
|
1268
|
+
signal_claimed: Signal claimed
|
|
1269
|
+
signal_received: Signal received
|
|
1270
|
+
stall_detected: Stall detected
|
|
1271
|
+
started: Started
|
|
1272
|
+
step_completed: Step completed
|
|
1273
|
+
step_failed: Step failed
|
|
1274
|
+
step_reattempted: Step reattempted
|
|
1275
|
+
step_scheduled: Step scheduled
|
|
1276
|
+
step_skipped: Step skipped
|
|
1277
|
+
step_started: Step started
|
|
1278
|
+
step_waiting: Step waiting
|
|
1279
|
+
wait_timed_out: Wait timed out
|
|
1280
|
+
filters:
|
|
1281
|
+
apply: Apply filters
|
|
1282
|
+
clear: Clear
|
|
1283
|
+
created_from: Created from
|
|
1284
|
+
created_to: Created to
|
|
1285
|
+
ended_from: Ended from
|
|
1286
|
+
ended_to: Ended to
|
|
1287
|
+
error_class: Error class
|
|
1288
|
+
step: Current step
|
|
1289
|
+
subject_id: Subject ID
|
|
1290
|
+
subject_type: Subject type
|
|
1291
|
+
workflow_class: Workflow class
|
|
1292
|
+
workflow_id: Workflow ID
|
|
1293
|
+
flash:
|
|
1294
|
+
bad_group: That group is not valid.
|
|
1295
|
+
bulk_cancel:
|
|
1296
|
+
one: Cancelled %{count}.
|
|
1297
|
+
other: Cancelled %{count}.
|
|
1298
|
+
bulk_cancel_skipped: Cancelled %{count}; %{skipped} had already moved on.
|
|
1299
|
+
bulk_failed: "%{count} could not be changed: %{reason}"
|
|
1300
|
+
bulk_more: 'More runs may be waiting: press again for the next %{cap}.'
|
|
1301
|
+
bulk_resume:
|
|
1302
|
+
one: Resumed %{count}.
|
|
1303
|
+
other: Resumed %{count}.
|
|
1304
|
+
bulk_resume_skipped: Resumed %{count}; %{skipped} had already moved on.
|
|
1305
|
+
cancel: Workflow cancelled.
|
|
1306
|
+
choose_step: Choose a step to resume at.
|
|
1307
|
+
failed:
|
|
1308
|
+
not_allowed: 'Not done: the run is %{status} now.'
|
|
1309
|
+
not_found: That workflow no longer exists.
|
|
1310
|
+
other: "%{action} failed: %{reason}"
|
|
1311
|
+
payload_not_object: 'Not sent: the payload is not a JSON object.'
|
|
1312
|
+
payload_too_large: 'Not sent: the payload is over %{limit} bytes.'
|
|
1313
|
+
rerun: Started a new run.
|
|
1314
|
+
resume: Workflow resumed.
|
|
1315
|
+
resume_at: Workflow resumed at %{step}.
|
|
1316
|
+
run_now: The scheduled step runs now.
|
|
1317
|
+
signal: Signal %{name} sent.
|
|
1318
|
+
signal_duplicate: Signal %{name} was already delivered with this key; nothing new was sent.
|
|
1319
|
+
signal_name_missing: 'Not sent: the signal needs a name.'
|
|
1320
|
+
skip_step: Step skipped.
|
|
1321
|
+
headers:
|
|
1322
|
+
current_step: Current step
|
|
1323
|
+
last_activity: Last activity
|
|
1324
|
+
started: Started
|
|
1325
|
+
status: Status
|
|
1326
|
+
subject: Subject
|
|
1327
|
+
workflow: Workflow
|
|
1328
|
+
index:
|
|
1329
|
+
attention_link:
|
|
1330
|
+
one: Needs attention (%{count})
|
|
1331
|
+
other: Needs attention (%{count})
|
|
1332
|
+
description: 'Durable multi-step runs: what each one is doing and what happens next.'
|
|
1333
|
+
empty_hint: Pick another status or clear the filters. A run starts with YourWorkflow.start!(subject, **arguments).
|
|
1334
|
+
empty_title: No workflows match.
|
|
1335
|
+
insights_link: Insights by class
|
|
1336
|
+
status_label: Filter by status
|
|
1337
|
+
title: Workflows
|
|
1338
|
+
next:
|
|
1339
|
+
cancelled_html: Cancelled %{ago}.
|
|
1340
|
+
due_html: 'Ready: %{step} was due %{ago} and waits for a worker.'
|
|
1341
|
+
finished_html: Finished %{ago}.
|
|
1342
|
+
overdue_html: 'Overdue: %{step} was due %{ago}; the sweep sends it again.'
|
|
1343
|
+
paused_error_html: 'Paused on %{step}: %{error} — resume or cancel.'
|
|
1344
|
+
paused_manual_html: Paused on %{step} — resume or cancel.
|
|
1345
|
+
performing_attempt_html: Performing %{step} (attempt %{attempt}).
|
|
1346
|
+
performing_html: Performing %{step}.
|
|
1347
|
+
ready_html: 'Ready: %{step} runs next.'
|
|
1348
|
+
scheduled_html: 'Scheduled: %{step} runs %{time}.'
|
|
1349
|
+
unknown_html: 'Status: %{status}.'
|
|
1350
|
+
waiting_batch_html: Waiting for batch %{batch} (%{done} of %{total} jobs done).
|
|
1351
|
+
waiting_signal_html: Waiting for signal %{signal} since %{ago}.
|
|
1352
|
+
waiting_signal_timeout_html: Waiting for signal %{signal} since %{ago}. The wait times out %{time}.
|
|
1353
|
+
waiting_step_html: Waiting on %{step}.
|
|
1354
|
+
not_found:
|
|
1355
|
+
hint: It may have finished and been removed after workflow_retention, or the database could not be read (see the log).
|
|
1356
|
+
title: Workflow not found
|
|
1357
|
+
outcomes:
|
|
1358
|
+
cancelled: cancelled
|
|
1359
|
+
completed: completed
|
|
1360
|
+
finished_early: finished the run early
|
|
1361
|
+
paused: paused the run
|
|
1362
|
+
reattempted: reattempted
|
|
1363
|
+
skipped: skipped
|
|
1364
|
+
resume:
|
|
1365
|
+
carry_on: 'Resume: carry on with %{step}'
|
|
1366
|
+
continue: 'Resume: continue with %{step}'
|
|
1367
|
+
finish: 'Resume: finish the run'
|
|
1368
|
+
resend: 'Resume: send %{step} again'
|
|
1369
|
+
retry: 'Resume: retry %{step}'
|
|
1370
|
+
rewait: 'Resume: wait again on %{step}'
|
|
1371
|
+
show:
|
|
1372
|
+
actions: Actions
|
|
1373
|
+
arguments: Arguments
|
|
1374
|
+
back: "← Workflows"
|
|
1375
|
+
cancelled_at: Cancelled
|
|
1376
|
+
class_missing: "%{workflow_class} is not loaded in this process: the run can still be cancelled, but not resumed."
|
|
1377
|
+
definition_outdated: 'This run started on an older definition of %{workflow_class}: its steps have changed since it started.'
|
|
1378
|
+
details: Details
|
|
1379
|
+
finished_at: Finished
|
|
1380
|
+
no_arguments: This run has no arguments.
|
|
1381
|
+
paused_at: Paused
|
|
1382
|
+
reason_hint: Recorded on the audit trail, next to who did it.
|
|
1383
|
+
reason_label: Reason (optional)
|
|
1384
|
+
rerun_of: Rerun of
|
|
1385
|
+
reruns: Rerun as
|
|
1386
|
+
resume_at_label: Step to resume at
|
|
1387
|
+
signal:
|
|
1388
|
+
hint: A step waiting for it wakes at once; otherwise it waits, pending, until a step takes it.
|
|
1389
|
+
name: Signal name
|
|
1390
|
+
payload: Payload (JSON)
|
|
1391
|
+
send: Send signal
|
|
1392
|
+
title: Send a signal
|
|
1393
|
+
signal_statuses:
|
|
1394
|
+
claimed: Claimed
|
|
1395
|
+
consumed: Consumed
|
|
1396
|
+
pending: Pending
|
|
1397
|
+
signals:
|
|
1398
|
+
empty: No signals delivered to this run.
|
|
1399
|
+
headers:
|
|
1400
|
+
claimed: Claimed
|
|
1401
|
+
consumed: Consumed
|
|
1402
|
+
idempotency_key: Idempotency key
|
|
1403
|
+
name: Signal
|
|
1404
|
+
received: Received
|
|
1405
|
+
status: Status
|
|
1406
|
+
payload: Payload
|
|
1407
|
+
title: Signals
|
|
1408
|
+
statuses:
|
|
1409
|
+
cancelled: Cancelled
|
|
1410
|
+
finished: Finished
|
|
1411
|
+
gone: gone
|
|
1412
|
+
paused: Paused
|
|
1413
|
+
performing: Performing
|
|
1414
|
+
ready: Ready
|
|
1415
|
+
scheduled: Scheduled
|
|
1416
|
+
waiting: Waiting
|
|
1417
|
+
step_statuses:
|
|
1418
|
+
cancelled: Cancelled
|
|
1419
|
+
completed: Completed
|
|
1420
|
+
failed: Failed
|
|
1421
|
+
in_progress: Running
|
|
1422
|
+
scheduled: Scheduled
|
|
1423
|
+
skipped: Skipped
|
|
1424
|
+
waiting: Waiting
|
|
1425
|
+
steps:
|
|
1426
|
+
batch: batch %{batch}
|
|
1427
|
+
caused_by: Caused by %{error}
|
|
1428
|
+
empty: No attempts yet.
|
|
1429
|
+
headers:
|
|
1430
|
+
finished: Finished
|
|
1431
|
+
queued: Queued
|
|
1432
|
+
ran: Ran
|
|
1433
|
+
scheduled: Scheduled
|
|
1434
|
+
started: Started
|
|
1435
|
+
status: Status
|
|
1436
|
+
step: Step
|
|
1437
|
+
waited: Waited
|
|
1438
|
+
worker: Worker
|
|
1439
|
+
revision: revision %{revision}
|
|
1440
|
+
show_backtrace: Show backtrace
|
|
1441
|
+
title: Attempts
|
|
1442
|
+
waiting_for: then waiting %{duration}
|
|
1443
|
+
waits_for_html: waits for %{signal}
|
|
1444
|
+
tabs:
|
|
1445
|
+
all: All
|
|
1446
|
+
cancelled: Cancelled
|
|
1447
|
+
finished: Finished
|
|
1448
|
+
ongoing: Ongoing
|
|
1449
|
+
paused: Paused
|
|
1450
|
+
performing: Performing
|
|
1451
|
+
ready: Ready
|
|
1452
|
+
waiting: Waiting
|
|
1453
|
+
timeline:
|
|
1454
|
+
caption: 'Each attempt, oldest at the top: waited (its wait), queued (due, not yet picked up), ran (coloured by how it ended) and waiting (for a signal or its batch), with the pauses on their own row. The attempts table below lists the same durations.'
|
|
1455
|
+
empty: No attempts yet.
|
|
1456
|
+
paused_period_html: Paused at %{from} for %{duration}
|
|
1457
|
+
paused_row: Paused
|
|
1458
|
+
series:
|
|
1459
|
+
paused: Paused
|
|
1460
|
+
queued: Queued
|
|
1461
|
+
ran_cancelled: Ran, cancelled
|
|
1462
|
+
ran_failed: Ran, failed
|
|
1463
|
+
ran_ok: Ran
|
|
1464
|
+
ran_open: Running
|
|
1465
|
+
waited: Waited
|
|
1466
|
+
waiting: Waiting
|
|
1467
|
+
title: Timeline
|