Class: FiberJob::Config

Inherits:
Object
  • Object
show all
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.

Examples:

Basic configuration

FiberJob.configure do |config|
  config.redis_url = 'redis://localhost:6379/0'
  config.concurrency = 5
  config.queues = [:default, :high, :low]
  config.log_level = :debug
end

Per-queue concurrency

FiberJob.configure do |config|
  config.queue_concurrency = {
    default: 5,
    high: 10,
    low: 2
  }
end

Job auto-loading

FiberJob.configure do |config|
  config.job_paths = ['app/jobs', 'lib/jobs']
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializevoid

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

#concurrencyInteger

Returns Global default concurrency level.

Returns:

  • (Integer)

    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_loggingBoolean

Returns Whether to enable logging (set to false for maximum performance).

Returns:

  • (Boolean)

    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_pathsArray<String>

Returns List of paths to auto-load job classes from.

Returns:

  • (Array<String>)

    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_levelSymbol

Returns Logging level (:debug, :info, :warn, :error).

Returns:

  • (Symbol)

    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

#loggerLogger, NullLogger

Returns the logger instance, creating it lazily if needed. When logging is disabled, returns a null logger for maximum performance.

Returns:



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_sizeInteger

Returns Redis connection pool size.

Returns:

  • (Integer)

    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_concurrencyHash

Returns Per-queue concurrency settings.

Returns:

  • (Hash)

    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

#queuesArray<Symbol>

Returns List of queue names to process.

Returns:

  • (Array<Symbol>)

    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_urlString

Returns Redis connection URL.

Returns:

  • (String)

    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.

Examples:

Get queue concurrency

config.concurrency_for_queue(:high)  # => 10
config.concurrency_for_queue(:unknown)  # => 2 (global default)

Parameters:

  • queue_name (String, Symbol)

    Name of the queue

Returns:

  • (Integer)

    Concurrency level for the specified queue



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.

Examples:

Auto-load jobs

config.job_paths = ['app/jobs', 'lib/jobs']
loaded_jobs = config.load_jobs!
# => [EmailJob, DataProcessingJob, ...]

Returns:

  • (Array<Class>)

    List of loaded job classes



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.expand_path(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