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 @@ pt:
140
140
  throughput: Taxa de transferência
141
141
  throughput_detail: jobs/min nos últimos %{minutes} min
142
142
  throughput_unavailable: requer estatísticas de jobs (rails g pgbus:add_job_stats)
143
+ workflows: Workflows
144
+ workflows_attention:
145
+ one: "%{count} requer atenção"
146
+ other: "%{count} requerem atenção"
147
+ workflows_detail: em andamento (%{paused} em pausa)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Mensagens mortas
@@ -723,6 +728,7 @@ pt:
723
728
  processes: Processos
724
729
  queues: Filas
725
730
  recurring: Recorrente
731
+ workflows: Workflows
726
732
  return_to_app: Voltar ao aplicativo
727
733
  title: Painel Pgbus
728
734
  toggle_dark_mode: Alternar modo escuro
@@ -1023,3 +1029,439 @@ pt:
1023
1029
  disabled: Tarefa desativada
1024
1030
  enabled: Tarefa ativada
1025
1031
  failed: Falha ao alternar tarefa
1032
+ workflow_insights:
1033
+ back_to_classes: Todas as classes de workflow
1034
+ back_to_runs: Todas as execuções de workflow
1035
+ bad_request: 'Requisição inválida: %{reason}'
1036
+ capped: 'Limitado a workflow_retention (%{retention}): execuções terminadas e canceladas mais antigas são apagadas.'
1037
+ few_samples:
1038
+ one: n=%{count}, poucas amostras
1039
+ other: n=%{count}, poucas amostras
1040
+ index:
1041
+ description: 'Como correu cada classe de workflow em %{window}: as execuções em curso, as que terminaram e quanto tempo uma execução leva do início ao fim.'
1042
+ empty_hint: 'Defina uma subclasse de Pgbus::Workflow e inicie uma execução: YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Nenhuma classe de workflow foi executada ainda.
1044
+ headers:
1045
+ attention: Precisam de atenção
1046
+ cancelled: Canceladas
1047
+ duration_p50: Duração p50
1048
+ duration_p95: Duração p95
1049
+ finished: Terminadas
1050
+ ongoing: Em curso
1051
+ paused: Em pausa
1052
+ workflow_class: Classe de workflow
1053
+ title: Análise de workflows
1054
+ links:
1055
+ at_step: "%{status} execuções em %{step}"
1056
+ attention: execuções de %{workflow} que precisam de atenção
1057
+ cancelled: execuções de %{workflow} canceladas na janela
1058
+ cancelled_bucket: execuções canceladas neste período
1059
+ finished: execuções de %{workflow} terminadas na janela
1060
+ finished_bucket: execuções terminadas neste período
1061
+ ongoing: execuções em curso de %{workflow}
1062
+ paused: execuções em pausa de %{workflow}
1063
+ started: execuções de %{workflow} iniciadas na janela
1064
+ started_bucket: execuções iniciadas neste período
1065
+ not_found:
1066
+ hint: Nenhuma subclasse de Pgbus::Workflow nem nenhuma execução se chama %{workflow} (ou a leitura falhou, veja o registo).
1067
+ title: Classe de workflow desconhecida
1068
+ not_loaded: Definição não carregada
1069
+ not_loaded_hint: 'Esta classe já não carrega na aplicação: os passos vêm das linhas das suas execuções, na ordem em que as execuções os alcançaram.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} execução no passo removido %{step}"
1073
+ other: "%{count} execuções no passo removido %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Todos os passos
1077
+ caption: 'Os mesmos números para as últimas cinco revisões da aplicação que terminaram uma tentativa na janela, a mais recente primeiro: uma regressão após um deploy aparece como uma linha.'
1078
+ empty: Nenhuma tentativa nesta janela registou uma revisão da aplicação (config.app_revision).
1079
+ headers:
1080
+ attempts: Tentativas
1081
+ failed: Falhadas
1082
+ reattempted: Repetidas
1083
+ revision: Revisão
1084
+ run_time: Tempo de execução
1085
+ skipped: Ignoradas
1086
+ step: Passo
1087
+ seen_html: vista de %{from} a %{to}
1088
+ title: Por revisão da aplicação
1089
+ worse: subiu de %{rate} em %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Quanto tempo levou a %{count} execução terminada na janela, do início ao fim.
1095
+ other: Quanto tempo levaram as %{count} execuções terminadas na janela, do início ao fim.
1096
+ headers:
1097
+ range: Duração
1098
+ runs: Execuções
1099
+ over: "%{from} ou mais"
1100
+ title: Duração do início ao fim
1101
+ under: menos de %{to}
1102
+ series:
1103
+ cancelled: Canceladas
1104
+ finished: Terminadas
1105
+ runs: Execuções
1106
+ started: Iniciadas
1107
+ throughput:
1108
+ caption: 'Execuções iniciadas, terminadas e canceladas por %{bucket} em %{window}: %{started} iniciadas, %{finished} terminadas, %{cancelled} canceladas.'
1109
+ headers:
1110
+ cancelled: Canceladas
1111
+ finished: Terminadas
1112
+ from: Desde
1113
+ started: Iniciadas
1114
+ title: Execuções por %{bucket}
1115
+ description: 'Em %{window}: onde estão as execuções agora, como cada passo se comporta e onde as execuções param.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'Da %{count} execução iniciada na janela: quantas alcançaram cada passo e onde está agora.'
1119
+ other: 'Das %{count} execuções iniciadas na janela: quantas alcançaram cada passo e onde está cada uma agora.'
1120
+ empty: Nenhuma execução foi iniciada nesta janela.
1121
+ headers:
1122
+ now_here: Agora neste passo
1123
+ reached: Alcançado
1124
+ share: Das iniciadas
1125
+ step: Passo
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} em pausa"
1135
+ other: "%{count} em pausa"
1136
+ performing:
1137
+ one: "%{count} em execução"
1138
+ other: "%{count} em execução"
1139
+ ready:
1140
+ one: "%{count} agendada"
1141
+ other: "%{count} agendadas"
1142
+ waiting:
1143
+ one: "%{count} aguardando"
1144
+ other: "%{count} aguardando"
1145
+ title: Funil
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} tentativa"
1149
+ other: "%{count} tentativas"
1150
+ caption: 'Cada passo por ordem: as execuções que estão nele agora e como correram as suas tentativas terminadas na janela.'
1151
+ empty: 'Ainda sem passos: nenhuma execução desta classe tem um passo na janela e nenhuma está em curso.'
1152
+ failed: Falhadas
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Removido
1156
+ signal: Aguarda um sinal
1157
+ undeclared: Fora da definição
1158
+ live:
1159
+ paused: Em pausa
1160
+ performing: Em execução
1161
+ ready: Agendadas
1162
+ waiting: Aguardando
1163
+ now_label: Execuções neste passo agora
1164
+ pickup: Recolha
1165
+ reattempted: Repetidas
1166
+ run_time: Tempo de execução
1167
+ skipped: Ignoradas
1168
+ step_link: Execuções em curso em %{step}
1169
+ title: Pipeline
1170
+ window_label: Tentativas terminadas na janela
1171
+ summary:
1172
+ attention: Precisam de atenção
1173
+ cancelled: Canceladas
1174
+ duration: Duração p50
1175
+ finished: Terminadas
1176
+ ongoing: Em curso
1177
+ started: Iniciadas
1178
+ window_label: Janela de tempo
1179
+ windows:
1180
+ 1h: a última hora
1181
+ 24h: as últimas 24 horas
1182
+ 30d: os últimos 30 dias
1183
+ 7d: os últimos 7 dias
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Cancelar todos
1187
+ bulk_resume: Retomar todos
1188
+ cancel: Cancelar
1189
+ rerun: Reexecutar
1190
+ resume: Retomar
1191
+ resume_at: Retomar na etapa
1192
+ run_now: Executar agora
1193
+ signal: Enviar sinal
1194
+ skip_step: Ignorar etapa
1195
+ attempt: tentativa %{attempt}
1196
+ attention:
1197
+ at_step_html: em %{step}
1198
+ back: "← Workflows"
1199
+ cancel_all:
1200
+ one: Cancelar %{count}
1201
+ other: Cancelar todas (%{count})
1202
+ confirm:
1203
+ cancel:
1204
+ one: Cancelar a execução presa em %{step}?
1205
+ other: Cancelar as %{count} execuções presas em %{step}?
1206
+ cancel_error:
1207
+ one: Cancelar a execução presa em %{step} por %{error}?
1208
+ other: Cancelar as %{count} execuções presas em %{step} por %{error}?
1209
+ resume:
1210
+ one: Retomar a execução em pausa em %{step}?
1211
+ other: Retomar as %{count} execuções em pausa em %{step}?
1212
+ resume_error:
1213
+ one: Retomar a execução em pausa em %{step} por %{error}?
1214
+ other: Retomar as %{count} execuções em pausa em %{step} por %{error}?
1215
+ description: Execuções em andamento que aguardam uma pessoa, agrupadas pelo que as parou. Depois de corrigida a causa, aja no grupo inteiro.
1216
+ empty_hint: Nenhuma execução em andamento está em pausa, travada, atrasada ou aguardando além de workflow_waiting_visibility_threshold.
1217
+ empty_title: Nada requer atenção.
1218
+ first_seen_html: primeira vez %{time}
1219
+ headers:
1220
+ actions: Ações
1221
+ reason: Motivo
1222
+ runs: Execuções
1223
+ seen: Visto
1224
+ workflow: Workflow
1225
+ last_seen_html: última vez %{time}
1226
+ only_class_html: Apenas %{workflow}.
1227
+ reasons:
1228
+ overdue: 'Atrasada: vencida, mas não pega'
1229
+ paused_error: Em pausa por um erro
1230
+ paused_manual: Pausada manualmente
1231
+ stalled: 'Travada: o worker parou de responder'
1232
+ waiting_overdue: Espera longa demais
1233
+ resume_all:
1234
+ one: Retomar %{count}
1235
+ other: Retomar todas (%{count})
1236
+ show_all: Mostrar todas as classes
1237
+ show_runs: Mostrar execuções
1238
+ title: Requerem atenção
1239
+ audit:
1240
+ by: "%{event} por %{actor}"
1241
+ empty: Nenhum evento registrado.
1242
+ headers:
1243
+ what: O que aconteceu
1244
+ when: Quando
1245
+ title: Trilha de auditoria
1246
+ with_reason: "%{sentence}: %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Requisição inválida: %{reason}'
1249
+ confirm:
1250
+ cancel: Cancelar este workflow? Suas etapas abertas são canceladas e ele não executa mais.
1251
+ rerun: Iniciar este workflow de novo como uma nova execução, com o mesmo sujeito e os mesmos argumentos?
1252
+ resume: Retomar este workflow?
1253
+ resume_at: Retomar este workflow na etapa escolhida? Suas etapas abertas são canceladas antes.
1254
+ run_now: Executar agora a etapa agendada em vez de esperar?
1255
+ signal: Enviar este sinal ao workflow?
1256
+ skip_step: Ignorar a etapa que este workflow aguarda e passar para a próxima?
1257
+ events:
1258
+ cancelled: Cancelado
1259
+ fan_out_finished: Fan-out concluído
1260
+ fan_out_opened: Fan-out aberto
1261
+ finished: Concluído
1262
+ late_completion_ignored: Conclusão tardia ignorada
1263
+ paused: Pausado
1264
+ rerun: Reexecutado
1265
+ rescheduled: Reagendado
1266
+ resumed: Retomado
1267
+ run_now: Executar agora
1268
+ signal_claimed: Sinal reivindicado
1269
+ signal_received: Sinal recebido
1270
+ stall_detected: Travamento detectado
1271
+ started: Iniciado
1272
+ step_completed: Etapa concluída
1273
+ step_failed: Etapa com falha
1274
+ step_reattempted: Etapa tentada novamente
1275
+ step_scheduled: Etapa agendada
1276
+ step_skipped: Etapa ignorada
1277
+ step_started: Etapa iniciada
1278
+ step_waiting: Etapa aguardando
1279
+ wait_timed_out: Espera expirada
1280
+ filters:
1281
+ apply: Aplicar filtros
1282
+ clear: Limpar
1283
+ created_from: Criado a partir de
1284
+ created_to: Criado até
1285
+ ended_from: Terminado desde
1286
+ ended_to: Terminado até
1287
+ error_class: Classe de erro
1288
+ step: Etapa atual
1289
+ subject_id: ID do sujeito
1290
+ subject_type: Tipo de sujeito
1291
+ workflow_class: Classe do workflow
1292
+ workflow_id: ID do workflow
1293
+ flash:
1294
+ bad_group: Esse grupo não é válido.
1295
+ bulk_cancel:
1296
+ one: "%{count} cancelado."
1297
+ other: "%{count} cancelados."
1298
+ bulk_cancel_skipped: "%{count} cancelados; %{skipped} já tinham avançado."
1299
+ bulk_failed: "%{count} não puderam ser alterados: %{reason}"
1300
+ bulk_more: 'Pode haver mais execuções aguardando: pressione de novo para as próximas %{cap}.'
1301
+ bulk_resume:
1302
+ one: "%{count} retomado."
1303
+ other: "%{count} retomados."
1304
+ bulk_resume_skipped: "%{count} retomados; %{skipped} já tinham avançado."
1305
+ cancel: Workflow cancelado.
1306
+ choose_step: Escolha uma etapa para retomar.
1307
+ failed:
1308
+ not_allowed: 'Não realizado: a execução agora está %{status}.'
1309
+ not_found: Esse workflow não existe mais.
1310
+ other: "%{action} falhou: %{reason}"
1311
+ payload_not_object: 'Não enviado: o payload não é um objeto JSON.'
1312
+ payload_too_large: 'Não enviado: o payload excede %{limit} bytes.'
1313
+ rerun: Nova execução iniciada.
1314
+ resume: Workflow retomado.
1315
+ resume_at: Workflow retomado em %{step}.
1316
+ run_now: A etapa agendada está executando agora.
1317
+ signal: Sinal %{name} enviado.
1318
+ signal_duplicate: O sinal %{name} já foi entregue com esta chave; nada de novo foi enviado.
1319
+ signal_name_missing: 'Não enviado: o sinal precisa de um nome.'
1320
+ skip_step: Etapa ignorada.
1321
+ headers:
1322
+ current_step: Etapa atual
1323
+ last_activity: Última atividade
1324
+ started: Iniciado
1325
+ status: Status
1326
+ subject: Sujeito
1327
+ workflow: Workflow
1328
+ index:
1329
+ attention_link:
1330
+ one: Requer atenção (%{count})
1331
+ other: Requerem atenção (%{count})
1332
+ description: 'Execuções duráveis de várias etapas: o que cada uma está fazendo e o que acontece a seguir.'
1333
+ empty_hint: Escolha outro status ou limpe os filtros. Uma execução começa com YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Nenhum workflow corresponde.
1335
+ insights_link: Análise por classe
1336
+ status_label: Filtrar por status
1337
+ title: Workflows
1338
+ next:
1339
+ cancelled_html: Cancelado %{ago}.
1340
+ due_html: 'Pronto: %{step} deveria ter rodado %{ago} e aguarda um worker.'
1341
+ finished_html: Concluído %{ago}.
1342
+ overdue_html: 'Atrasado: %{step} deveria ter rodado %{ago}; a varredura o envia de novo.'
1343
+ paused_error_html: 'Em pausa em %{step}: %{error} — retome ou cancele.'
1344
+ paused_manual_html: Em pausa em %{step} — retome ou cancele.
1345
+ performing_attempt_html: Executando %{step} (tentativa %{attempt}).
1346
+ performing_html: Executando %{step}.
1347
+ ready_html: 'Pronto: %{step} executa em seguida.'
1348
+ scheduled_html: 'Agendado: %{step} executa %{time}.'
1349
+ unknown_html: 'Status: %{status}.'
1350
+ waiting_batch_html: Aguardando o lote %{batch} (%{done} de %{total} trabalhos concluídos).
1351
+ waiting_signal_html: Aguardando o sinal %{signal} desde %{ago}.
1352
+ waiting_signal_timeout_html: Aguardando o sinal %{signal} desde %{ago}. A espera expira %{time}.
1353
+ waiting_step_html: Aguardando %{step}.
1354
+ not_found:
1355
+ hint: Pode ter terminado e sido removido após workflow_retention, ou a base de dados não pôde ser lida (veja o log).
1356
+ title: Workflow não encontrado
1357
+ outcomes:
1358
+ cancelled: cancelado
1359
+ completed: concluído
1360
+ finished_early: encerrou a execução antes do fim
1361
+ paused: pausou a execução
1362
+ reattempted: tentado novamente
1363
+ skipped: ignorado
1364
+ resume:
1365
+ carry_on: 'Retomar: prosseguir com %{step}'
1366
+ continue: 'Retomar: continuar com %{step}'
1367
+ finish: 'Retomar: concluir a execução'
1368
+ resend: 'Retomar: enviar %{step} novamente'
1369
+ retry: 'Retomar: tentar %{step} novamente'
1370
+ rewait: 'Retomar: aguardar %{step} novamente'
1371
+ show:
1372
+ actions: Ações
1373
+ arguments: Argumentos
1374
+ back: "← Workflows"
1375
+ cancelled_at: Cancelado
1376
+ class_missing: "%{workflow_class} não está carregado neste processo: a execução ainda pode ser cancelada, mas não retomada."
1377
+ definition_outdated: 'Esta execução começou com uma definição antiga de %{workflow_class}: suas etapas mudaram desde então.'
1378
+ details: Detalhes
1379
+ finished_at: Concluído
1380
+ no_arguments: Esta execução não tem argumentos.
1381
+ paused_at: Pausado
1382
+ reason_hint: Registrado na trilha de auditoria, junto de quem fez.
1383
+ reason_label: Motivo (opcional)
1384
+ rerun_of: Reexecução de
1385
+ reruns: Reexecutado como
1386
+ resume_at_label: Etapa para retomar
1387
+ signal:
1388
+ hint: Uma etapa que o aguarda acorda na hora; caso contrário, ele fica pendente até que uma etapa o pegue.
1389
+ name: Nome do sinal
1390
+ payload: Payload (JSON)
1391
+ send: Enviar sinal
1392
+ title: Enviar um sinal
1393
+ signal_statuses:
1394
+ claimed: Reivindicado
1395
+ consumed: Consumido
1396
+ pending: Pendente
1397
+ signals:
1398
+ empty: Nenhum sinal entregue a esta execução.
1399
+ headers:
1400
+ claimed: Reivindicado
1401
+ consumed: Consumido
1402
+ idempotency_key: Chave de idempotência
1403
+ name: Sinal
1404
+ received: Recebido
1405
+ status: Status
1406
+ payload: Payload
1407
+ title: Sinais
1408
+ statuses:
1409
+ cancelled: Cancelado
1410
+ finished: Concluído
1411
+ gone: removido
1412
+ paused: Em pausa
1413
+ performing: Executando
1414
+ ready: Pronto
1415
+ scheduled: Agendado
1416
+ waiting: Aguardando
1417
+ step_statuses:
1418
+ cancelled: Cancelada
1419
+ completed: Concluída
1420
+ failed: Com falha
1421
+ in_progress: Em execução
1422
+ scheduled: Agendada
1423
+ skipped: Ignorada
1424
+ waiting: Aguardando
1425
+ steps:
1426
+ batch: lote %{batch}
1427
+ caused_by: Causado por %{error}
1428
+ empty: Ainda não há tentativas.
1429
+ headers:
1430
+ finished: Concluída
1431
+ queued: Na fila
1432
+ ran: Execução
1433
+ scheduled: Agendada
1434
+ started: Iniciada
1435
+ status: Status
1436
+ step: Etapa
1437
+ waited: Espera
1438
+ worker: Worker
1439
+ revision: revisão %{revision}
1440
+ show_backtrace: Mostrar backtrace
1441
+ title: Tentativas
1442
+ waiting_for: depois aguardando %{duration}
1443
+ waits_for_html: aguarda %{signal}
1444
+ tabs:
1445
+ all: Todos
1446
+ cancelled: Cancelados
1447
+ finished: Concluídos
1448
+ ongoing: Em andamento
1449
+ paused: Em pausa
1450
+ performing: Executando
1451
+ ready: Prontos
1452
+ waiting: Aguardando
1453
+ timeline:
1454
+ caption: 'Cada tentativa, a mais antiga no topo: esperou (sua espera), na fila (vencida, ainda não pega), executou (colorida conforme terminou) e aguardando (um sinal ou seu lote), com as pausas em linha própria. A tabela de tentativas abaixo lista as mesmas durações.'
1455
+ empty: Ainda não há tentativas.
1456
+ paused_period_html: Em pausa desde %{from} durante %{duration}
1457
+ paused_row: Em pausa
1458
+ series:
1459
+ paused: Em pausa
1460
+ queued: Na fila
1461
+ ran_cancelled: Executou, cancelada
1462
+ ran_failed: Executou, falhou
1463
+ ran_ok: Executou
1464
+ ran_open: Em execução
1465
+ waited: Esperou
1466
+ waiting: Aguardando
1467
+ title: Linha do tempo