pgbus 0.19.4 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +96 -7
  4. data/Rakefile +6 -1
  5. data/app/controllers/pgbus/dashboard_controller.rb +2 -0
  6. data/app/controllers/pgbus/workflow_definitions_controller.rb +28 -0
  7. data/app/controllers/pgbus/workflows_controller.rb +197 -0
  8. data/app/frontend/pgbus/modules/charts.js +130 -4
  9. data/app/frontend/pgbus/modules/charts.min.js +1 -1
  10. data/app/frontend/pgbus/modules/charts.min.js.map +1 -1
  11. data/app/frontend/pgbus/style.css +1 -1
  12. data/app/helpers/pgbus/button_helper.rb +4 -2
  13. data/app/helpers/pgbus/workflow_insights_helper.rb +129 -0
  14. data/app/helpers/pgbus/workflows_helper.rb +165 -0
  15. data/app/models/pgbus/workflow_entry.rb +172 -0
  16. data/app/models/pgbus/workflow_event.rb +43 -0
  17. data/app/models/pgbus/workflow_signal.rb +77 -0
  18. data/app/models/pgbus/workflow_step.rb +142 -0
  19. data/app/views/layouts/pgbus/application.html.erb +2 -0
  20. data/app/views/pgbus/dashboard/_stats_cards.html.erb +17 -0
  21. data/app/views/pgbus/workflows/_actions.html.erb +59 -0
  22. data/app/views/pgbus/workflows/_events_table.html.erb +24 -0
  23. data/app/views/pgbus/workflows/_filters.html.erb +29 -0
  24. data/app/views/pgbus/workflows/_signal_form.html.erb +31 -0
  25. data/app/views/pgbus/workflows/_signals_table.html.erb +40 -0
  26. data/app/views/pgbus/workflows/_status_filter.html.erb +12 -0
  27. data/app/views/pgbus/workflows/_steps_table.html.erb +79 -0
  28. data/app/views/pgbus/workflows/_timeline.html.erb +39 -0
  29. data/app/views/pgbus/workflows/_workflows_table.html.erb +59 -0
  30. data/app/views/pgbus/workflows/attention.html.erb +88 -0
  31. data/app/views/pgbus/workflows/definitions/_by_revision.html.erb +52 -0
  32. data/app/views/pgbus/workflows/definitions/_duration_table.html.erb +18 -0
  33. data/app/views/pgbus/workflows/definitions/_funnel.html.erb +49 -0
  34. data/app/views/pgbus/workflows/definitions/_pipeline.html.erb +16 -0
  35. data/app/views/pgbus/workflows/definitions/_step_card.html.erb +31 -0
  36. data/app/views/pgbus/workflows/definitions/_throughput_table.html.erb +32 -0
  37. data/app/views/pgbus/workflows/definitions/_window.html.erb +17 -0
  38. data/app/views/pgbus/workflows/definitions/index.html.erb +71 -0
  39. data/app/views/pgbus/workflows/definitions/not_found.html.erb +5 -0
  40. data/app/views/pgbus/workflows/definitions/show.html.erb +80 -0
  41. data/app/views/pgbus/workflows/index.html.erb +15 -0
  42. data/app/views/pgbus/workflows/not_found.html.erb +5 -0
  43. data/app/views/pgbus/workflows/show.html.erb +93 -0
  44. data/config/i18n-tasks.yml +6 -0
  45. data/config/locales/da.yml +442 -0
  46. data/config/locales/de.yml +442 -0
  47. data/config/locales/en.yml +442 -0
  48. data/config/locales/es.yml +442 -0
  49. data/config/locales/fi.yml +442 -0
  50. data/config/locales/fr.yml +442 -0
  51. data/config/locales/it.yml +442 -0
  52. data/config/locales/ja.yml +442 -0
  53. data/config/locales/nb.yml +442 -0
  54. data/config/locales/nl.yml +442 -0
  55. data/config/locales/pt.yml +442 -0
  56. data/config/locales/sv.yml +442 -0
  57. data/config/routes.rb +26 -0
  58. data/lib/generators/pgbus/add_workflow_signals_generator.rb +56 -0
  59. data/lib/generators/pgbus/add_workflows_generator.rb +54 -0
  60. data/lib/generators/pgbus/templates/add_workflow_signals.rb.erb +51 -0
  61. data/lib/generators/pgbus/templates/add_workflows.rb.erb +150 -0
  62. data/lib/generators/pgbus/templates/migration.rb.erb +127 -0
  63. data/lib/pgbus/active_job/delivery.rb +49 -0
  64. data/lib/pgbus/active_job/executor.rb +3 -1
  65. data/lib/pgbus/configuration/workflow_settings.rb +99 -0
  66. data/lib/pgbus/configuration.rb +21 -3
  67. data/lib/pgbus/generators/migration_detector.rb +40 -0
  68. data/lib/pgbus/instrumentation.rb +32 -0
  69. data/lib/pgbus/integrations/appsignal/dashboard.json +128 -1
  70. data/lib/pgbus/integrations/appsignal/subscriber.rb +16 -1
  71. data/lib/pgbus/mcp/rack_app.rb +7 -2
  72. data/lib/pgbus/mcp/runner.rb +2 -1
  73. data/lib/pgbus/mcp/serialization.rb +25 -0
  74. data/lib/pgbus/mcp/server.rb +53 -10
  75. data/lib/pgbus/mcp/tools/deploy_tasks_tool.rb +1 -10
  76. data/lib/pgbus/mcp/tools/workflow_cancel_tool.rb +23 -0
  77. data/lib/pgbus/mcp/tools/workflow_definitions_tool.rb +36 -0
  78. data/lib/pgbus/mcp/tools/workflow_detail_tool.rb +38 -0
  79. data/lib/pgbus/mcp/tools/workflow_resume_at_tool.rb +32 -0
  80. data/lib/pgbus/mcp/tools/workflow_resume_tool.rb +24 -0
  81. data/lib/pgbus/mcp/tools/workflow_run_now_tool.rb +23 -0
  82. data/lib/pgbus/mcp/tools/workflow_signal_tool.rb +77 -0
  83. data/lib/pgbus/mcp/tools/workflow_skip_step_tool.rb +23 -0
  84. data/lib/pgbus/mcp/tools/workflow_stats_tool.rb +42 -0
  85. data/lib/pgbus/mcp/tools/workflows_attention_tool.rb +42 -0
  86. data/lib/pgbus/mcp/tools/workflows_tool.rb +60 -0
  87. data/lib/pgbus/mcp/workflow_insights_payload.rb +15 -0
  88. data/lib/pgbus/mcp/workflow_payloads.rb +53 -0
  89. data/lib/pgbus/mcp/write_tool.rb +134 -0
  90. data/lib/pgbus/mcp.rb +15 -0
  91. data/lib/pgbus/metrics/backends/statsd.rb +6 -0
  92. data/lib/pgbus/metrics/subscriber.rb +14 -1
  93. data/lib/pgbus/metrics/workflow_metrics.rb +65 -0
  94. data/lib/pgbus/process/dispatcher.rb +26 -0
  95. data/lib/pgbus/version.rb +1 -1
  96. data/lib/pgbus/web/data_source/workflow_actions.rb +109 -0
  97. data/lib/pgbus/web/data_source/workflow_insights.rb +99 -0
  98. data/lib/pgbus/web/data_source/workflow_list.rb +248 -0
  99. data/lib/pgbus/web/data_source.rb +3 -0
  100. data/lib/pgbus/web/workflow_action_plan.rb +62 -0
  101. data/lib/pgbus/web/workflow_insights_queries.rb +250 -0
  102. data/lib/pgbus/web/workflow_insights_report.rb +171 -0
  103. data/lib/pgbus/web/workflow_payload.rb +36 -0
  104. data/lib/pgbus/web/workflow_query.rb +82 -0
  105. data/lib/pgbus/web/workflow_state.rb +76 -0
  106. data/lib/pgbus/web/workflow_timeline.rb +113 -0
  107. data/lib/pgbus/web/workflow_window.rb +51 -0
  108. data/lib/pgbus/workflow/batch_finished_job.rb +21 -0
  109. data/lib/pgbus/workflow/dsl.rb +105 -0
  110. data/lib/pgbus/workflow/error_capture.rb +63 -0
  111. data/lib/pgbus/workflow/exception_policy.rb +170 -0
  112. data/lib/pgbus/workflow/fan_out.rb +157 -0
  113. data/lib/pgbus/workflow/fan_out_definition.rb +41 -0
  114. data/lib/pgbus/workflow/flow_control.rb +94 -0
  115. data/lib/pgbus/workflow/instance.rb +183 -0
  116. data/lib/pgbus/workflow/outside_verbs.rb +138 -0
  117. data/lib/pgbus/workflow/payload.rb +53 -0
  118. data/lib/pgbus/workflow/registry.rb +53 -0
  119. data/lib/pgbus/workflow/removed_step.rb +14 -0
  120. data/lib/pgbus/workflow/runner.rb +218 -0
  121. data/lib/pgbus/workflow/signal_matcher.rb +53 -0
  122. data/lib/pgbus/workflow/signals.rb +132 -0
  123. data/lib/pgbus/workflow/states.rb +119 -0
  124. data/lib/pgbus/workflow/step_context.rb +58 -0
  125. data/lib/pgbus/workflow/step_definition.rb +131 -0
  126. data/lib/pgbus/workflow/step_execution.rb +242 -0
  127. data/lib/pgbus/workflow/step_job.rb +28 -0
  128. data/lib/pgbus/workflow/step_outcome.rb +151 -0
  129. data/lib/pgbus/workflow/steps.rb +103 -0
  130. data/lib/pgbus/workflow/sweep.rb +156 -0
  131. data/lib/pgbus/workflow/test_helpers.rb +152 -0
  132. data/lib/pgbus/workflow/wait_timeout.rb +73 -0
  133. data/lib/pgbus/workflow/waiting.rb +82 -0
  134. data/lib/pgbus/workflow.rb +183 -0
  135. data/sig/pgbus/configuration.rbs +22 -0
  136. metadata +92 -1
