Class: Sidekiq::QueueThrottled::Configuration
- Inherits:
-
Object
- Object
- Sidekiq::QueueThrottled::Configuration
- Defined in:
- lib/sidekiq/queue_throttled/configuration.rb
Instance Attribute Summary collapse
-
#lock_ttl ⇒ Object
Returns the value of attribute lock_ttl.
-
#queue_limits ⇒ Object
Returns the value of attribute queue_limits.
-
#redis_key_prefix ⇒ Object
Returns the value of attribute redis_key_prefix.
-
#retry_delay ⇒ Object
Returns the value of attribute retry_delay.
-
#throttle_ttl ⇒ Object
Returns the value of attribute throttle_ttl.
Instance Method Summary collapse
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
- #load_configuration!(config_source = nil) ⇒ Object
- #load_from_sidekiq_config!(sidekiq_config = nil) ⇒ Object
- #load_from_yaml!(yaml_content) ⇒ Object
- #load_from_yaml_file!(file_path = nil) ⇒ Object
- #queue_limit(queue_name) ⇒ Object
- #set_queue_limit(queue_name, limit) ⇒ Object
- #validate! ⇒ Object
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
8 9 10 11 12 13 14 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 8 def initialize @queue_limits = {} @redis_key_prefix = 'sidekiq:queue_throttled' @throttle_ttl = 3600 # 1 hour @lock_ttl = 300 # 5 minutes @retry_delay = 5 # 5 seconds end |
Instance Attribute Details
#lock_ttl ⇒ Object
Returns the value of attribute lock_ttl.
6 7 8 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 6 def lock_ttl @lock_ttl end |
#queue_limits ⇒ Object
Returns the value of attribute queue_limits.
6 7 8 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 6 def queue_limits @queue_limits end |
#redis_key_prefix ⇒ Object
Returns the value of attribute redis_key_prefix.
6 7 8 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 6 def redis_key_prefix @redis_key_prefix end |
#retry_delay ⇒ Object
Returns the value of attribute retry_delay.
6 7 8 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 6 def retry_delay @retry_delay end |
#throttle_ttl ⇒ Object
Returns the value of attribute throttle_ttl.
6 7 8 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 6 def throttle_ttl @throttle_ttl end |
Instance Method Details
#load_configuration!(config_source = nil) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 56 def load_configuration!(config_source = nil) # Load from provided config source first if config_source.is_a?(Hash) load_from_sidekiq_config!(config_source) elsif config_source.is_a?(String) if File.exist?(config_source) load_from_yaml_file!(config_source) else load_from_yaml!(config_source) end end # Then try to load from Sidekiq's configuration load_from_sidekiq_config! # Finally, try to load from sidekiq.yml file load_from_yaml_file! end |
#load_from_sidekiq_config!(sidekiq_config = nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 24 def load_from_sidekiq_config!(sidekiq_config = nil) # Try to get config from Sidekiq's configuration if not provided sidekiq_config ||= Sidekiq. if defined?(Sidekiq.) limits = sidekiq_config&.dig(:limits) || sidekiq_config&.dig('limits') return unless limits limits.each do |queue_name, limit| set_queue_limit(queue_name, limit) end end |
#load_from_yaml!(yaml_content) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 36 def load_from_yaml!(yaml_content) require 'yaml' config = YAML.safe_load(yaml_content) limits = config['limits'] || config[:limits] return unless limits limits.each do |queue_name, limit| set_queue_limit(queue_name, limit) end end |
#load_from_yaml_file!(file_path = nil) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 47 def load_from_yaml_file!(file_path = nil) # Try to find sidekiq.yml in common locations file_path ||= find_sidekiq_config_file return unless file_path && File.exist?(file_path) yaml_content = File.read(file_path) load_from_yaml!(yaml_content) end |
#queue_limit(queue_name) ⇒ Object
16 17 18 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 16 def queue_limit(queue_name) @queue_limits[queue_name.to_s] || @queue_limits[queue_name.to_sym] end |
#set_queue_limit(queue_name, limit) ⇒ Object
20 21 22 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 20 def set_queue_limit(queue_name, limit) @queue_limits[queue_name.to_s] = limit.to_i end |
#validate! ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/sidekiq/queue_throttled/configuration.rb', line 75 def validate! @queue_limits.each do |queue_name, limit| unless limit.is_a?(Integer) && limit.positive? raise ArgumentError, "Queue limit for '#{queue_name}' must be a positive integer, got: #{limit}" end end end |