Class: FiberJob::Config
- Inherits:
-
Object
- Object
- FiberJob::Config
- Defined in:
- lib/fiber_job/config.rb
Overview
Configuration class for FiberJob library settings. Manages Redis connection, worker concurrency, queue configuration, and logging settings. Supports both global and per-queue configuration.
Instance Attribute Summary collapse
-
#concurrency ⇒ Integer
Global default concurrency level.
-
#enable_logging ⇒ Boolean
Whether to enable logging (set to false for maximum performance).
-
#job_paths ⇒ Array<String>
List of paths to auto-load job classes from.
-
#log_level ⇒ Symbol
Logging level (:debug, :info, :warn, :error).
-
#logger ⇒ Logger, NullLogger
Returns the logger instance, creating it lazily if needed.
-
#pool_size ⇒ Integer
Redis connection pool size.
-
#queue_concurrency ⇒ Hash
Per-queue concurrency settings.
-
#queues ⇒ Array<Symbol>
List of queue names to process.
-
#redis_url ⇒ String
Redis connection URL.
Instance Method Summary collapse
-
#concurrency_for_queue(queue_name) ⇒ Integer
Returns the concurrency setting for a specific queue.
-
#initialize ⇒ void
constructor
Initializes configuration with sensible defaults.
-
#load_jobs! ⇒ Array<Class>
Auto-loads job classes from configured paths.
Constructor Details
#initialize ⇒ void
Initializes configuration with sensible defaults. Values can be overridden through environment variables or configuration blocks.
Environment variables:
-
REDIS_URL: Redis connection URL (default: redis://localhost:6379)
-
FIBER_JOB_LOG_LEVEL: Logging level (default: info)
-
FIBER_JOB_CONCURRENCY: Global concurrency level (default: 2)
-
FIBER_JOB_ENABLE_LOGGING: Enable/disable logging (default: true)
-
FIBER_JOB_POOL_SIZE: Redis connection pool size (default: 5)
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/fiber_job/config.rb', line 83 def initialize @redis_url = ENV.fetch('REDIS_URL', 'redis://localhost:6379') @concurrency = ENV.fetch('FIBER_JOB_CONCURRENCY', 2).to_i @queues = [:default] @queue_concurrency = { default: 10 } # Per-queue concurrency @log_level = ENV.fetch('FIBER_JOB_LOG_LEVEL', 'info').to_sym @enable_logging = ENV.fetch('FIBER_JOB_ENABLE_LOGGING', 'true') == 'true' @logger = nil # Lazy loaded @job_paths = [] @pool_size = ENV.fetch('FIBER_JOB_POOL_SIZE', 5).to_i end |
Instance Attribute Details
#concurrency ⇒ Integer
Returns Global default concurrency level.
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#enable_logging ⇒ Boolean
Returns Whether to enable logging (set to false for maximum performance).
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#job_paths ⇒ Array<String>
Returns List of paths to auto-load job classes from.
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#log_level ⇒ Symbol
Returns Logging level (:debug, :info, :warn, :error).
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#logger ⇒ Logger, NullLogger
Returns the logger instance, creating it lazily if needed. When logging is disabled, returns a null logger for maximum performance.
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#pool_size ⇒ Integer
Returns Redis connection pool size.
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#queue_concurrency ⇒ Hash
Returns Per-queue concurrency settings.
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#queues ⇒ Array<Symbol>
Returns List of queue names to process.
69 70 |
# File 'lib/fiber_job/config.rb', line 69 attr_accessor :redis_url, :concurrency, :queues, :queue_concurrency, :log_level, :job_paths, :pool_size, :enable_logging |
#redis_url ⇒ String
Returns Redis connection URL.
69 70 71 |
# File 'lib/fiber_job/config.rb', line 69 def redis_url @redis_url end |
Instance Method Details
#concurrency_for_queue(queue_name) ⇒ Integer
Returns the concurrency setting for a specific queue. Falls back to the global concurrency setting if no queue-specific setting is configured.
105 106 107 |
# File 'lib/fiber_job/config.rb', line 105 def concurrency_for_queue(queue_name) @queue_concurrency[queue_name.to_sym] || @concurrency end |
#load_jobs! ⇒ Array<Class>
Auto-loads job classes from configured paths. Recursively loads all .rb files in the specified directories and validates that they contain classes inheriting from FiberJob::Job.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/fiber_job/config.rb', line 119 def load_jobs! loaded_classes = [] @job_paths.each do |path| unless Dir.exist?(path) next end Dir.glob("#{path}/**/*.rb").each do |file| # Track classes before requiring the file classes_before = job_classes require_relative File.(file) # Find newly loaded job classes new_classes = job_classes - classes_before new_classes.each do |job_class| loaded_classes << job_class end end end loaded_classes end |