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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.4
4
+ version: 0.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
@@ -145,6 +145,8 @@ files:
145
145
  - app/controllers/pgbus/processes_controller.rb
146
146
  - app/controllers/pgbus/queues_controller.rb
147
147
  - app/controllers/pgbus/recurring_tasks_controller.rb
148
+ - app/controllers/pgbus/workflow_definitions_controller.rb
149
+ - app/controllers/pgbus/workflows_controller.rb
148
150
  - app/frontend/pgbus/application.js
149
151
  - app/frontend/pgbus/application.min.js
150
152
  - app/frontend/pgbus/application.min.js.map
@@ -165,6 +167,8 @@ files:
165
167
  - app/helpers/pgbus/insights_helper.rb
166
168
  - app/helpers/pgbus/processes_helper.rb
167
169
  - app/helpers/pgbus/streams_helper.rb
170
+ - app/helpers/pgbus/workflow_insights_helper.rb
171
+ - app/helpers/pgbus/workflows_helper.rb
168
172
  - app/models/pgbus/application_record.rb
169
173
  - app/models/pgbus/batch_entry.rb
170
174
  - app/models/pgbus/batch_execution.rb
@@ -182,6 +186,10 @@ files:
182
186
  - app/models/pgbus/stream_queue.rb
183
187
  - app/models/pgbus/stream_stat.rb
184
188
  - app/models/pgbus/uniqueness_key.rb
189
+ - app/models/pgbus/workflow_entry.rb
190
+ - app/models/pgbus/workflow_event.rb
191
+ - app/models/pgbus/workflow_signal.rb
192
+ - app/models/pgbus/workflow_step.rb
185
193
  - app/views/layouts/pgbus/application.html.erb
186
194
  - app/views/pgbus/batches/_batches_table.html.erb
187
195
  - app/views/pgbus/batches/_progress.html.erb
@@ -235,6 +243,29 @@ files:
235
243
  - app/views/pgbus/recurring_tasks/show.html.erb
236
244
  - app/views/pgbus/shared/_empty_row.html.erb
237
245
  - app/views/pgbus/shared/_pager.html.erb
246
+ - app/views/pgbus/workflows/_actions.html.erb
247
+ - app/views/pgbus/workflows/_events_table.html.erb
248
+ - app/views/pgbus/workflows/_filters.html.erb
249
+ - app/views/pgbus/workflows/_signal_form.html.erb
250
+ - app/views/pgbus/workflows/_signals_table.html.erb
251
+ - app/views/pgbus/workflows/_status_filter.html.erb
252
+ - app/views/pgbus/workflows/_steps_table.html.erb
253
+ - app/views/pgbus/workflows/_timeline.html.erb
254
+ - app/views/pgbus/workflows/_workflows_table.html.erb
255
+ - app/views/pgbus/workflows/attention.html.erb
256
+ - app/views/pgbus/workflows/definitions/_by_revision.html.erb
257
+ - app/views/pgbus/workflows/definitions/_duration_table.html.erb
258
+ - app/views/pgbus/workflows/definitions/_funnel.html.erb
259
+ - app/views/pgbus/workflows/definitions/_pipeline.html.erb
260
+ - app/views/pgbus/workflows/definitions/_step_card.html.erb
261
+ - app/views/pgbus/workflows/definitions/_throughput_table.html.erb
262
+ - app/views/pgbus/workflows/definitions/_window.html.erb
263
+ - app/views/pgbus/workflows/definitions/index.html.erb
264
+ - app/views/pgbus/workflows/definitions/not_found.html.erb
265
+ - app/views/pgbus/workflows/definitions/show.html.erb
266
+ - app/views/pgbus/workflows/index.html.erb
267
+ - app/views/pgbus/workflows/not_found.html.erb
268
+ - app/views/pgbus/workflows/show.html.erb
238
269
  - config/i18n-tasks.yml
239
270
  - config/locales/da.yml
240
271
  - config/locales/de.yml
@@ -268,6 +299,8 @@ files:
268
299
  - lib/generators/pgbus/add_stream_queues_generator.rb
