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: [],
    quiet: [],
    shutdown: []
  }
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeOptions

Returns a new instance of Options.



21
22
23
24
25
26
27
28
29
# File 'lib/shoryuken/options.rb', line 21

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.



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

def active_job_queue_name_prefixing
  @active_job_queue_name_prefixing
end

#cache_visibility_timeoutObject

Returns the value of attribute cache_visibility_timeout.



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

def cache_visibility_timeout
  @cache_visibility_timeout
end

#default_worker_optionsObject

Returns the value of attribute default_worker_options.



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

def default_worker_options
  @default_worker_options
end

#groupsObject

Returns the value of attribute groups.



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

def groups
  @groups
end

#launcher_executorObject

Returns the value of attribute launcher_executor.



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

def launcher_executor
  @launcher_executor
end

#sqs_clientObject

Returns the value of attribute sqs_client.



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

def sqs_client
  @sqs_client
end

#sqs_client_receive_message_optsObject

Returns the value of attribute sqs_client_receive_message_opts.



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

def sqs_client_receive_message_opts
  @sqs_client_receive_message_opts
end

#start_callbackObject

Returns the value of attribute start_callback.



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

def start_callback
  @start_callback
end

#stop_callbackObject

Returns the value of attribute stop_callback.



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

def stop_callback
  @stop_callback
end

#worker_executorObject

Returns the value of attribute worker_executor.



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

def worker_executor
  @worker_executor
end

#worker_registryObject

Returns the value of attribute worker_registry.



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

def worker_registry
  @worker_registry
end

Instance Method Details

#active_job?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/shoryuken/options.rb', line 31

def active_job?
  defined?(::ActiveJob)
end

#active_job_queue_name_prefixing?Boolean

Returns:

  • (Boolean)


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

def active_job_queue_name_prefixing?
  @active_job_queue_name_prefixing
end

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



35
36
37
38
39
40
41
42
43
44
# File 'lib/shoryuken/options.rb', line 35

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



46
47
48
49
50
# File 'lib/shoryuken/options.rb', line 46

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

#cache_visibility_timeout?Boolean

Returns:

  • (Boolean)


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

def cache_visibility_timeout?
  @cache_visibility_timeout
end

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

Yields:

  • (@_client_chain)


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

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:



104
105
106
# File 'lib/shoryuken/options.rb', line 104

def configure_client
  yield self unless server?
end

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

Yields:

  • (_self)

Yield Parameters:



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

def configure_server
  yield self if server?
end

#delay(group) ⇒ Object



70
71
72
# File 'lib/shoryuken/options.rb', line 70

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

#loggerObject



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

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


141
142
143
144
145
146
# File 'lib/shoryuken/options.rb', line 141

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



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

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

#on_stop(&block) ⇒ Object



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

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

#optionsObject



82
83
84
# File 'lib/shoryuken/options.rb', line 82

def options
  @options ||= DEFAULTS.dup
end

#polling_strategy(group) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/shoryuken/options.rb', line 56

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



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

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

#server?Boolean

Returns:

  • (Boolean)


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

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

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

Yields:

  • (@_server_chain)


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

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

#ungrouped_queuesObject



52
53
54
# File 'lib/shoryuken/options.rb', line 52

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