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.



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

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



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

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.



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



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

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.



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

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)


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

def active_job?
  defined?(::ActiveJob)
end

#active_job_queue_name_prefixing?Boolean

Returns:

  • (Boolean)


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

def active_job_queue_name_prefixing?
  @active_job_queue_name_prefixing
end

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



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

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



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

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

#cache_visibility_timeout?Boolean

Returns:

  • (Boolean)


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

def cache_visibility_timeout?
  @cache_visibility_timeout
end

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

Yields:

  • (@_client_chain)


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

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:



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

def configure_client
  yield self unless server?
end

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

Yields:

  • (_self)

Yield Parameters:



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

def configure_server
  yield self if server?
end

#delay(group) ⇒ Object



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

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

#loggerObject



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

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


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

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



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

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

#on_stop(&block) ⇒ Object



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

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

#optionsObject



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

def options
  @options ||= DEFAULTS.dup
end

#polling_strategy(group) ⇒ Object



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

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



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

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

#server?Boolean

Returns:

  • (Boolean)


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

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

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

Yields:

  • (@_server_chain)


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

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

#ungrouped_queuesObject



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

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