Class: Sidekiq::QueueThrottled::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/queue_throttled/configuration.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

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_ttlObject

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_limitsObject

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_prefixObject

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_delayObject

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_ttlObject

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.options if defined?(Sidekiq.options)

  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