forked from rails/solid_queue
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolid_queue.rb
79 lines (55 loc) · 2.06 KB
/
solid_queue.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# frozen_string_literal: true
require "solid_queue/version"
require "solid_queue/engine"
require "active_job"
require "active_job/queue_adapters"
require "active_support"
require "active_support/core_ext/numeric/time"
require "zeitwerk"
loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
loader.ignore("#{__dir__}/solid_queue/tasks.rb")
loader.ignore("#{__dir__}/generators")
loader.ignore("#{__dir__}/puma")
loader.setup
module SolidQueue
extend self
ForkSafety # add fork safety hooks
DEFAULT_LOGGER = ActiveSupport::Logger.new($stdout)
mattr_accessor :logger, default: DEFAULT_LOGGER
mattr_accessor :app_executor, :on_thread_error, :connects_to
mattr_accessor :use_skip_locked, default: true
mattr_accessor :process_heartbeat_interval, default: 60.seconds
mattr_accessor :process_alive_threshold, default: 5.minutes
mattr_accessor :shutdown_timeout, default: 5.seconds
mattr_accessor :silence_polling, default: true
mattr_accessor :supervisor_pidfile
mattr_accessor :supervisor, default: false
mattr_accessor :preserve_finished_jobs, default: true
mattr_accessor :clear_finished_jobs_after, default: 1.day
mattr_accessor :default_concurrency_control_period, default: 3.minutes
delegate :on_start, :on_stop, :on_exit, to: Supervisor
[ Dispatcher, Scheduler, Worker ].each do |process|
define_singleton_method(:"on_#{process.name.demodulize.downcase}_start") do |&block|
process.on_start { block.call }
end
define_singleton_method(:"on_#{process.name.demodulize.downcase}_stop") do |&block|
process.on_stop { block.call }
end
define_singleton_method(:"on_#{process.name.demodulize.downcase}_exit") do |&block|
process.on_exit { block.call }
end
end
def supervisor?
supervisor
end
def silence_polling?
silence_polling
end
def preserve_finished_jobs?
preserve_finished_jobs
end
def instrument(channel, **options, &block)
ActiveSupport::Notifications.instrument("#{channel}.solid_queue", **options, &block)
end
ActiveSupport.run_load_hooks(:solid_queue, self)
end