Class: Postburner::Configuration
- Inherits:
-
Object
- Object
- Postburner::Configuration
- Defined in:
- lib/postburner/configuration.rb
Overview
Configuration system for Postburner workers and connections.
Supports both programmatic configuration and YAML file loading. Configuration can be set per-environment and controls worker behavior, Beanstalkd connection, and execution strategies.
Instance Attribute Summary collapse
-
#beanstalk_url ⇒ Object
Global settings.
-
#default_mailer_queue ⇒ Object
Returns the value of attribute default_mailer_queue.
-
#default_max_retries ⇒ Object
Returns the value of attribute default_max_retries.
-
#default_priority ⇒ Object
Global settings.
-
#default_queue ⇒ Object
Returns the value of attribute default_queue.
-
#default_retry_delay ⇒ Object
Returns the value of attribute default_retry_delay.
-
#default_scheduler_interval ⇒ Object
Returns the value of attribute default_scheduler_interval.
-
#default_scheduler_priority ⇒ Object
Returns the value of attribute default_scheduler_priority.
-
#default_ttr ⇒ Object
Global settings.
-
#enqueue_options ⇒ Object
Returns the value of attribute enqueue_options.
-
#logger ⇒ Object
Global settings.
-
#worker_config ⇒ Object
Worker-specific settings (loaded for a single worker).
Class Method Summary collapse
-
.load_yaml(path, env = 'development', worker_name = nil) ⇒ Configuration
Loads configuration from a YAML file with ERB support.
Instance Method Summary collapse
-
#expand_tube_name(queue_name, env = nil) ⇒ String
Expands queue name to full tube name with environment prefix.
-
#expanded_tube_names(env = nil) ⇒ Array<String>
Returns array of expanded tube names with environment prefix.
-
#initialize(options = {}) ⇒ Configuration
constructor
A new instance of Configuration.
-
#queue_names ⇒ Array<String>
Returns array of queue names from worker config.
-
#scheduler_tube_name(env = nil) ⇒ String
Returns the scheduler tube name with environment prefix.
-
#tube_prefix(env = nil) ⇒ String
Returns the Beanstalkd tube name prefix for the given environment.
Constructor Details
#initialize(options = {}) ⇒ Configuration
Returns a new instance of Configuration.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/postburner/configuration.rb', line 52 def initialize( = {}) @beanstalk_url = [:beanstalk_url] || ENV['BEANSTALK_URL'] || 'beanstalk://localhost:11300' @logger = [:logger] || (defined?(Rails) ? Rails.logger : Logger.new(STDOUT)) @default_priority = [:default_priority] || 65536 @default_ttr = [:default_ttr] || 300 @default_queue = [:default_queue] || 'default' @default_mailer_queue = [:default_mailer_queue] @default_max_retries = [:default_max_retries] || 0 @default_retry_delay = [:default_retry_delay] || ->(n) { 2 ** n } @default_scheduler_interval = [:default_scheduler_interval] || 300 @default_scheduler_priority = [:default_scheduler_priority] || 100 @enqueue_options = [:enqueue_options] @worker_config = [:worker_config] || { name: 'default', queues: ['default'], forks: 0, threads: 1, gc_limit: nil, timeout: 3, shutdown_timeout: @default_ttr } end |
Instance Attribute Details
#beanstalk_url ⇒ Object
Global settings
24 25 26 |
# File 'lib/postburner/configuration.rb', line 24 def beanstalk_url @beanstalk_url end |
#default_mailer_queue ⇒ Object
Returns the value of attribute default_mailer_queue.
25 26 27 |
# File 'lib/postburner/configuration.rb', line 25 def default_mailer_queue @default_mailer_queue end |
#default_max_retries ⇒ Object
Returns the value of attribute default_max_retries.
25 26 27 |
# File 'lib/postburner/configuration.rb', line 25 def default_max_retries @default_max_retries end |
#default_priority ⇒ Object
Global settings
24 25 26 |
# File 'lib/postburner/configuration.rb', line 24 def default_priority @default_priority end |
#default_queue ⇒ Object
Returns the value of attribute default_queue.
25 26 27 |
# File 'lib/postburner/configuration.rb', line 25 def default_queue @default_queue end |
#default_retry_delay ⇒ Object
Returns the value of attribute default_retry_delay.
25 26 27 |
# File 'lib/postburner/configuration.rb', line 25 def default_retry_delay @default_retry_delay end |
#default_scheduler_interval ⇒ Object
Returns the value of attribute default_scheduler_interval.
26 27 28 |
# File 'lib/postburner/configuration.rb', line 26 def default_scheduler_interval @default_scheduler_interval end |
#default_scheduler_priority ⇒ Object
Returns the value of attribute default_scheduler_priority.
26 27 28 |
# File 'lib/postburner/configuration.rb', line 26 def default_scheduler_priority @default_scheduler_priority end |
#default_ttr ⇒ Object
Global settings
24 25 26 |
# File 'lib/postburner/configuration.rb', line 24 def default_ttr @default_ttr end |
#enqueue_options ⇒ Object
Returns the value of attribute enqueue_options.
27 28 29 |
# File 'lib/postburner/configuration.rb', line 27 def @enqueue_options end |
#logger ⇒ Object
Global settings
24 25 26 |
# File 'lib/postburner/configuration.rb', line 24 def logger @logger end |
#worker_config ⇒ Object
Worker-specific settings (loaded for a single worker)
30 31 32 |
# File 'lib/postburner/configuration.rb', line 30 def worker_config @worker_config end |
Class Method Details
.load_yaml(path, env = 'development', worker_name = nil) ⇒ Configuration
Loads configuration from a YAML file with ERB support.
Supports ERB templating like Rails’ database.yml, allowing environment variables and Ruby expressions in configuration.
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/postburner/configuration.rb', line 123 def self.load_yaml(path, env = 'development', worker_name = nil) yaml = YAML.load(ERB.new(File.read(path)).result, aliases: true) # env_config = top-level environment config (development:, production:, etc.) env_config = yaml[env.to_s] || yaml[env.to_sym] raise ArgumentError, "Environment '#{env}' not found in #{path}" unless env_config workers = env_config['workers'] raise ArgumentError, "No 'workers:' section found in #{path} for environment '#{env}'" unless workers # Auto-select single worker or validate worker_name if worker_name.nil? if workers.size == 1 worker_name = workers.keys.first else raise ArgumentError, <<~ERROR Configuration has multiple workers, but --worker not specified Available workers: #{workers.keys.join(', ')} Usage: bin/postburner --worker <name> ERROR end else unless workers.key?(worker_name) raise ArgumentError, <<~ERROR Worker '#{worker_name}' not found in #{path} Available workers: #{workers.keys.join(', ')} ERROR end end # worker_yaml = specific worker configuration from YAML (workers: imports:) worker_yaml = workers[worker_name] # Build worker_config hash - worker-level overrides env-level defaults default_ttr = (env_config['default_ttr'] || 300).to_i worker_config = { name: worker_name, queues: worker_yaml['queues'] || ['default'], forks: (worker_yaml['forks'] || env_config['forks'] || 0).to_i, threads: (worker_yaml['threads'] || env_config['threads'] || 1).to_i, gc_limit: (worker_yaml['gc_limit'] || env_config['gc_limit'])&.to_i, timeout: (worker_yaml['timeout'] || 3).to_i, shutdown_timeout: (worker_yaml['shutdown_timeout'] || env_config['shutdown_timeout'] || default_ttr).to_i } = { beanstalk_url: env_config['beanstalk_url'], default_priority: env_config['default_priority'], default_ttr: env_config['default_ttr'], default_queue: env_config['default_queue'], default_mailer_queue: env_config['default_mailer_queue'], default_scheduler_interval: env_config['scheduler_interval'], default_scheduler_priority: env_config['scheduler_priority'], worker_config: worker_config } new() end |
Instance Method Details
#expand_tube_name(queue_name, env = nil) ⇒ String
Expands queue name to full tube name with environment prefix.
Converts a simple queue name (e.g., ‘default’, ‘critical’) to the full Beanstalkd tube name with environment namespace (e.g., ‘postburner.production.critical’).
211 212 213 214 215 216 217 |
# File 'lib/postburner/configuration.rb', line 211 def (queue_name, env = nil) env ||= defined?(Rails) ? Rails.env : nil [ tube_prefix(env), queue_name, ].compact.join('.') end |
#expanded_tube_names(env = nil) ⇒ Array<String>
Returns array of expanded tube names with environment prefix.
253 254 255 |
# File 'lib/postburner/configuration.rb', line 253 def (env = nil) queue_names.map { |q| (q, env) } end |
#queue_names ⇒ Array<String>
Returns array of queue names from worker config.
189 190 191 |
# File 'lib/postburner/configuration.rb', line 189 def queue_names @worker_config[:queues].map(&:to_s) end |
#scheduler_tube_name(env = nil) ⇒ String
Returns the scheduler tube name with environment prefix.
267 268 269 |
# File 'lib/postburner/configuration.rb', line 267 def scheduler_tube_name(env = nil) (Postburner::Scheduler::SCHEDULER_TUBE_NAME, env) end |
#tube_prefix(env = nil) ⇒ String
Do not set ActiveJob’s ‘queue_name_prefix` - Postburner handles queue name expansion automatically via the adapter.
Returns the Beanstalkd tube name prefix for the given environment.
Postburner automatically prefixes all queue names with this value. The ActiveJob adapter expands queue names using this prefix, so ‘queue_as :default` becomes `postburner.production.default` in production.
236 237 238 239 240 241 242 |
# File 'lib/postburner/configuration.rb', line 236 def tube_prefix(env = nil) env ||= defined?(Rails) ? Rails.env : nil [ 'postburner', env, ].compact.join('.') end |