pgbus 0.19.4 → 0.20.1

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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +97 -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 +148 -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/blocked_execution.rb +12 -0
  16. data/app/models/pgbus/uniqueness_key.rb +88 -3
  17. data/app/models/pgbus/workflow_entry.rb +172 -0
  18. data/app/models/pgbus/workflow_event.rb +43 -0
  19. data/app/models/pgbus/workflow_signal.rb +77 -0
  20. data/app/models/pgbus/workflow_step.rb +149 -0
  21. data/app/views/layouts/pgbus/application.html.erb +2 -0
  22. data/app/views/pgbus/dashboard/_stats_cards.html.erb +17 -0
  23. data/app/views/pgbus/workflows/_actions.html.erb +59 -0
  24. data/app/views/pgbus/workflows/_events_table.html.erb +24 -0
  25. data/app/views/pgbus/workflows/_filters.html.erb +29 -0
  26. data/app/views/pgbus/workflows/_signal_form.html.erb +31 -0
  27. data/app/views/pgbus/workflows/_signals_table.html.erb +40 -0
  28. data/app/views/pgbus/workflows/_status_filter.html.erb +12 -0
  29. data/app/views/pgbus/workflows/_steps_table.html.erb +79 -0
  30. data/app/views/pgbus/workflows/_timeline.html.erb +49 -0
  31. data/app/views/pgbus/workflows/_workflows_table.html.erb +59 -0
  32. data/app/views/pgbus/workflows/attention.html.erb +88 -0
  33. data/app/views/pgbus/workflows/definitions/_by_revision.html.erb +52 -0
  34. data/app/views/pgbus/workflows/definitions/_duration_table.html.erb +18 -0
  35. data/app/views/pgbus/workflows/definitions/_funnel.html.erb +49 -0
  36. data/app/views/pgbus/workflows/definitions/_pipeline.html.erb +16 -0
  37. data/app/views/pgbus/workflows/definitions/_step_card.html.erb +31 -0
  38. data/app/views/pgbus/workflows/definitions/_throughput_table.html.erb +32 -0
  39. data/app/views/pgbus/workflows/definitions/_window.html.erb +17 -0
  40. data/app/views/pgbus/workflows/definitions/index.html.erb +71 -0
  41. data/app/views/pgbus/workflows/definitions/not_found.html.erb +5 -0
  42. data/app/views/pgbus/workflows/definitions/show.html.erb +80 -0
  43. data/app/views/pgbus/workflows/index.html.erb +15 -0
  44. data/app/views/pgbus/workflows/not_found.html.erb +5 -0
  45. data/app/views/pgbus/workflows/show.html.erb +93 -0
  46. data/config/i18n-tasks.yml +6 -0
  47. data/config/locales/da.yml +445 -0
  48. data/config/locales/de.yml +445 -0
  49. data/config/locales/en.yml +445 -0
  50. data/config/locales/es.yml +445 -0
  51. data/config/locales/fi.yml +445 -0
  52. data/config/locales/fr.yml +445 -0
  53. data/config/locales/it.yml +445 -0
  54. data/config/locales/ja.yml +445 -0
  55. data/config/locales/nb.yml +445 -0
  56. data/config/locales/nl.yml +445 -0
  57. data/config/locales/pt.yml +445 -0
  58. data/config/locales/sv.yml +445 -0
  59. data/config/routes.rb +26 -0
  60. data/lib/generators/pgbus/add_workflow_signals_generator.rb +56 -0
  61. data/lib/generators/pgbus/add_workflows_generator.rb +54 -0
  62. data/lib/generators/pgbus/templates/add_workflow_signals.rb.erb +51 -0
  63. data/lib/generators/pgbus/templates/add_workflows.rb.erb +150 -0
  64. data/lib/generators/pgbus/templates/migration.rb.erb +127 -0
  65. data/lib/pgbus/active_job/adapter.rb +81 -3
  66. data/lib/pgbus/active_job/delivery.rb +63 -0
  67. data/lib/pgbus/active_job/executor.rb +20 -8
  68. data/lib/pgbus/concurrency/blocked_execution.rb +14 -6
  69. data/lib/pgbus/configuration/workflow_settings.rb +99 -0
  70. data/lib/pgbus/configuration.rb +64 -4
  71. data/lib/pgbus/dead_letter_header.rb +9 -1
  72. data/lib/pgbus/generators/migration_detector.rb +40 -0
  73. data/lib/pgbus/instrumentation.rb +33 -0
  74. data/lib/pgbus/integrations/appsignal/dashboard.json +157 -1
  75. data/lib/pgbus/integrations/appsignal/subscriber.rb +16 -1
  76. data/lib/pgbus/mcp/rack_app.rb +7 -2
  77. data/lib/pgbus/mcp/runner.rb +2 -1
  78. data/lib/pgbus/mcp/serialization.rb +25 -0
  79. data/lib/pgbus/mcp/server.rb +53 -10
  80. data/lib/pgbus/mcp/tools/deploy_tasks_tool.rb +1 -10
  81. data/lib/pgbus/mcp/tools/workflow_cancel_tool.rb +23 -0
  82. data/lib/pgbus/mcp/tools/workflow_definitions_tool.rb +36 -0
  83. data/lib/pgbus/mcp/tools/workflow_detail_tool.rb +38 -0
  84. data/lib/pgbus/mcp/tools/workflow_resume_at_tool.rb +32 -0
  85. data/lib/pgbus/mcp/tools/workflow_resume_tool.rb +24 -0
  86. data/lib/pgbus/mcp/tools/workflow_run_now_tool.rb +23 -0
  87. data/lib/pgbus/mcp/tools/workflow_signal_tool.rb +77 -0
  88. data/lib/pgbus/mcp/tools/workflow_skip_step_tool.rb +23 -0
  89. data/lib/pgbus/mcp/tools/workflow_stats_tool.rb +42 -0
  90. data/lib/pgbus/mcp/tools/workflows_attention_tool.rb +42 -0
  91. data/lib/pgbus/mcp/tools/workflows_tool.rb +60 -0
  92. data/lib/pgbus/mcp/workflow_insights_payload.rb +15 -0
  93. data/lib/pgbus/mcp/workflow_payloads.rb +53 -0
  94. data/lib/pgbus/mcp/write_tool.rb +134 -0
  95. data/lib/pgbus/mcp.rb +15 -0
  96. data/lib/pgbus/metrics/backends/statsd.rb +6 -0
  97. data/lib/pgbus/metrics/subscriber.rb +14 -1
  98. data/lib/pgbus/metrics/workflow_metrics.rb +75 -0
  99. data/lib/pgbus/process/consumer.rb +2 -1
  100. data/lib/pgbus/process/dispatcher.rb +39 -3
  101. data/lib/pgbus/process/worker.rb +10 -1
  102. data/lib/pgbus/recurring/schedule.rb +1 -1
  103. data/lib/pgbus/streams/presence.rb +65 -36
  104. data/lib/pgbus/uniqueness.rb +23 -6
  105. data/lib/pgbus/version.rb +1 -1
  106. data/lib/pgbus/web/data_source/workflow_actions.rb +109 -0
  107. data/lib/pgbus/web/data_source/workflow_insights.rb +99 -0
  108. data/lib/pgbus/web/data_source/workflow_list.rb +291 -0
  109. data/lib/pgbus/web/data_source.rb +126 -15
  110. data/lib/pgbus/web/workflow_action_plan.rb +62 -0
  111. data/lib/pgbus/web/workflow_insights_queries.rb +250 -0
  112. data/lib/pgbus/web/workflow_insights_report.rb +171 -0
  113. data/lib/pgbus/web/workflow_payload.rb +36 -0
  114. data/lib/pgbus/web/workflow_query.rb +82 -0
  115. data/lib/pgbus/web/workflow_state.rb +89 -0
  116. data/lib/pgbus/web/workflow_timeline.rb +130 -0
  117. data/lib/pgbus/web/workflow_window.rb +51 -0
  118. data/lib/pgbus/workflow/batch_finished_job.rb +21 -0
  119. data/lib/pgbus/workflow/dsl.rb +105 -0
  120. data/lib/pgbus/workflow/error_capture.rb +63 -0
  121. data/lib/pgbus/workflow/exception_policy.rb +170 -0
  122. data/lib/pgbus/workflow/fan_out.rb +157 -0
  123. data/lib/pgbus/workflow/fan_out_definition.rb +41 -0
  124. data/lib/pgbus/workflow/flow_control.rb +94 -0
  125. data/lib/pgbus/workflow/instance.rb +183 -0
  126. data/lib/pgbus/workflow/outside_verbs.rb +138 -0
  127. data/lib/pgbus/workflow/payload.rb +53 -0
  128. data/lib/pgbus/workflow/registry.rb +53 -0
  129. data/lib/pgbus/workflow/removed_step.rb +14 -0
  130. data/lib/pgbus/workflow/runner.rb +218 -0
  131. data/lib/pgbus/workflow/signal_matcher.rb +53 -0
  132. data/lib/pgbus/workflow/signals.rb +132 -0
  133. data/lib/pgbus/workflow/states.rb +119 -0
  134. data/lib/pgbus/workflow/step_context.rb +58 -0
  135. data/lib/pgbus/workflow/step_definition.rb +133 -0
  136. data/lib/pgbus/workflow/step_execution.rb +242 -0
  137. data/lib/pgbus/workflow/step_job.rb +28 -0
  138. data/lib/pgbus/workflow/step_outcome.rb +151 -0
  139. data/lib/pgbus/workflow/steps.rb +103 -0
  140. data/lib/pgbus/workflow/sweep.rb +156 -0
  141. data/lib/pgbus/workflow/test_helpers.rb +152 -0
  142. data/lib/pgbus/workflow/wait_timeout.rb +94 -0
  143. data/lib/pgbus/workflow/waiting.rb +82 -0
  144. data/lib/pgbus/workflow.rb +183 -0
  145. data/sig/pgbus/configuration.rbs +23 -0
  146. metadata +92 -1
