Class: Remon::CheckRunner

Inherits:
Object
  • Object
show all
Includes:
Logger
Defined in:
lib/remon/check_runner.rb

Instance Method Summary collapse

Methods included from Logger

logger, #logger

Constructor Details

#initialize(task_queue:, num_workers:, result_queue:) ⇒ CheckRunner

Returns a new instance of CheckRunner.



7
8
9
10
11
12
# File 'lib/remon/check_runner.rb', line 7

def initialize(task_queue:, num_workers:, result_queue:)
  @task_queue = task_queue
  @num_workers = num_workers
  @result_queue = result_queue
  @workers = []
end

Instance Method Details

#new_workerObject



23
24
25
26
27
# File 'lib/remon/check_runner.rb', line 23

def new_worker
  Thread.new do
    loop { process_job }
  end
end

#process_jobObject



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/remon/check_runner.rb', line 29

def process_job
  j = @task_queue.pop
  logger.debug "running #{j}" if logger.debug?
  result = run_job j
  case result
  when Array
    result.each { |r| @result_queue << r if r}
  else
    @result_queue << result if result
  end
rescue => e
  logger.error "error while running job #{e.message}"
end

#run_job(j) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/remon/check_runner.rb', line 44

def run_job(j)
  if @num_workers > 1
    j.run_mutex
  else
    j.run
  end
end

#startObject



14
15
16
17
# File 'lib/remon/check_runner.rb', line 14

def start
  logger.debug "starting runners"
  @num_workers.times { @workers << new_worker }
end

#stopObject



19
20
21
# File 'lib/remon/check_runner.rb', line 19

def stop
  @workers.each { |t| Thread.kill t if (t && t.alive?)}
end