Class: Delayed::Worker::HealthCheck
- Inherits:
-
Object
- Object
- Delayed::Worker::HealthCheck
show all
- Defined in:
- lib/delayed/worker/health_check.rb
Class Attribute Summary collapse
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(worker_name:, config: {}) ⇒ HealthCheck
Returns a new instance of HealthCheck.
52
53
54
55
|
# File 'lib/delayed/worker/health_check.rb', line 52
def initialize(worker_name:, config: {})
@config = config.with_indifferent_access
@worker_name = worker_name
end
|
Class Attribute Details
.subclasses ⇒ Object
Returns the value of attribute subclasses.
8
9
10
|
# File 'lib/delayed/worker/health_check.rb', line 8
def subclasses
@subclasses
end
|
.type_name ⇒ Object
Returns the value of attribute type_name.
7
8
9
|
# File 'lib/delayed/worker/health_check.rb', line 7
def type_name
@type_name
end
|
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
50
51
52
|
# File 'lib/delayed/worker/health_check.rb', line 50
def config
@config
end
|
#worker_name ⇒ Object
Returns the value of attribute worker_name.
50
51
52
|
# File 'lib/delayed/worker/health_check.rb', line 50
def worker_name
@worker_name
end
|
Class Method Details
.build(type:, worker_name:, config: {}) ⇒ Object
14
15
16
17
18
19
|
# File 'lib/delayed/worker/health_check.rb', line 14
def build(type:, worker_name:, config: {})
type = type.to_sym
klass = @subclasses.find { |sc| sc.type_name == type }
raise ArgumentError, "Unable to build a HealthCheck for type #{type}" unless klass
klass.new(worker_name: worker_name, config: config)
end
|
.inherited(subclass) ⇒ Object
10
11
12
|
# File 'lib/delayed/worker/health_check.rb', line 10
def inherited(subclass)
@subclasses << subclass
end
|
.reschedule_abandoned_jobs ⇒ Object
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
|
# File 'lib/delayed/worker/health_check.rb', line 21
def reschedule_abandoned_jobs
return if Settings.worker_health_check_type == :none
checker = Worker::HealthCheck.build(
type: Settings.worker_health_check_type,
config: Settings.worker_health_check_config,
worker_name: 'cleanup-crew'
)
live_workers = checker.live_workers
Delayed::Job.running_jobs.each do |job|
next if job.locked_by.start_with?("prefetch:")
unless live_workers.include?(job.locked_by)
begin
Delayed::Job.transaction do
next unless Delayed::Job.where(id: job, locked_by: job.locked_by).update_all(locked_by: "abandoned job cleanup") == 1
job.reschedule
end
rescue
::Rails.logger.error "Failure rescheduling abandoned job #{job.id} #{$!.inspect}"
end
end
end
end
|
Instance Method Details
#live_workers ⇒ Object
65
66
67
|
# File 'lib/delayed/worker/health_check.rb', line 65
def live_workers
raise NotImplementedError
end
|
#start ⇒ Object
57
58
59
|
# File 'lib/delayed/worker/health_check.rb', line 57
def start
raise NotImplementedError
end
|
#stop ⇒ Object
61
62
63
|
# File 'lib/delayed/worker/health_check.rb', line 61
def stop
raise NotImplementedError
end
|