pgbus 0.14.0 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/app/models/pgbus/batch_entry.rb +78 -6
- data/app/models/pgbus/batch_execution.rb +28 -0
- data/app/models/pgbus/blocked_execution.rb +2 -2
- data/app/models/pgbus/uniqueness_key.rb +50 -4
- data/app/views/pgbus/batches/_batches_table.html.erb +3 -3
- data/app/views/pgbus/batches/show.html.erb +7 -7
- data/config/locales/da.yml +2 -2
- data/config/locales/de.yml +2 -2
- data/config/locales/en.yml +2 -2
- data/config/locales/es.yml +2 -2
- data/config/locales/fi.yml +2 -2
- data/config/locales/fr.yml +2 -2
- data/config/locales/it.yml +2 -2
- data/config/locales/ja.yml +2 -2
- data/config/locales/nb.yml +2 -2
- data/config/locales/nl.yml +2 -2
- data/config/locales/pt.yml +2 -2
- data/config/locales/sv.yml +2 -2
- data/lib/generators/pgbus/add_batch_callback_jobs_generator.rb +47 -0
- data/lib/generators/pgbus/add_batch_executions_generator.rb +44 -0
- data/lib/generators/pgbus/templates/add_batch_callback_jobs.rb.erb +13 -0
- data/lib/generators/pgbus/templates/add_batch_executions.rb.erb +50 -0
- data/lib/generators/pgbus/templates/initializer.rb.erb +2 -0
- data/lib/generators/pgbus/templates/migration.rb.erb +23 -2
- data/lib/pgbus/active_job/adapter.rb +142 -28
- data/lib/pgbus/active_job/batch_id.rb +48 -0
- data/lib/pgbus/active_job/executor.rb +45 -9
- data/lib/pgbus/batch/sweep.rb +163 -0
- data/lib/pgbus/batch.rb +448 -63
- data/lib/pgbus/bus_record.rb +15 -1
- data/lib/pgbus/client.rb +191 -15
- data/lib/pgbus/concurrency/blocked_execution.rb +14 -1
- data/lib/pgbus/configuration.rb +24 -1
- data/lib/pgbus/engine.rb +1 -0
- data/lib/pgbus/generators/migration_detector.rb +30 -0
- data/lib/pgbus/instrumentation.rb +5 -0
- data/lib/pgbus/outbox/poller.rb +6 -7
- data/lib/pgbus/process/dispatcher.rb +41 -17
- data/lib/pgbus/recurring/schedule.rb +12 -1
- data/lib/pgbus/uniqueness.rb +35 -7
- data/lib/pgbus/version.rb +1 -1
- data/lib/pgbus/web/data_source.rb +47 -9
- metadata +8 -1
data/lib/pgbus/version.rb
CHANGED
|
@@ -669,7 +669,9 @@ module Pgbus
|
|
|
669
669
|
|
|
670
670
|
# Batches
|
|
671
671
|
def batches(limit: 100)
|
|
672
|
-
BatchEntry.order(created_at: :desc).limit(limit).
|
|
672
|
+
records = BatchEntry.order(created_at: :desc).limit(limit).to_a
|
|
673
|
+
pending = pending_jobs_by_batch(records.map(&:batch_id))
|
|
674
|
+
records.map { |r| format_batch(r, pending_jobs: pending[r.batch_id]) }
|
|
673
675
|
rescue StandardError => e
|
|
674
676
|
Pgbus.logger.debug { "[Pgbus::Web] Error fetching batches: #{e.message}" }
|
|
675
677
|
[]
|
|
@@ -679,11 +681,14 @@ module Pgbus
|
|
|
679
681
|
record = BatchEntry.find_by(batch_id: batch_id)
|
|
680
682
|
return nil unless record
|
|
681
683
|
|
|
682
|
-
|
|
684
|
+
pending = pending_jobs_by_batch([batch_id])
|
|
685
|
+
failure_callback = callback_display_name(record, :on_failure) || failure_callback_class(record)
|
|
686
|
+
format_batch(record, pending_jobs: pending[batch_id]).merge(
|
|
683
687
|
properties: record.properties,
|
|
684
|
-
on_finish_class: record.on_finish_class,
|
|
685
|
-
on_success_class: record.on_success_class,
|
|
686
|
-
|
|
688
|
+
on_finish_class: callback_display_name(record, :on_finish) || record.on_finish_class,
|
|
689
|
+
on_success_class: callback_display_name(record, :on_success) || record.on_success_class,
|
|
690
|
+
on_failure_class: failure_callback,
|
|
691
|
+
on_discard_class: failure_callback
|
|
687
692
|
)
|
|
688
693
|
rescue StandardError => e
|
|
689
694
|
Pgbus.logger.debug { "[Pgbus::Web] Error fetching batch #{batch_id}: #{e.message}" }
|
|
@@ -1351,10 +1356,12 @@ module Pgbus
|
|
|
1351
1356
|
end
|
|
1352
1357
|
end
|
|
1353
1358
|
|
|
1354
|
-
def format_batch(record)
|
|
1359
|
+
def format_batch(record, pending_jobs: nil)
|
|
1355
1360
|
total = record.total_jobs
|
|
1356
|
-
|
|
1361
|
+
failed = failure_job_count(record)
|
|
1362
|
+
done = record.completed_jobs + failed
|
|
1357
1363
|
pct = total.positive? ? ((done * 100) / total) : 100
|
|
1364
|
+
pending = pending_jobs || [total - done, 0].max
|
|
1358
1365
|
|
|
1359
1366
|
{
|
|
1360
1367
|
batch_id: record.batch_id,
|
|
@@ -1362,14 +1369,45 @@ module Pgbus
|
|
|
1362
1369
|
status: record.status,
|
|
1363
1370
|
total_jobs: total,
|
|
1364
1371
|
completed_jobs: record.completed_jobs,
|
|
1365
|
-
|
|
1366
|
-
|
|
1372
|
+
failed_jobs: failed,
|
|
1373
|
+
discarded_jobs: failed,
|
|
1374
|
+
pending_jobs: pending,
|
|
1367
1375
|
progress_pct: pct,
|
|
1368
1376
|
created_at: record.created_at,
|
|
1369
1377
|
finished_at: record.finished_at
|
|
1370
1378
|
}
|
|
1371
1379
|
end
|
|
1372
1380
|
|
|
1381
|
+
def failure_job_count(record)
|
|
1382
|
+
record.respond_to?(:discarded_jobs) ? record.discarded_jobs.to_i : record.failed_jobs.to_i
|
|
1383
|
+
end
|
|
1384
|
+
|
|
1385
|
+
# A callback configured as an ActiveJob instance lives in the *_job jsonb
|
|
1386
|
+
# column, not the legacy *_class string — show its job_class either way.
|
|
1387
|
+
def callback_display_name(record, slot)
|
|
1388
|
+
column = "#{slot}_job"
|
|
1389
|
+
return nil unless record.respond_to?(column)
|
|
1390
|
+
|
|
1391
|
+
record.public_send(column).presence&.dig("job_class")
|
|
1392
|
+
end
|
|
1393
|
+
|
|
1394
|
+
def failure_callback_class(record)
|
|
1395
|
+
if record.respond_to?(:on_failure_class) && record.on_failure_class.present?
|
|
1396
|
+
record.on_failure_class
|
|
1397
|
+
elsif record.respond_to?(:on_discard_class)
|
|
1398
|
+
record.on_discard_class
|
|
1399
|
+
end
|
|
1400
|
+
end
|
|
1401
|
+
|
|
1402
|
+
def pending_jobs_by_batch(batch_ids)
|
|
1403
|
+
return {} unless Batch.executions_migrated?
|
|
1404
|
+
return {} if batch_ids.empty?
|
|
1405
|
+
|
|
1406
|
+
BatchExecution.where(batch_id: batch_ids).group(:batch_id).count
|
|
1407
|
+
rescue StandardError
|
|
1408
|
+
{}
|
|
1409
|
+
end
|
|
1410
|
+
|
|
1373
1411
|
def sanitize_name(name)
|
|
1374
1412
|
QueueNameValidator.sanitize!(name)
|
|
1375
1413
|
end
|
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.14.
|
|
4
|
+
version: 0.14.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mikael Henriksson
|
|
@@ -150,6 +150,7 @@ files:
|
|
|
150
150
|
- app/helpers/pgbus/streams_helper.rb
|
|
151
151
|
- app/models/pgbus/application_record.rb
|
|
152
152
|
- app/models/pgbus/batch_entry.rb
|
|
153
|
+
- app/models/pgbus/batch_execution.rb
|
|
153
154
|
- app/models/pgbus/blocked_execution.rb
|
|
154
155
|
- app/models/pgbus/job_stat.rb
|
|
155
156
|
- app/models/pgbus/outbox_entry.rb
|
|
@@ -210,6 +211,8 @@ files:
|
|
|
210
211
|
- exe/pgbus
|
|
211
212
|
- exe/pgbus-health
|
|
212
213
|
- lib/active_job/queue_adapters/pgbus_adapter.rb
|
|
214
|
+
- lib/generators/pgbus/add_batch_callback_jobs_generator.rb
|
|
215
|
+
- lib/generators/pgbus/add_batch_executions_generator.rb
|
|
213
216
|
- lib/generators/pgbus/add_failed_events_index_generator.rb
|
|
214
217
|
- lib/generators/pgbus/add_job_stats_generator.rb
|
|
215
218
|
- lib/generators/pgbus/add_job_stats_latency_generator.rb
|
|
@@ -225,6 +228,8 @@ files:
|
|
|
225
228
|
- lib/generators/pgbus/install_generator.rb
|
|
226
229
|
- lib/generators/pgbus/migrate_job_locks_generator.rb
|
|
227
230
|
- lib/generators/pgbus/migration_path.rb
|
|
231
|
+
- lib/generators/pgbus/templates/add_batch_callback_jobs.rb.erb
|
|
232
|
+
- lib/generators/pgbus/templates/add_batch_executions.rb.erb
|
|
228
233
|
- lib/generators/pgbus/templates/add_failed_events_unique_index.rb.erb
|
|
229
234
|
- lib/generators/pgbus/templates/add_job_stats.rb.erb
|
|
230
235
|
- lib/generators/pgbus/templates/add_job_stats_latency.rb.erb
|
|
@@ -251,9 +256,11 @@ files:
|
|
|
251
256
|
- lib/generators/pgbus/upgrade_pgmq_generator.rb
|
|
252
257
|
- lib/pgbus.rb
|
|
253
258
|
- lib/pgbus/active_job/adapter.rb
|
|
259
|
+
- lib/pgbus/active_job/batch_id.rb
|
|
254
260
|
- lib/pgbus/active_job/executor.rb
|
|
255
261
|
- lib/pgbus/autovacuum_tuning.rb
|
|
256
262
|
- lib/pgbus/batch.rb
|
|
263
|
+
- lib/pgbus/batch/sweep.rb
|
|
257
264
|
- lib/pgbus/bus_record.rb
|
|
258
265
|
- lib/pgbus/circuit_breaker.rb
|
|
259
266
|
- lib/pgbus/cli.rb
|