Class: Shoryuken::Options

Inherits:
Object
  • Object
show all
Defined in:
lib/shoryuken/options.rb

Constant Summary collapse

DEFAULTS =
{
  concurrency: 25,
  queues: [],
  aws: {},
  delay: 0.0,
  timeout: 8,
  lifecycle_events: {
    startup: [],
    dispatch: [],
    utilization_update: [],
    quiet: [],
    shutdown: []
  }
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeOptions

Returns a new instance of Options.



24
25
26
27
28
29
30
31
32
# File 'lib/shoryuken/options.rb', line 24

def initialize
  self.groups = {}
  self.worker_registry = DefaultWorkerRegistry.new
  self.active_job_queue_name_prefixing = false
  self.worker_executor = Worker::DefaultExecutor
  self.cache_visibility_timeout = false
  # this is needed for keeping backward compatibility
  @sqs_client_receive_message_opts ||= {}
end

Instance Attribute Details

#active_job_queue_name_prefixingObject

Returns the value of attribute active_job_queue_name_prefixing.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def active_job_queue_name_prefixing
  @active_job_queue_name_prefixing
end

#cache_visibility_timeoutObject

Returns the value of attribute cache_visibility_timeout.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def cache_visibility_timeout
  @cache_visibility_timeout
end

#default_worker_optionsObject



117
118
119
120
121
122
123
124
125
126
# File 'lib/shoryuken/options.rb', line 117

def default_worker_options
  @default_worker_options ||= {
    'queue' => 'default',
    'delete' => false,
    'auto_delete' => false,
    'auto_visibility_timeout' => false,
    'retry_intervals' => nil,
    'batch' => false
  }
end

#groupsObject

Returns the value of attribute groups.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def groups
  @groups
end

#launcher_executorObject

Returns the value of attribute launcher_executor.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def launcher_executor
  @launcher_executor
end

#sqs_clientObject



77
78
79
# File 'lib/shoryuken/options.rb', line 77

def sqs_client
  @sqs_client ||= Aws::SQS::Client.new
end

#sqs_client_receive_message_optsObject

Returns the value of attribute sqs_client_receive_message_opts.



22
23
24
# File 'lib/shoryuken/options.rb', line 22

def sqs_client_receive_message_opts
  @sqs_client_receive_message_opts
end

#start_callbackObject

Returns the value of attribute start_callback.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def start_callback
  @start_callback
end

#stop_callbackObject

Returns the value of attribute stop_callback.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def stop_callback
  @stop_callback
end

#worker_executorObject

Returns the value of attribute worker_executor.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def worker_executor
  @worker_executor
end

#worker_registryObject

Returns the value of attribute worker_registry.



18
19
20
# File 'lib/shoryuken/options.rb', line 18

def worker_registry
  @worker_registry
end

Instance Method Details

#active_job?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/shoryuken/options.rb', line 34

def active_job?
  defined?(::ActiveJob)
end

#active_job_queue_name_prefixing?Boolean

Returns:

  • (Boolean)


159
160
161
# File 'lib/shoryuken/options.rb', line 159

def active_job_queue_name_prefixing?
  @active_job_queue_name_prefixing
end

#add_group(group, concurrency = nil, delay: nil) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/shoryuken/options.rb', line 38

def add_group(group, concurrency = nil, delay: nil)
  concurrency ||= options[:concurrency]
  delay ||= options[:delay]

  groups[group] ||= {
    concurrency: concurrency,
    delay: delay,
    queues: []
  }
end

#add_queue(queue, weight, group) ⇒ Object



49
50
51
52
53
# File 'lib/shoryuken/options.rb', line 49

def add_queue(queue, weight, group)
  weight.times do
    groups[group][:queues] << queue
  end
end

#cache_visibility_timeout?Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/shoryuken/options.rb', line 155

def cache_visibility_timeout?
  @cache_visibility_timeout
end

#client_middleware {|@_client_chain| ... } ⇒ Object

Yields:

  • (@_client_chain)


111
112
113
114
115
# File 'lib/shoryuken/options.rb', line 111

def client_middleware
  @_client_chain ||= default_client_middleware
  yield @_client_chain if block_given?
  @_client_chain
end

#configure_client {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



107
108
109
# File 'lib/shoryuken/options.rb', line 107

def configure_client
  yield self unless server?
end

#configure_server {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



97
98
99
# File 'lib/shoryuken/options.rb', line 97

def configure_server
  yield self if server?
end

#delay(group) ⇒ Object



73
74
75
# File 'lib/shoryuken/options.rb', line 73

def delay(group)
  groups[group].to_h.fetch(:delay, options[:delay]).to_f
end

#loggerObject



89
90
91
# File 'lib/shoryuken/options.rb', line 89

def logger
  Shoryuken::Logging.logger
end

#on(event, &block) ⇒ Object

Register a block to run at a point in the Shoryuken lifecycle. :startup, :quiet or :shutdown are valid events.

Shoryuken.configure_server do |config|
  config.on(:shutdown) do
    puts "Goodbye cruel world!"
  end
end


144
145
146
147
148
149
# File 'lib/shoryuken/options.rb', line 144

def on(event, &block)
  fail ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
  fail ArgumentError, "Invalid event name: #{event}" unless options[:lifecycle_events].key?(event)

  options[:lifecycle_events][event] << block
end

#on_start(&block) ⇒ Object



128
129
130
# File 'lib/shoryuken/options.rb', line 128

def on_start(&block)
  self.start_callback = block
end

#on_stop(&block) ⇒ Object



132
133
134
# File 'lib/shoryuken/options.rb', line 132

def on_stop(&block)
  self.stop_callback = block
end

#optionsObject



85
86
87
# File 'lib/shoryuken/options.rb', line 85

def options
  @options ||= DEFAULTS.dup
end

#polling_strategy(group) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/shoryuken/options.rb', line 59

def polling_strategy(group)
  strategy = (group == 'default' ? options : options[:groups].to_h[group]).to_h[:polling_strategy]
  case strategy
  when 'WeightedRoundRobin', nil # Default case
    Polling::WeightedRoundRobin
  when 'StrictPriority'
    Polling::StrictPriority
  when Class
    strategy
  else
    raise ArgumentError, "#{strategy} is not a valid polling_strategy"
  end
end

#register_worker(*args) ⇒ Object



93
94
95
# File 'lib/shoryuken/options.rb', line 93

def register_worker(*args)
  worker_registry.register_worker(*args)
end

#server?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/shoryuken/options.rb', line 151

def server?
  defined?(Shoryuken::CLI)
end

#server_middleware {|@_server_chain| ... } ⇒ Object

Yields:

  • (@_server_chain)


101
102
103
104
105
# File 'lib/shoryuken/options.rb', line 101

def server_middleware
  @_server_chain ||= default_server_middleware
  yield @_server_chain if block_given?
  @_server_chain
end

#ungrouped_queuesObject



55
56
57
# File 'lib/shoryuken/options.rb', line 55

def ungrouped_queues
  groups.values.flat_map { |options| options[:queues] }
end