@@ -140,6 +140,11 @@ es:
140
140
  throughput: Rendimiento
141
141
  throughput_detail: trabajos/min en los últimos %{minutes} min
142
142
  throughput_unavailable: requiere estadísticas de trabajos (rails g pgbus:add_job_stats)
143
+ workflows: Workflows
144
+ workflows_attention:
145
+ one: "%{count} requiere atención"
146
+ other: "%{count} requieren atención"
147
+ workflows_detail: en curso (%{paused} en pausa)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Mensajes muertos
@@ -723,6 +728,7 @@ es:
723
728
  processes: Procesos
724
729
  queues: Colas
725
730
  recurring: Recurrente
731
+ workflows: Workflows
726
732
  return_to_app: Volver a la app
727
733
  title: Panel de Pgbus
728
734
  toggle_dark_mode: Alternar modo oscuro
@@ -1023,3 +1029,439 @@ es:
1023
1029
  disabled: Tarea deshabilitada
1024
1030
  enabled: Tarea habilitada
1025
1031
  failed: No se pudo cambiar la tarea
1032
+ workflow_insights:
1033
+ back_to_classes: Todas las clases de flujo
1034
+ back_to_runs: Todas las ejecuciones de flujos
1035
+ bad_request: 'Solicitud incorrecta: %{reason}'
1036
+ capped: 'Limitado a workflow_retention (%{retention}): las ejecuciones terminadas y canceladas más antiguas se eliminan.'
1037
+ few_samples:
1038
+ one: n=%{count}, pocas muestras
1039
+ other: n=%{count}, pocas muestras
1040
+ index:
1041
+ description: 'Cómo le fue a cada clase de flujo en %{window}: las ejecuciones en curso, las que terminaron y cuánto tarda una ejecución de principio a fin.'
1042
+ empty_hint: 'Define una subclase de Pgbus::Workflow e inicia una ejecución: YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Ninguna clase de flujo se ha ejecutado todavía.
1044
+ headers:
1045
+ attention: Requieren atención
1046
+ cancelled: Canceladas
1047
+ duration_p50: Duración p50
1048
+ duration_p95: Duración p95
1049
+ finished: Terminadas
1050
+ ongoing: En curso
1051
+ paused: Pausadas
1052
+ workflow_class: Clase de flujo
1053
+ title: Análisis de flujos
1054
+ links:
1055
+ at_step: "%{status} ejecuciones en %{step}"
1056
+ attention: ejecuciones de %{workflow} que requieren atención
1057
+ cancelled: ejecuciones de %{workflow} canceladas en la ventana
1058
+ cancelled_bucket: ejecuciones canceladas en este periodo
1059
+ finished: ejecuciones de %{workflow} terminadas en la ventana
1060
+ finished_bucket: ejecuciones terminadas en este periodo
1061
+ ongoing: ejecuciones en curso de %{workflow}
1062
+ paused: ejecuciones pausadas de %{workflow}
1063
+ started: ejecuciones de %{workflow} iniciadas en la ventana
1064
+ started_bucket: ejecuciones iniciadas en este periodo
1065
+ not_found:
1066
+ hint: Ninguna subclase de Pgbus::Workflow ni ninguna ejecución se llama %{workflow} (o falló la lectura, mira el registro).
1067
+ title: Clase de flujo desconocida
1068
+ not_loaded: Definición no cargada
1069
+ not_loaded_hint: 'Esta clase ya no se carga en la aplicación: sus pasos vienen de las filas de sus ejecuciones, en el orden en que las ejecuciones los alcanzaron.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} ejecución en el paso eliminado %{step}"
1073
+ other: "%{count} ejecuciones en el paso eliminado %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Todos los pasos
1077
+ caption: 'Las mismas cifras para las últimas cinco revisiones de la aplicación que terminaron un intento en la ventana, la más reciente primero: una regresión tras un despliegue aparece como una fila.'
1078
+ empty: Ningún intento en esta ventana registró una revisión de la aplicación (config.app_revision).
1079
+ headers:
1080
+ attempts: Intentos
1081
+ failed: Fallidos
1082
+ reattempted: Reintentados
1083
+ revision: Revisión
1084
+ run_time: Tiempo de ejecución
1085
+ skipped: Omitidos
1086
+ step: Paso
1087
+ seen_html: visto de %{from} a %{to}
1088
+ title: Por revisión de la aplicación
1089
+ worse: sube desde %{rate} en %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Cuánto tardó la %{count} ejecución terminada en la ventana, de principio a fin.
1095
+ other: Cuánto tardaron las %{count} ejecuciones terminadas en la ventana, de principio a fin.
1096
+ headers:
1097
+ range: Duración
1098
+ runs: Ejecuciones
1099
+ over: "%{from} o más"
1100
+ title: Duración de principio a fin
1101
+ under: menos de %{to}
1102
+ series:
1103
+ cancelled: Canceladas
1104
+ finished: Terminadas
1105
+ runs: Ejecuciones
1106
+ started: Iniciadas
1107
+ throughput:
1108
+ caption: 'Ejecuciones iniciadas, terminadas y canceladas por %{bucket} en %{window}: %{started} iniciadas, %{finished} terminadas, %{cancelled} canceladas.'
1109
+ headers:
1110
+ cancelled: Canceladas
1111
+ finished: Terminadas
1112
+ from: Desde
1113
+ started: Iniciadas
1114
+ title: Ejecuciones por %{bucket}
1115
+ description: 'En %{window}: dónde están sus ejecuciones ahora, cómo rinde cada paso y dónde se detienen las ejecuciones.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'De la %{count} ejecución iniciada en la ventana: cuántas alcanzaron cada paso y dónde está ahora.'
1119
+ other: 'De las %{count} ejecuciones iniciadas en la ventana: cuántas alcanzaron cada paso y dónde está cada una ahora.'
1120
+ empty: Ninguna ejecución se inició en esta ventana.
1121
+ headers:
1122
+ now_here: Ahora en este paso
1123
+ reached: Alcanzado
1124
+ share: De las iniciadas
1125
+ step: Paso
1126
+ here:
1127
+ cancelled:
1128
+ one: "%{count} cancelada"
1129
+ other: "%{count} canceladas"
1130
+ finished:
1131
+ one: "%{count} terminada"
1132
+ other: "%{count} terminadas"
1133
+ paused:
1134
+ one: "%{count} pausada"
1135
+ other: "%{count} pausadas"
1136
+ performing:
1137
+ one: "%{count} en ejecución"
1138
+ other: "%{count} en ejecución"
1139
+ ready:
1140
+ one: "%{count} programada"
1141
+ other: "%{count} programadas"
1142
+ waiting:
1143
+ one: "%{count} esperando"
1144
+ other: "%{count} esperando"
1145
+ title: Embudo
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} intento"
1149
+ other: "%{count} intentos"
1150
+ caption: 'Cada paso en orden: las ejecuciones que están en él ahora y cómo fueron sus intentos terminados en la ventana.'
1151
+ empty: 'Aún no hay pasos: ninguna ejecución de esta clase tiene un paso en la ventana y ninguna está en curso.'
1152
+ failed: Fallidos
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Eliminado
1156
+ signal: Espera una señal
1157
+ undeclared: No está en la definición
1158
+ live:
1159
+ paused: Pausadas
1160
+ performing: En ejecución
1161
+ ready: Programadas
1162
+ waiting: Esperando
1163
+ now_label: Ejecuciones en este paso ahora
1164
+ pickup: Recogida
1165
+ reattempted: Reintentados
1166
+ run_time: Tiempo de ejecución
1167
+ skipped: Omitidos
1168
+ step_link: Ejecuciones en curso en %{step}
1169
+ title: Pipeline
1170
+ window_label: Intentos terminados en la ventana
1171
+ summary:
1172
+ attention: Requieren atención
1173
+ cancelled: Canceladas
1174
+ duration: Duración p50
1175
+ finished: Terminadas
1176
+ ongoing: En curso
1177
+ started: Iniciadas
1178
+ window_label: Ventana de tiempo
1179
+ windows:
1180
+ 1h: la última hora
1181
+ 24h: las últimas 24 horas
1182
+ 30d: los últimos 30 días
1183
+ 7d: los últimos 7 días
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Cancelar todo
1187
+ bulk_resume: Reanudar todo
1188
+ cancel: Cancelar
1189
+ rerun: Repetir
1190
+ resume: Reanudar
1191
+ resume_at: Reanudar desde el paso
1192
+ run_now: Ejecutar ahora
1193
+ signal: Enviar señal
1194
+ skip_step: Omitir paso
1195
+ attempt: intento %{attempt}
1196
+ attention:
1197
+ at_step_html: en %{step}
1198
+ back: "← Workflows"
1199
+ cancel_all:
1200
+ one: Cancelar %{count}
1201
+ other: Cancelar todas (%{count})
1202
+ confirm:
1203
+ cancel:
1204
+ one: "¿Cancelar la ejecución atascada en %{step}?"
1205
+ other: "¿Cancelar las %{count} ejecuciones atascadas en %{step}?"
1206
+ cancel_error:
1207
+ one: "¿Cancelar la ejecución atascada en %{step} por %{error}?"
1208
+ other: "¿Cancelar las %{count} ejecuciones atascadas en %{step} por %{error}?"
1209
+ resume:
1210
+ one: "¿Reanudar la ejecución en pausa en %{step}?"
1211
+ other: "¿Reanudar las %{count} ejecuciones en pausa en %{step}?"
1212
+ resume_error:
1213
+ one: "¿Reanudar la ejecución en pausa en %{step} por %{error}?"
1214
+ other: "¿Reanudar las %{count} ejecuciones en pausa en %{step} por %{error}?"
1215
+ description: Ejecuciones en curso que esperan a una persona, agrupadas por lo que las detuvo. Una vez corregida la causa, actúe sobre todo el grupo.
1216
+ empty_hint: Ninguna ejecución en curso está en pausa, bloqueada, atrasada o esperando más allá de workflow_waiting_visibility_threshold.
1217
+ empty_title: Nada requiere atención.
1218
+ first_seen_html: primera vez %{time}
1219
+ headers:
1220
+ actions: Acciones
1221
+ reason: Motivo
1222
+ runs: Ejecuciones
1223
+ seen: Visto
1224
+ workflow: Workflow
1225
+ last_seen_html: última vez %{time}
1226
+ only_class_html: Solo %{workflow}.
1227
+ reasons:
1228
+ overdue: 'Atrasada: vencida, pero sin tomar'
1229
+ paused_error: En pausa por un error
1230
+ paused_manual: Pausada manualmente
1231
+ stalled: 'Bloqueada: su worker dejó de responder'
1232
+ waiting_overdue: Espera demasiado larga
1233
+ resume_all:
1234
+ one: Reanudar %{count}
1235
+ other: Reanudar todas (%{count})
1236
+ show_all: Mostrar todas las clases
1237
+ show_runs: Mostrar ejecuciones
1238
+ title: Requieren atención
1239
+ audit:
1240
+ by: "%{event} por %{actor}"
1241
+ empty: No hay eventos registrados.
1242
+ headers:
1243
+ what: Qué ocurrió
1244
+ when: Cuándo
1245
+ title: Historial de auditoría
1246
+ with_reason: "%{sentence}: %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Solicitud no válida: %{reason}'
1249
+ confirm:
1250
+ cancel: "¿Cancelar este workflow? Sus pasos abiertos se cancelan y no volverá a ejecutarse."
1251
+ rerun: "¿Iniciar este workflow de nuevo como una ejecución nueva, con el mismo sujeto y los mismos argumentos?"
1252
+ resume: "¿Reanudar este workflow?"
1253
+ resume_at: "¿Reanudar este workflow desde el paso elegido? Sus pasos abiertos se cancelan primero."
1254
+ run_now: "¿Ejecutar ahora el paso programado en lugar de esperar?"
1255
+ signal: "¿Enviar esta señal al workflow?"
1256
+ skip_step: "¿Omitir el paso que espera este workflow y pasar al siguiente?"
1257
+ events:
1258
+ cancelled: Cancelado
1259
+ fan_out_finished: Fan-out terminado
1260
+ fan_out_opened: Fan-out abierto
1261
+ finished: Terminado
1262
+ late_completion_ignored: Finalización tardía ignorada
1263
+ paused: Pausado
1264
+ rerun: Repetido
1265
+ rescheduled: Reprogramado
1266
+ resumed: Reanudado
1267
+ run_now: Ejecutar ahora
1268
+ signal_claimed: Señal reclamada
1269
+ signal_received: Señal recibida
1270
+ stall_detected: Bloqueo detectado
1271
+ started: Iniciado
1272
+ step_completed: Paso completado
1273
+ step_failed: Paso fallido
1274
+ step_reattempted: Paso reintentado
1275
+ step_scheduled: Paso programado
1276
+ step_skipped: Paso omitido
1277
+ step_started: Paso iniciado
1278
+ step_waiting: Paso en espera
1279
+ wait_timed_out: Espera agotada
1280
+ filters:
1281
+ apply: Aplicar filtros
1282
+ clear: Borrar
1283
+ created_from: Creado desde
1284
+ created_to: Creado hasta
1285
+ ended_from: Terminado desde
1286
+ ended_to: Terminado hasta
1287
+ error_class: Clase de error
1288
+ step: Paso actual
1289
+ subject_id: ID del sujeto
1290
+ subject_type: Tipo de sujeto
1291
+ workflow_class: Clase del workflow
1292
+ workflow_id: ID del workflow
1293
+ flash:
1294
+ bad_group: Ese grupo no es válido.
1295
+ bulk_cancel:
1296
+ one: "%{count} cancelado."
1297
+ other: "%{count} cancelados."
1298
+ bulk_cancel_skipped: "%{count} cancelados; %{skipped} ya habían avanzado."
1299
+ bulk_failed: "%{count} no se pudieron cambiar: %{reason}"
1300
+ bulk_more: 'Puede haber más ejecuciones en espera: pulse de nuevo para las siguientes %{cap}.'
1301
+ bulk_resume:
1302
+ one: "%{count} reanudado."
1303
+ other: "%{count} reanudados."
1304
+ bulk_resume_skipped: "%{count} reanudados; %{skipped} ya habían avanzado."
1305
+ cancel: Workflow cancelado.
1306
+ choose_step: Elija un paso desde el que reanudar.
1307
+ failed:
1308
+ not_allowed: 'No realizado: la ejecución está ahora %{status}.'
1309
+ not_found: Ese workflow ya no existe.
1310
+ other: "%{action} falló: %{reason}"
1311
+ payload_not_object: 'No enviada: la carga útil no es un objeto JSON.'
1312
+ payload_too_large: 'No enviada: la carga útil supera los %{limit} bytes.'
1313
+ rerun: Se inició una nueva ejecución.
1314
+ resume: Workflow reanudado.
1315
+ resume_at: Workflow reanudado en %{step}.
1316
+ run_now: El paso programado se ejecuta ahora.
1317
+ signal: Señal %{name} enviada.
1318
+ signal_duplicate: La señal %{name} ya se entregó con esta clave; no se envió nada nuevo.
1319
+ signal_name_missing: 'No enviada: la señal necesita un nombre.'
1320
+ skip_step: Paso omitido.
1321
+ headers:
1322
+ current_step: Paso actual
1323
+ last_activity: Última actividad
1324
+ started: Iniciado
1325
+ status: Estado
1326
+ subject: Sujeto
1327
+ workflow: Workflow
1328
+ index:
1329
+ attention_link:
1330
+ one: Requiere atención (%{count})
1331
+ other: Requieren atención (%{count})
1332
+ description: 'Ejecuciones duraderas de varios pasos: qué hace cada una y qué ocurre a continuación.'
1333
+ empty_hint: Elija otro estado o borre los filtros. Una ejecución se inicia con YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Ningún workflow coincide.
1335
+ insights_link: Análisis por clase
1336
+ status_label: Filtrar por estado
1337
+ title: Workflows
1338
+ next:
1339
+ cancelled_html: Cancelado %{ago}.
1340
+ due_html: 'Listo: %{step} debía ejecutarse %{ago} y espera a un worker.'
1341
+ finished_html: Terminado %{ago}.
1342
+ overdue_html: 'Atrasado: %{step} debía ejecutarse %{ago}; el barrido lo envía de nuevo.'
1343
+ paused_error_html: 'En pausa en %{step}: %{error} — reanude o cancele.'
1344
+ paused_manual_html: En pausa en %{step} — reanude o cancele.
1345
+ performing_attempt_html: Ejecutando %{step} (intento %{attempt}).
1346
+ performing_html: Ejecutando %{step}.
1347
+ ready_html: 'Listo: %{step} se ejecuta a continuación.'
1348
+ scheduled_html: 'Programado: %{step} se ejecuta %{time}.'
1349
+ unknown_html: 'Estado: %{status}.'
1350
+ waiting_batch_html: Esperando el lote %{batch} (%{done} de %{total} trabajos terminados).
1351
+ waiting_signal_html: Esperando la señal %{signal} desde %{ago}.
1352
+ waiting_signal_timeout_html: Esperando la señal %{signal} desde %{ago}. La espera caduca %{time}.
1353
+ waiting_step_html: Esperando a %{step}.
1354
+ not_found:
1355
+ hint: Puede que haya terminado y se haya eliminado tras workflow_retention, o que no se haya podido leer la base de datos (consulta el registro).
1356
+ title: Workflow no encontrado
1357
+ outcomes:
1358
+ cancelled: cancelado
1359
+ completed: completado
1360
+ finished_early: terminó la ejecución antes de tiempo
1361
+ paused: pausó la ejecución
1362
+ reattempted: reintentado
1363
+ skipped: omitido
1364
+ resume:
1365
+ carry_on: 'Reanudar: seguir con %{step}'
1366
+ continue: 'Reanudar: continuar con %{step}'
1367
+ finish: 'Reanudar: terminar la ejecución'
1368
+ resend: 'Reanudar: enviar %{step} de nuevo'
1369
+ retry: 'Reanudar: reintentar %{step}'
1370
+ rewait: 'Reanudar: esperar de nuevo a %{step}'
1371
+ show:
1372
+ actions: Acciones
1373
+ arguments: Argumentos
1374
+ back: "← Workflows"
1375
+ cancelled_at: Cancelado
1376
+ class_missing: "%{workflow_class} no está cargado en este proceso: la ejecución aún se puede cancelar, pero no reanudar."
1377
+ definition_outdated: 'Esta ejecución se inició con una definición anterior de %{workflow_class}: sus pasos han cambiado desde entonces.'
1378
+ details: Detalles
1379
+ finished_at: Terminado
1380
+ no_arguments: Esta ejecución no tiene argumentos.
1381
+ paused_at: Pausado
1382
+ reason_hint: Se registra en el historial de auditoría, junto a quien lo hizo.
1383
+ reason_label: Motivo (opcional)
1384
+ rerun_of: Repetición de
1385
+ reruns: Repetida como
1386
+ resume_at_label: Paso desde el que reanudar
1387
+ signal:
1388
+ hint: Un paso que la espera despierta de inmediato; si no, queda pendiente hasta que un paso la tome.
1389
+ name: Nombre de la señal
1390
+ payload: Carga útil (JSON)
1391
+ send: Enviar señal
1392
+ title: Enviar una señal
1393
+ signal_statuses:
1394
+ claimed: Reclamada
1395
+ consumed: Consumida
1396
+ pending: Pendiente
1397
+ signals:
1398
+ empty: No se entregó ninguna señal a esta ejecución.
1399
+ headers:
1400
+ claimed: Reclamada
1401
+ consumed: Consumida
1402
+ idempotency_key: Clave de idempotencia
1403
+ name: Señal
1404
+ received: Recibida
1405
+ status: Estado
1406
+ payload: Carga útil
1407
+ title: Señales
1408
+ statuses:
1409
+ cancelled: Cancelado
1410
+ finished: Terminado
1411
+ gone: desaparecido
1412
+ paused: En pausa
1413
+ performing: Ejecutándose
1414
+ ready: Listo
1415
+ scheduled: Programado
1416
+ waiting: En espera
1417
+ step_statuses:
1418
+ cancelled: Cancelado
1419
+ completed: Completado
1420
+ failed: Fallido
1421
+ in_progress: En ejecución
1422
+ scheduled: Programado
1423
+ skipped: Omitido
1424
+ waiting: En espera
1425
+ steps:
1426
+ batch: lote %{batch}
1427
+ caused_by: Causado por %{error}
1428
+ empty: Aún no hay intentos.
1429
+ headers:
1430
+ finished: Terminado
1431
+ queued: En cola
1432
+ ran: Ejecución
1433
+ scheduled: Programado
1434
+ started: Iniciado
1435
+ status: Estado
1436
+ step: Paso
1437
+ waited: Espera
1438
+ worker: Worker
1439
+ revision: revisión %{revision}
1440
+ show_backtrace: Mostrar traza
1441
+ title: Intentos
1442
+ waiting_for: luego espera %{duration}
1443
+ waits_for_html: espera %{signal}
1444
+ tabs:
1445
+ all: Todos
1446
+ cancelled: Cancelados
1447
+ finished: Terminados
1448
+ ongoing: En curso
1449
+ paused: En pausa
1450
+ performing: Ejecutándose
1451
+ ready: Listos
1452
+ waiting: En espera
1453
+ timeline:
1454
+ caption: 'Cada intento, el más antiguo arriba: esperó (su espera), en cola (vencido, aún sin tomar), se ejecutó (coloreado según cómo terminó) y en espera (de una señal o de su lote), con las pausas en su propia fila. La tabla de intentos de abajo muestra las mismas duraciones.'
1455
+ empty: Aún no hay intentos.
1456
+ paused_period_html: En pausa desde %{from} durante %{duration}
1457
+ paused_row: En pausa
1458
+ series:
1459
+ paused: En pausa
1460
+ queued: En cola
1461
+ ran_cancelled: Ejecutado, cancelado
1462
+ ran_failed: Ejecutado, fallido
1463
+ ran_ok: Ejecutado
1464
+ ran_open: En ejecución
1465
+ waited: Esperó
1466
+ waiting: En espera
1467
+ title: Cronología