269
300
  - lib/generators/pgbus/add_stream_stats_generator.rb
270
301
  - lib/generators/pgbus/add_uniqueness_keys_generator.rb
302
+ - lib/generators/pgbus/add_workflow_signals_generator.rb
303
+ - lib/generators/pgbus/add_workflows_generator.rb
271
304
  - lib/generators/pgbus/install_generator.rb
272
305
  - lib/generators/pgbus/migrate_job_locks_generator.rb
273
306
  - lib/generators/pgbus/migration_path.rb
@@ -287,6 +320,8 @@ files:
287
320
  - lib/generators/pgbus/templates/add_stream_queues.rb.erb
288
321
  - lib/generators/pgbus/templates/add_stream_stats.rb.erb
289
322
  - lib/generators/pgbus/templates/add_uniqueness_keys.rb.erb
323
+ - lib/generators/pgbus/templates/add_workflow_signals.rb.erb
324
+ - lib/generators/pgbus/templates/add_workflows.rb.erb
290
325
  - lib/generators/pgbus/templates/deploy_tasks.yml.erb
291
326
  - lib/generators/pgbus/templates/initializer.rb.erb
292
327
  - lib/generators/pgbus/templates/migrate_job_locks_to_uniqueness_keys.rb.erb
@@ -304,6 +339,7 @@ files:
304
339
  - lib/pgbus/active_job/adapter.rb
305
340
  - lib/pgbus/active_job/batch_id.rb
306
341
  - lib/pgbus/active_job/current_attributes.rb
342
+ - lib/pgbus/active_job/delivery.rb
307
343
  - lib/pgbus/active_job/executor.rb
308
344
  - lib/pgbus/autovacuum_tuning.rb
309
345
  - lib/pgbus/batch.rb
@@ -331,6 +367,7 @@ files:
331
367
  - lib/pgbus/configuration/presence_settings.rb
332
368
  - lib/pgbus/configuration/snapshot.rb
333
369
  - lib/pgbus/configuration/stream_authorization.rb
370
+ - lib/pgbus/configuration/workflow_settings.rb
334
371
  - lib/pgbus/current_attributes.rb
335
372
  - lib/pgbus/database_tasks_guard.rb
336
373
  - lib/pgbus/dead_letter_header.rb
@@ -376,6 +413,7 @@ files:
376
413
  - lib/pgbus/mcp/rack_app.rb
377
414
  - lib/pgbus/mcp/redactor.rb
378
415
  - lib/pgbus/mcp/runner.rb
416
+ - lib/pgbus/mcp/serialization.rb
379
417
  - lib/pgbus/mcp/server.rb
380
418
  - lib/pgbus/mcp/tools/concurrency_tool.rb
381
419
  - lib/pgbus/mcp/tools/deploy_tasks_tool.rb
@@ -391,12 +429,27 @@ files:
391
429
  - lib/pgbus/mcp/tools/recurring_tool.rb
392
430
  - lib/pgbus/mcp/tools/stats_tool.rb
393
431
  - lib/pgbus/mcp/tools/throughput_tool.rb
432
+ - lib/pgbus/mcp/tools/workflow_cancel_tool.rb
433
+ - lib/pgbus/mcp/tools/workflow_definitions_tool.rb
434
+ - lib/pgbus/mcp/tools/workflow_detail_tool.rb
435
+ - lib/pgbus/mcp/tools/workflow_resume_at_tool.rb
436
+ - lib/pgbus/mcp/tools/workflow_resume_tool.rb
437
+ - lib/pgbus/mcp/tools/workflow_run_now_tool.rb
438
+ - lib/pgbus/mcp/tools/workflow_signal_tool.rb
439
+ - lib/pgbus/mcp/tools/workflow_skip_step_tool.rb
440
+ - lib/pgbus/mcp/tools/workflow_stats_tool.rb
441
+ - lib/pgbus/mcp/tools/workflows_attention_tool.rb
442
+ - lib/pgbus/mcp/tools/workflows_tool.rb
443
+ - lib/pgbus/mcp/workflow_insights_payload.rb
444
+ - lib/pgbus/mcp/workflow_payloads.rb
445
+ - lib/pgbus/mcp/write_tool.rb
394
446
  - lib/pgbus/metrics.rb
