Class: Arj::Worker

Inherits:
Object
  • Object
show all
Defined in:
lib/arj/worker.rb

Overview

Used to retrieve and execute jobs.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(description: 'Arj::Worker(*)', source: -> { Arj.available.first }, sleep_delay: DEFAULT_SLEEP_DELAY, logger: ActiveJob::Base.logger) ⇒ Worker

Returns a new instance of Worker.

Parameters:

  • description (String) (defaults to: 'Arj::Worker(*)')

    a description for this worker, used in logs

  • source (Proc) (defaults to: -> { Arj.available.first })

    a job source

  • sleep_delay (ActiveSupport::Duration) (defaults to: DEFAULT_SLEEP_DELAY)

    sleep duration after executing all available jobs, defaults to 5s

  • logger (Logger) (defaults to: ActiveJob::Base.logger)

    used to log worker progress



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/arj/worker.rb', line 26

def initialize(
  description: 'Arj::Worker(*)',
  source: -> { Arj.available.first },
  sleep_delay: DEFAULT_SLEEP_DELAY,
  logger: ActiveJob::Base.logger
)
  @description = description
  @source = source
  @sleep_delay = sleep_delay
  @logger = logger
end

Instance Attribute Details

#descriptionObject (readonly)

A description for this worker, used in logs.



14
15
16
# File 'lib/arj/worker.rb', line 14

def description
  @description
end

#loggerObject

Used to log worker progress.



20
21
22
# File 'lib/arj/worker.rb', line 20

def logger
  @logger
end

#sleep_delayObject (readonly)

Duration to sleep in #start after executing all available jobs, before retying.



17
18
19
# File 'lib/arj/worker.rb', line 17

def sleep_delay
  @sleep_delay
end

Instance Method Details

#execute_nextBoolean

Executes the next available job. Returns true if a job was executed, false otherwise.

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
65
66
# File 'lib/arj/worker.rb', line 57

def execute_next
  @logger.info("#{description} - Looking for the next available job")
  if (job = @source.call)
    job.perform_now rescue nil
    true
  else
    @logger.info("#{description} - No available jobs found")
    false
  end
end

#startObject

Executes jobs as they become available.



39
40
41
42
43
44
# File 'lib/arj/worker.rb', line 39

def start
  loop do
    work_off
    sleep @sleep_delay.in_seconds
  end
end

#work_offBoolean

Executes any available jobs. Returns true if any jobs were executed, false otherwise.

Returns:

  • (Boolean)


49
50
51
52
# File 'lib/arj/worker.rb', line 49

def work_off
  result = true while execute_next
  result || false
end