Class: Shoryuken::Options

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

Constant Summary collapse

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeOptions

Returns a new instance of Options.



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

def initialize
  self.groups = {}
  self.worker_registry = DefaultWorkerRegistry.new
  self.exception_handlers = [DefaultExceptionHandler]
  self.active_job_queue_name_prefixing = false
  self.worker_executor = Worker::DefaultExecutor
  self.cache_visibility_timeout = false
  self.reloader = proc { |&block| block.call }
  self.enable_reloading ||= 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.



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

def active_job_queue_name_prefixing
  @active_job_queue_name_prefixing
end

#cache_visibility_timeoutObject

Returns the value of attribute cache_visibility_timeout.



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

def cache_visibility_timeout
  @cache_visibility_timeout
end

#default_worker_optionsObject



134
135
136
137
138
139
140
141
142
143
# File 'lib/shoryuken/options.rb', line 134

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

#enable_reloadingObject

Returns the value of attribute enable_reloading.



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

def enable_reloading
  @enable_reloading
end

#exception_handlersObject

Returns the value of attribute exception_handlers.



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

def exception_handlers
  @exception_handlers
end

#groupsObject

Returns the value of attribute groups.



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

def groups
  @groups
end

#launcher_executorObject

Returns the value of attribute launcher_executor.



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

def launcher_executor
  @launcher_executor
end

#loggerObject



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

def logger
  @logger ||= Shoryuken::Logging.logger
end

#reloaderObject

Returns the value of attribute reloader.



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

def reloader
  @reloader
end

#sqs_clientObject



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

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.



28
29
30
# File 'lib/shoryuken/options.rb', line 28

def sqs_client_receive_message_opts
  @sqs_client_receive_message_opts
end

#start_callbackObject

Returns the value of attribute start_callback.



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

def start_callback
  @start_callback
end

#stop_callbackObject

Returns the value of attribute stop_callback.



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

def stop_callback
  @stop_callback
end

#worker_executorObject

Returns the value of attribute worker_executor.



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

def worker_executor
  @worker_executor
end

#worker_registryObject

Returns the value of attribute worker_registry.



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

def worker_registry
  @worker_registry
end

Instance Method Details

#active_job?Boolean

Returns:



43
44
45
# File 'lib/shoryuken/options.rb', line 43

def active_job?
  defined?(::ActiveJob)
end

#active_job_queue_name_prefixing?Boolean

Returns:



176
177
178
# File 'lib/shoryuken/options.rb', line 176

def active_job_queue_name_prefixing?
  @active_job_queue_name_prefixing
end

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



47
48
49
50
51
52
53
54
55
56
# File 'lib/shoryuken/options.rb', line 47

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



58
59
60
61
62
# File 'lib/shoryuken/options.rb', line 58

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

#cache_visibility_timeout?Boolean

Returns:



172
173
174
# File 'lib/shoryuken/options.rb', line 172

def cache_visibility_timeout?
  @cache_visibility_timeout
end

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

Yields:

  • (@_client_chain)


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

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:



124
125
126
# File 'lib/shoryuken/options.rb', line 124

def configure_client
  yield self unless server?
end

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

Yields:

  • (_self)

Yield Parameters:



114
115
116
# File 'lib/shoryuken/options.rb', line 114

def configure_server
  yield self if server?
end

#delay(group) ⇒ Object



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

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

#on(event, &block) ⇒ Object

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

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


161
162
163
164
165
166
# File 'lib/shoryuken/options.rb', line 161

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



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

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

#on_stop(&block) ⇒ Object



149
150
151
# File 'lib/shoryuken/options.rb', line 149

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

#optionsObject



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

def options
  @options ||= DEFAULTS.dup
end

#polling_strategy(group) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/shoryuken/options.rb', line 68

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 String
    begin
      Object.const_get(strategy)
    rescue NameError
      raise ArgumentError, "#{strategy} is not a valid polling_strategy"
    end
  when Class
    strategy
  end
end

#register_worker(*args) ⇒ Object



110
111
112
# File 'lib/shoryuken/options.rb', line 110

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

#server?Boolean

Returns:



168
169
170
# File 'lib/shoryuken/options.rb', line 168

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

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

Yields:

  • (@_server_chain)


118
119
120
121
122
# File 'lib/shoryuken/options.rb', line 118

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

#thread_priorityObject



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

def thread_priority
  @thread_priority ||= options[:thread_priority]
end

#ungrouped_queuesObject



64
65
66
# File 'lib/shoryuken/options.rb', line 64

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