class RocketJob::ActiveWorker

Information about a server currently working on a job

Attributes

job[RW]
name[R]
started_at[RW]

When this server started working on this job / slice

Public Class Methods

all(server_name = nil) click to toggle source

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
# File lib/rocket_job/active_worker.rb, line 17
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 => %i[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
new(name, started_at, job) click to toggle source
# File lib/rocket_job/active_worker.rb, line 37
def initialize(name, started_at, job)
  @name       = name
  @started_at = started_at
  @job        = job
end
requeue_zombies() click to toggle source

Requeues all jobs for which the workers have disappeared

# File lib/rocket_job/active_worker.rb, line 29
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

Public Instance Methods

duration() click to toggle source

Duration in human readable form

# File lib/rocket_job/active_worker.rb, line 44
def duration
  RocketJob.seconds_as_duration(duration_s)
end
duration_s() click to toggle source

Number of seconds this server has been working on this job / slice

# File lib/rocket_job/active_worker.rb, line 49
def duration_s
  Time.now - (started_at || Time.now)
end
name=(name) click to toggle source
# File lib/rocket_job/active_worker.rb, line 71
def name=(name)
  @server = nil
  @name   = name
end
server() click to toggle source
# File lib/rocket_job/active_worker.rb, line 62
def server
  @server ||= RocketJob::Server.where(name: server_name).first
end
server_name() click to toggle source

Returns [String] the name of the server running this worker

# File lib/rocket_job/active_worker.rb, line 54
def server_name
  if (match = name.to_s.match(/(.*:.*):.*/))
    match[1]
  else
    name
  end
end
zombie?() click to toggle source

The server on which this worker was running is no longer running

# File lib/rocket_job/active_worker.rb, line 67
def zombie?
  server.nil?
end