Class: RocketJob::ActiveWorker
- Inherits:
-
Object
- Object
- RocketJob::ActiveWorker
- Defined in:
- lib/rocket_job/active_worker.rb
Overview
Information about a server currently working on a job
Instance Attribute Summary collapse
-
#job ⇒ Object
Returns the value of attribute job.
-
#name ⇒ Object
Returns the value of attribute name.
-
#started_at ⇒ Object
When this server started working on this job / slice.
Class Method Summary collapse
-
.all(server_name = nil) ⇒ Object
Returns [Hash<String:ActiveWorker>] hash of all servers sorted by name and what they are currently working on.
-
.requeue_zombies ⇒ Object
Requeues all jobs for which the workers have disappeared.
Instance Method Summary collapse
-
#duration ⇒ Object
Duration in human readable form.
-
#duration_s ⇒ Object
Number of seconds this server has been working on this job / slice.
-
#initialize(name, started_at, job) ⇒ ActiveWorker
constructor
A new instance of ActiveWorker.
- #server ⇒ Object
-
#server_name ⇒ Object
Returns [String] the name of the server running this worker.
-
#zombie? ⇒ Boolean
The server on which this worker was running is no longer running.
Constructor Details
#initialize(name, started_at, job) ⇒ ActiveWorker
Returns a new instance of ActiveWorker.
35 36 37 38 39 |
# File 'lib/rocket_job/active_worker.rb', line 35 def initialize(name, started_at, job) @name = name @started_at = started_at @job = job end |
Instance Attribute Details
#job ⇒ Object
Returns the value of attribute job.
7 8 9 |
# File 'lib/rocket_job/active_worker.rb', line 7 def job @job end |
#name ⇒ Object
Returns the value of attribute name.
7 8 9 |
# File 'lib/rocket_job/active_worker.rb', line 7 def name @name end |
#started_at ⇒ Object
When this server started working on this job / slice
5 6 7 |
# File 'lib/rocket_job/active_worker.rb', line 5 def started_at @started_at end |
Class Method Details
.all(server_name = nil) ⇒ Object
Returns [Hash<String:ActiveWorker>] hash of all servers sorted by name and what they are currently working on. Returns {} if no servers are currently busy doing any work
Parameters
server_name: [String]
Only jobs running on the specified server
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/rocket_job/active_worker.rb', line 16 def self.all(server_name = nil) servers = [] # Need paused, failed or aborted since servers may still be working on active slices query = RocketJob::Job.where(:state.in => [:running, :paused, :failed, :aborted]) query = query.where(worker_name: /\A#{server_name}/) if server_name query.each do |job| servers += job.rocket_job_active_workers end servers end |
.requeue_zombies ⇒ Object
Requeues all jobs for which the workers have disappeared
28 29 30 31 32 33 |
# File 'lib/rocket_job/active_worker.rb', line 28 def self.requeue_zombies all.each do |active_worker| next if !active_worker.zombie? || !active_worker.job.may_requeue?(active_worker.server_name) active_worker.job.requeue!(active_worker.server_name) end end |
Instance Method Details
#duration ⇒ Object
Duration in human readable form
42 43 44 |
# File 'lib/rocket_job/active_worker.rb', line 42 def duration RocketJob.seconds_as_duration(duration_s) end |
#duration_s ⇒ Object
Number of seconds this server has been working on this job / slice
47 48 49 |
# File 'lib/rocket_job/active_worker.rb', line 47 def duration_s Time.now - (started_at || Time.now) end |
#server ⇒ Object
60 61 62 |
# File 'lib/rocket_job/active_worker.rb', line 60 def server @server ||= RocketJob::Server.where(name: server_name).first end |
#server_name ⇒ Object
Returns [String] the name of the server running this worker
52 53 54 55 56 57 58 |
# File 'lib/rocket_job/active_worker.rb', line 52 def server_name if match = name.to_s.match(/(.*:.*):.*/) match[1] else name end end |
#zombie? ⇒ Boolean
The server on which this worker was running is no longer running
65 66 67 |
# File 'lib/rocket_job/active_worker.rb', line 65 def zombie? server.nil? end |