395
447
  - lib/pgbus/metrics/backend.rb
396
448
  - lib/pgbus/metrics/backends/prometheus.rb
397
449
  - lib/pgbus/metrics/backends/statsd.rb
398
450
  - lib/pgbus/metrics/prometheus_exporter.rb
399
451
  - lib/pgbus/metrics/subscriber.rb
452
+ - lib/pgbus/metrics/workflow_metrics.rb
400
453
  - lib/pgbus/outbox.rb
401
454
  - lib/pgbus/outbox/poller.rb
402
455
  - lib/pgbus/pgmq_schema.rb
@@ -475,6 +528,9 @@ files:
475
528
  - lib/pgbus/web/data_source/list_counts.rb
476
529
  - lib/pgbus/web/data_source/process_list.rb
477
530
  - lib/pgbus/web/data_source/queue_summary.rb
531
+ - lib/pgbus/web/data_source/workflow_actions.rb
532
+ - lib/pgbus/web/data_source/workflow_insights.rb
533
+ - lib/pgbus/web/data_source/workflow_list.rb
478
534
  - lib/pgbus/web/dead_letter_reason.rb
479
535
  - lib/pgbus/web/deploy_task_state.rb
480
536
  - lib/pgbus/web/event_state.rb
@@ -509,6 +565,41 @@ files:
509
565
  - lib/pgbus/web/streamer/stream_counter.rb
510
566
  - lib/pgbus/web/streamer/stream_event_dispatcher.rb
511
567
  - lib/pgbus/web/time_format.rb
568
+ - lib/pgbus/web/workflow_action_plan.rb
569
+ - lib/pgbus/web/workflow_insights_queries.rb
570
+ - lib/pgbus/web/workflow_insights_report.rb
571
+ - lib/pgbus/web/workflow_payload.rb
572
+ - lib/pgbus/web/workflow_query.rb
573
+ - lib/pgbus/web/workflow_state.rb
574
+ - lib/pgbus/web/workflow_timeline.rb
575
+ - lib/pgbus/web/workflow_window.rb
576
+ - lib/pgbus/workflow.rb
577
+ - lib/pgbus/workflow/batch_finished_job.rb
578
+ - lib/pgbus/workflow/dsl.rb
579
+ - lib/pgbus/workflow/error_capture.rb
580
+ - lib/pgbus/workflow/exception_policy.rb
581
+ - lib/pgbus/workflow/fan_out.rb
582
+ - lib/pgbus/workflow/fan_out_definition.rb
583
+ - lib/pgbus/workflow/flow_control.rb
584
+ - lib/pgbus/workflow/instance.rb
585
+ - lib/pgbus/workflow/outside_verbs.rb
586
+ - lib/pgbus/workflow/payload.rb
587
+ - lib/pgbus/workflow/registry.rb
588
+ - lib/pgbus/workflow/removed_step.rb
589
+ - lib/pgbus/workflow/runner.rb
590
+ - lib/pgbus/workflow/signal_matcher.rb
591
+ - lib/pgbus/workflow/signals.rb
592
+ - lib/pgbus/workflow/states.rb
593
+ - lib/pgbus/workflow/step_context.rb
594
+ - lib/pgbus/workflow/step_definition.rb
595
+ - lib/pgbus/workflow/step_execution.rb
596
+ - lib/pgbus/workflow/step_job.rb
597
+ - lib/pgbus/workflow/step_outcome.rb
598
+ - lib/pgbus/workflow/steps.rb
599
+ - lib/pgbus/workflow/sweep.rb
600
+ - lib/pgbus/workflow/test_helpers.rb
601
+ - lib/pgbus/workflow/wait_timeout.rb
602
+ - lib/pgbus/workflow/waiting.rb
512
603
  - lib/puma/plugin/pgbus_streams.rb
513
604
  - lib/tasks/pgbus_autovacuum.rake
514
605
  - lib/tasks/pgbus_doctor.rake