@@ -140,6 +140,11 @@ it:
140
140
  throughput: Throughput
141
141
  throughput_detail: lavori/min negli ultimi %{minutes} min
142
142
  throughput_unavailable: richiede le statistiche dei job (rails g pgbus:add_job_stats)
143
+ workflows: Workflow
144
+ workflows_attention:
145
+ one: "%{count} richiede attenzione"
146
+ other: "%{count} richiedono attenzione"
147
+ workflows_detail: in corso (%{paused} in pausa)
143
148
  verdict:
144
149
  links:
145
150
  dlq: Dead letter
@@ -723,6 +728,7 @@ it:
723
728
  processes: Processi
724
729
  queues: Code
725
730
  recurring: Ricorrente
731
+ workflows: Workflow
726
732
  return_to_app: Torna all'app
727
733
  title: Cruscotto Pgbus
728
734
  toggle_dark_mode: Attiva/disattiva modalità scura
@@ -1023,3 +1029,442 @@ it:
1023
1029
  disabled: Attività disabilitata
1024
1030
  enabled: Attività abilitata
1025
1031
  failed: Impossibile cambiare lo stato dell'attività
1032
+ workflow_insights:
1033
+ back_to_classes: Tutte le classi di workflow
1034
+ back_to_runs: Tutte le esecuzioni dei workflow
1035
+ bad_request: 'Richiesta non valida: %{reason}'
1036
+ capped: 'Limitato a workflow_retention (%{retention}): le esecuzioni terminate e annullate più vecchie vengono eliminate.'
1037
+ few_samples:
1038
+ one: n=%{count}, pochi campioni
1039
+ other: n=%{count}, pochi campioni
1040
+ index:
1041
+ description: 'Come è andata ogni classe di workflow in %{window}: le esecuzioni in corso, quelle terminate e quanto dura un''esecuzione dall''inizio alla fine.'
1042
+ empty_hint: 'Definisci una sottoclasse di Pgbus::Workflow e avvia un''esecuzione: YourWorkflow.start!(subject, **arguments).'
1043
+ empty_title: Nessuna classe di workflow è ancora stata eseguita.
1044
+ headers:
1045
+ attention: Richiedono attenzione
1046
+ cancelled: Annullate
1047
+ duration_p50: Durata p50
1048
+ duration_p95: Durata p95
1049
+ finished: Terminate
1050
+ ongoing: In corso
1051
+ paused: In pausa
1052
+ workflow_class: Classe di workflow
1053
+ title: Analisi dei workflow
1054
+ links:
1055
+ at_step: "%{status} esecuzioni a %{step}"
1056
+ attention: esecuzioni di %{workflow} che richiedono attenzione
1057
+ cancelled: esecuzioni di %{workflow} annullate nella finestra
1058
+ cancelled_bucket: esecuzioni annullate in questo periodo
1059
+ finished: esecuzioni di %{workflow} terminate nella finestra
1060
+ finished_bucket: esecuzioni terminate in questo periodo
1061
+ ongoing: esecuzioni in corso di %{workflow}
1062
+ paused: esecuzioni in pausa di %{workflow}
1063
+ started: esecuzioni di %{workflow} avviate nella finestra
1064
+ started_bucket: esecuzioni avviate in questo periodo
1065
+ not_found:
1066
+ hint: Nessuna sottoclasse di Pgbus::Workflow e nessuna esecuzione si chiama %{workflow} (oppure la lettura è fallita, vedi il log).
1067
+ title: Classe di workflow sconosciuta
1068
+ not_loaded: Definizione non caricata
1069
+ not_loaded_hint: 'Questa classe non si carica più nell''app: i suoi passi vengono dalle righe delle sue esecuzioni, nell''ordine in cui le esecuzioni li hanno raggiunti.'
1070
+ percentile: "%{name} %{value}"
1071
+ removed_in_flight:
1072
+ one: "%{count} esecuzione sul passo rimosso %{step}"
1073
+ other: "%{count} esecuzioni sul passo rimosso %{step}"
1074
+ show:
1075
+ by_revision:
1076
+ all_steps: Tutti i passi
1077
+ caption: 'Gli stessi numeri per le ultime cinque revisioni dell''app che hanno terminato un tentativo nella finestra, dalla più recente: una regressione dopo un deploy appare come una riga.'
1078
+ empty: Nessun tentativo in questa finestra ha registrato una revisione dell'app (config.app_revision).
1079
+ headers:
1080
+ attempts: Tentativi
1081
+ failed: Falliti
1082
+ reattempted: Ritentati
1083
+ revision: Revisione
1084
+ run_time: Tempo di esecuzione
1085
+ skipped: Saltati
1086
+ step: Passo
1087
+ seen_html: vista da %{from} a %{to}
1088
+ title: Per revisione dell'app
1089
+ worse: in aumento da %{rate} su %{revision}
1090
+ charts:
1091
+ durations:
1092
+ between: "%{from}–%{to}"
1093
+ caption:
1094
+ one: Quanto è durata la %{count} esecuzione terminata nella finestra, dall'inizio alla fine.
1095
+ other: Quanto sono durate le %{count} esecuzioni terminate nella finestra, dall'inizio alla fine.
1096
+ headers:
1097
+ range: Durata
1098
+ runs: Esecuzioni
1099
+ over: "%{from} o più"
1100
+ title: Durata dall'inizio alla fine
1101
+ under: meno di %{to}
1102
+ series:
1103
+ cancelled: Annullate
1104
+ finished: Terminate
1105
+ runs: Esecuzioni
1106
+ started: Avviate
1107
+ throughput:
1108
+ caption: 'Esecuzioni avviate, terminate e annullate per %{bucket} in %{window}: %{started} avviate, %{finished} terminate, %{cancelled} annullate.'
1109
+ headers:
1110
+ cancelled: Annullate
1111
+ finished: Terminate
1112
+ from: Da
1113
+ started: Avviate
1114
+ title: Esecuzioni per %{bucket}
1115
+ description: 'In %{window}: dove sono ora le sue esecuzioni, come si comporta ogni passo e dove si fermano le esecuzioni.'
1116
+ funnel:
1117
+ caption:
1118
+ one: 'Della %{count} esecuzione avviata nella finestra: quante hanno raggiunto ogni passo e dove si trova ora.'
1119
+ other: 'Delle %{count} esecuzioni avviate nella finestra: quante hanno raggiunto ogni passo e dove si trova ora ciascuna.'
1120
+ empty: Nessuna esecuzione avviata in questa finestra.
1121
+ headers:
1122
+ now_here: Ora a questo passo
1123
+ reached: Raggiunto
1124
+ share: Delle avviate
1125
+ step: Passo
1126
+ here:
1127
+ cancelled:
1128
+ one: "%{count} annullata"
1129
+ other: "%{count} annullate"
1130
+ finished:
1131
+ one: "%{count} terminata"
1132
+ other: "%{count} terminate"
1133
+ paused:
1134
+ one: "%{count} in pausa"
1135
+ other: "%{count} in pausa"
1136
+ performing:
1137
+ one: "%{count} in esecuzione"
1138
+ other: "%{count} in esecuzione"
1139
+ ready:
1140
+ one: "%{count} pianificata"
1141
+ other: "%{count} pianificate"
1142
+ waiting:
1143
+ one: "%{count} in attesa"
1144
+ other: "%{count} in attesa"
1145
+ title: Imbuto
1146
+ pipeline:
1147
+ attempts:
1148
+ one: "%{count} tentativo"
1149
+ other: "%{count} tentativi"
1150
+ caption: 'Ogni passo in ordine: le esecuzioni ferme lì ora e come sono andati i suoi tentativi terminati nella finestra.'
1151
+ empty: 'Ancora nessun passo: nessuna esecuzione di questa classe ha un passo nella finestra e nessuna è in corso.'
1152
+ failed: Falliti
1153
+ kinds:
1154
+ fan_out: Fan-out
1155
+ removed: Rimosso
1156
+ signal: Attende un segnale
1157
+ undeclared: Non nella definizione
1158
+ live:
1159
+ paused: In pausa
1160
+ performing: In esecuzione
1161
+ ready: Pianificate
1162
+ waiting: In attesa
1163
+ now_label: Esecuzioni a questo passo ora
1164
+ pickup: Presa in carico
1165
+ reattempted: Ritentati
1166
+ run_time: Tempo di esecuzione
1167
+ skipped: Saltati
1168
+ step_link: Esecuzioni in corso a %{step}
1169
+ title: Pipeline
1170
+ window_label: Tentativi terminati nella finestra
1171
+ summary:
1172
+ attention: Richiedono attenzione
1173
+ cancelled: Annullate
1174
+ duration: Durata p50
1175
+ finished: Terminate
1176
+ ongoing: In corso
1177
+ started: Avviate
1178
+ window_label: Finestra temporale
1179
+ windows:
1180
+ 1h: l'ultima ora
1181
+ 24h: le ultime 24 ore
1182
+ 30d: gli ultimi 30 giorni
1183
+ 7d: gli ultimi 7 giorni
1184
+ workflows:
1185
+ actions:
1186
+ bulk_cancel: Annulla tutti
1187
+ bulk_resume: Riprendi tutti
1188
+ cancel: Annulla
1189
+ rerun: Riesegui
1190
+ resume: Riprendi
1191
+ resume_at: Riprendi dal passaggio
1192
+ run_now: Esegui ora
1193
+ signal: Invia segnale
1194
+ skip_step: Salta passaggio
1195
+ attempt: tentativo %{attempt}
1196
+ attention:
1197
+ at_step_html: a %{step}
1198
+ back: "← Workflow"
1199
+ cancel_all:
1200
+ one: Annulla %{count}
1201
+ other: Annulla tutte (%{count})
1202
+ confirm:
1203
+ cancel:
1204
+ one: Annullare l'esecuzione bloccata a %{step}?
1205
+ other: Annullare tutte le %{count} esecuzioni bloccate a %{step}?
1206
+ cancel_error:
1207
+ one: Annullare l'esecuzione bloccata a %{step} per %{error}?
1208
+ other: Annullare tutte le %{count} esecuzioni bloccate a %{step} per %{error}?
1209
+ resume:
1210
+ one: Riprendere l'esecuzione in pausa a %{step}?
1211
+ other: Riprendere tutte le %{count} esecuzioni in pausa a %{step}?
1212
+ resume_error:
1213
+ one: Riprendere l'esecuzione in pausa a %{step} per %{error}?
1214
+ other: Riprendere tutte le %{count} esecuzioni in pausa a %{step} per %{error}?
1215
+ description: Esecuzioni in corso che attendono una persona, raggruppate in base a ciò che le ha fermate. Una volta risolta la causa, agisci sull'intero gruppo.
1216
+ empty_hint: Nessuna esecuzione in corso è in pausa, in stallo, in ritardo o in attesa oltre workflow_waiting_visibility_threshold.
1217
+ empty_title: Niente richiede attenzione.
1218
+ first_seen_html: prima volta %{time}
1219
+ headers:
1220
+ actions: Azioni
1221
+ reason: Motivo
1222
+ runs: Esecuzioni
1223
+ seen: Visto
1224
+ workflow: Workflow
1225
+ last_seen_html: ultima volta %{time}
1226
+ only_class_html: Solo %{workflow}.
1227
+ reasons:
1228
+ overdue: 'In ritardo: prevista, ma non presa'
1229
+ paused_error: In pausa per un errore
1230
+ paused_manual: Messa in pausa a mano
1231
+ stalled: 'In stallo: il suo worker ha smesso di rispondere'
1232
+ waiting_overdue: Attesa troppo lunga
1233
+ resume_all:
1234
+ one: Riprendi %{count}
1235
+ other: Riprendi tutte (%{count})
1236
+ show_all: Mostra tutte le classi
1237
+ show_runs: Mostra esecuzioni
1238
+ title: Richiedono attenzione
1239
+ audit:
1240
+ by: "%{event} da %{actor}"
1241
+ empty: Nessun evento registrato.
1242
+ headers:
1243
+ what: Cosa è successo
1244
+ when: Quando
1245
+ title: Registro di audit
1246
+ with_reason: "%{sentence}: %{reason}"
1247
+ with_step: "%{sentence} (%{step} #%{attempt})"
1248
+ bad_request: 'Richiesta non valida: %{reason}'
1249
+ confirm:
1250
+ cancel: Annullare questo workflow? I suoi passaggi aperti vengono annullati e non verrà più eseguito.
1251
+ rerun: Avviare di nuovo questo workflow come nuova esecuzione, con lo stesso soggetto e gli stessi argomenti?
1252
+ resume: Riprendere questo workflow?
1253
+ resume_at: Riprendere questo workflow dal passaggio scelto? I suoi passaggi aperti vengono prima annullati.
1254
+ run_now: Eseguire ora il passaggio pianificato invece di attendere?
1255
+ signal: Inviare questo segnale al workflow?
1256
+ skip_step: Saltare il passaggio atteso da questo workflow e passare al successivo?
1257
+ events:
1258
+ cancelled: Annullato
1259
+ fan_out_finished: Fan-out terminato
1260
+ fan_out_opened: Fan-out aperto
1261
+ finished: Terminato
1262
+ late_completion_ignored: Completamento tardivo ignorato
1263
+ paused: In pausa
1264
+ rerun: Rieseguito
1265
+ rescheduled: Ripianificato
1266
+ resumed: Ripreso
1267
+ run_now: Esegui ora
1268
+ signal_claimed: Segnale preso in carico
1269
+ signal_received: Segnale ricevuto
1270
+ stall_detected: Stallo rilevato
1271
+ started: Avviato
1272
+ step_completed: Passaggio completato
1273
+ step_failed: Passaggio fallito
1274
+ step_reattempted: Passaggio ritentato
1275
+ step_scheduled: Passaggio pianificato
1276
+ step_skipped: Passaggio saltato
1277
+ step_started: Passaggio avviato
1278
+ step_waiting: Passaggio in attesa
1279
+ wait_timed_out: Attesa scaduta
1280
+ filters:
1281
+ apply: Applica filtri
1282
+ clear: Cancella
1283
+ created_from: Creato dal
1284
+ created_to: Creato fino al
1285
+ ended_from: Terminato dal
1286
+ ended_to: Terminato fino al
1287
+ error_class: Classe di errore
1288
+ step: Passaggio corrente
1289
+ subject_id: ID del soggetto
1290
+ subject_type: Tipo di soggetto
1291
+ workflow_class: Classe del workflow
1292
+ workflow_id: ID del workflow
1293
+ flash:
1294
+ bad_group: Quel gruppo non è valido.
1295
+ bulk_cancel:
1296
+ one: "%{count} annullato."
1297
+ other: "%{count} annullati."
1298
+ bulk_cancel_skipped: "%{count} annullati; %{skipped} erano già andati avanti."
1299
+ bulk_failed: 'Impossibile modificarne %{count}: %{reason}'
1300
+ bulk_more: 'Potrebbero esserci altre esecuzioni in attesa: premi di nuovo per le prossime %{cap}.'
1301
+ bulk_resume:
1302
+ one: "%{count} ripreso."
1303
+ other: "%{count} ripresi."
1304
+ bulk_resume_skipped: "%{count} ripresi; %{skipped} erano già andati avanti."
1305
+ cancel: Workflow annullato.
1306
+ choose_step: Scegli un passaggio da cui riprendere.
1307
+ failed:
1308
+ not_allowed: 'Non eseguito: l''esecuzione è ora %{status}.'
1309
+ not_found: Quel workflow non esiste più.
1310
+ other: "%{action} non riuscito: %{reason}"
1311
+ payload_not_object: 'Non inviato: il payload non è un oggetto JSON.'
1312
+ payload_too_large: 'Non inviato: il payload supera %{limit} byte.'
1313
+ rerun: Avviata una nuova esecuzione.
1314
+ resume: Workflow ripreso.
1315
+ resume_at: Workflow ripreso da %{step}.
1316
+ run_now: Il passaggio pianificato viene eseguito ora.
1317
+ signal: Segnale %{name} inviato.
1318
+ signal_duplicate: Il segnale %{name} è già stato consegnato con questa chiave; non è stato inviato nulla di nuovo.
1319
+ signal_name_missing: 'Non inviato: il segnale ha bisogno di un nome.'
1320
+ skip_step: Passaggio saltato.
1321
+ headers:
1322
+ current_step: Passaggio corrente
1323
+ last_activity: Ultima attività
1324
+ started: Avviato
1325
+ status: Stato
1326
+ subject: Soggetto
1327
+ workflow: Workflow
1328
+ index:
1329
+ attention_link:
1330
+ one: Richiede attenzione (%{count})
1331
+ other: Richiedono attenzione (%{count})
1332
+ description: 'Esecuzioni durevoli in più passaggi: cosa sta facendo ciascuna e cosa succede dopo.'
1333
+ empty_hint: Scegli un altro stato o cancella i filtri. Un'esecuzione parte con YourWorkflow.start!(subject, **arguments).
1334
+ empty_title: Nessun workflow corrisponde.
1335
+ insights_link: Analisi per classe
1336
+ status_label: Filtra per stato
1337
+ title: Workflow
1338
+ next:
1339
+ cancelled_html: Annullato %{ago}.
1340
+ due_html: 'Pronto: %{step} era previsto %{ago} e attende un worker.'
1341
+ finished_html: Terminato %{ago}.
1342
+ overdue_html: 'In ritardo: %{step} era previsto %{ago}; la scansione lo invia di nuovo.'
1343
+ paused_error_html: 'In pausa su %{step}: %{error} — riprendi o annulla.'
1344
+ paused_manual_html: In pausa su %{step} — riprendi o annulla.
1345
+ performing_attempt_html: Esecuzione di %{step} (tentativo %{attempt}).
1346
+ performing_html: Esecuzione di %{step}.
1347
+ ready_html: 'Pronto: %{step} viene eseguito subito dopo.'
1348
+ scheduled_html: 'Pianificato: %{step} viene eseguito %{time}.'
1349
+ unknown_html: 'Stato: %{status}.'
1350
+ waiting_batch_html: In attesa del lotto %{batch} (%{done} lavori su %{total} completati).
1351
+ waiting_signal_html: In attesa del segnale %{signal} da %{ago}.
1352
+ waiting_signal_late_html: In attesa del segnale %{signal} da %{ago} (in ritardo da %{late}). Il prossimo avviso di ritardo parte %{time}.
1353
+ waiting_signal_notify_html: In attesa del segnale %{signal} da %{ago}. Un avviso di ritardo parte %{time} e l'attesa continua.
1354
+ waiting_signal_timeout_html: In attesa del segnale %{signal} da %{ago}. L'attesa scade %{time}.
1355
+ waiting_step_html: In attesa di %{step}.
1356
+ not_found:
1357
+ hint: Potrebbe essere terminato e rimosso dopo workflow_retention, oppure non è stato possibile leggere il database (vedi il log).
1358
+ title: Workflow non trovato
1359
+ outcomes:
1360
+ cancelled: annullato
1361
+ completed: completato
1362
+ finished_early: ha terminato l'esecuzione in anticipo
1363
+ paused: ha messo in pausa l'esecuzione
1364
+ reattempted: ritentato
1365
+ skipped: saltato
1366
+ resume:
1367
+ carry_on: 'Riprendi: prosegui con %{step}'
1368
+ continue: 'Riprendi: continua con %{step}'
1369
+ finish: 'Riprendi: termina l''esecuzione'
1370
+ resend: 'Riprendi: invia di nuovo %{step}'
1371
+ retry: 'Riprendi: riprova %{step}'
1372
+ rewait: 'Riprendi: attendi di nuovo %{step}'
1373
+ show:
1374
+ actions: Azioni
1375
+ arguments: Argomenti
1376
+ back: "← Workflow"
1377
+ cancelled_at: Annullato
1378
+ class_missing: "%{workflow_class} non è caricato in questo processo: l'esecuzione può ancora essere annullata, ma non ripresa."
1379
+ definition_outdated: 'Questa esecuzione è partita con una definizione precedente di %{workflow_class}: da allora i suoi passaggi sono cambiati.'
1380
+ details: Dettagli
1381
+ finished_at: Terminato
1382
+ no_arguments: Questa esecuzione non ha argomenti.
1383
+ paused_at: In pausa
1384
+ reason_hint: Registrato nel registro di audit, insieme a chi l'ha fatto.
1385
+ reason_label: Motivo (facoltativo)
1386
+ rerun_of: Riesecuzione di
1387
+ reruns: Rieseguito come
1388
+ resume_at_label: Passaggio da cui riprendere
1389
+ signal:
1390
+ hint: Un passaggio che lo attende si risveglia subito; altrimenti resta in sospeso finché un passaggio lo prende.
1391
+ name: Nome del segnale
1392
+ payload: Payload (JSON)
1393
+ send: Invia segnale
1394
+ title: Invia un segnale
1395
+ signal_statuses:
1396
+ claimed: Presa in carico
1397
+ consumed: Consumato
1398
+ pending: In sospeso
1399
+ signals:
1400
+ empty: Nessun segnale consegnato a questa esecuzione.
1401
+ headers:
1402
+ claimed: Preso in carico
1403
+ consumed: Consumato
1404
+ idempotency_key: Chiave di idempotenza
1405
+ name: Segnale
1406
+ received: Ricevuto
1407
+ status: Stato
1408
+ payload: Payload
1409
+ title: Segnali
1410
+ statuses:
1411
+ cancelled: Annullato
1412
+ finished: Terminato
1413
+ gone: scomparso
1414
+ paused: In pausa
1415
+ performing: In esecuzione
1416
+ ready: Pronto
1417
+ scheduled: Pianificato
1418
+ waiting: In attesa
1419
+ step_statuses:
1420
+ cancelled: Annullato
1421
+ completed: Completato
1422
+ failed: Fallito
1423
+ in_progress: In esecuzione
1424
+ scheduled: Pianificato
1425
+ skipped: Saltato
1426
+ waiting: In attesa
1427
+ steps:
1428
+ batch: lotto %{batch}
1429
+ caused_by: Causato da %{error}
1430
+ empty: Ancora nessun tentativo.
1431
+ headers:
1432
+ finished: Terminato
1433
+ queued: In coda
1434
+ ran: Esecuzione
1435
+ scheduled: Pianificato
1436
+ started: Avviato
1437
+ status: Stato
1438
+ step: Passaggio
1439
+ waited: Attesa
1440
+ worker: Worker
1441
+ revision: revisione %{revision}
1442
+ show_backtrace: Mostra backtrace
1443
+ title: Tentativi
1444
+ waiting_for: poi in attesa per %{duration}
1445
+ waits_for_html: attende %{signal}
1446
+ tabs:
1447
+ all: Tutti
1448
+ cancelled: Annullati
1449
+ finished: Terminati
1450
+ ongoing: In corso
1451
+ paused: In pausa
1452
+ performing: In esecuzione
1453
+ ready: Pronti
1454
+ waiting: In attesa
1455
+ timeline:
1456
+ caption: 'Ogni tentativo, il più vecchio in alto: atteso (la sua attesa), in coda (previsto, non ancora preso), eseguito (colorato in base a come è finito) e in attesa (di un segnale o del suo lotto), con le pause su una riga a parte. La tabella dei tentativi qui sotto riporta le stesse durate. Una linea tratteggiata segna ogni volta che un''attesa ha superato la scadenza.'
1457
+ empty: Ancora nessun tentativo.
1458
+ paused_period_html: In pausa dalle %{from} per %{duration}
1459
+ paused_row: In pausa
1460
+ series:
1461
+ paused: In pausa
1462
+ queued: In coda
1463
+ ran_cancelled: Eseguito, annullato
1464
+ ran_failed: Eseguito, fallito
1465
+ ran_ok: Eseguito
1466
+ ran_open: In esecuzione
1467
+ waited: Atteso
1468
+ waiting: In attesa
1469
+ title: Cronologia
1470
+ wait_timeout_html: 'L''attesa di %{step} ha superato la scadenza alle %{time} (on_timeout: %{action}).'