Class: Conductor::Worker::WorkerConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/conductor/worker/worker_config.rb

Overview

Configuration resolver for workers with 3-tier hierarchy Priority (highest to lowest):

  1. Worker-specific env var: conductor.worker.task_name.property
  2. Global worker env var: conductor.worker.all.property
  3. Code-level default from worker definition

Constant Summary collapse

PROPERTIES =

Configuration properties with their types and default values

{
  poll_interval: { type: :integer, default: 100 },       # milliseconds
  thread_count: { type: :integer, default: 1 },
  domain: { type: :string, default: nil },
  worker_id: { type: :string, default: nil },            # auto-generated if nil
  poll_timeout: { type: :integer, default: 100 },        # milliseconds
  register_task_def: { type: :boolean, default: false },
  overwrite_task_def: { type: :boolean, default: true },
  strict_schema: { type: :boolean, default: false },
  paused: { type: :boolean, default: false },
  isolation: { type: :symbol, default: :thread },        # :thread or :ractor
  executor: { type: :symbol, default: :thread_pool }     # :thread_pool or :fiber
}.freeze

Class Method Summary collapse

Class Method Details

.generate_worker_idString

Generate a unique worker ID

Returns:

  • (String)


57
58
59
60
61
62
63
64
65
66
# File 'lib/conductor/worker/worker_config.rb', line 57

def generate_worker_id
  hostname = begin
    Socket.gethostname
  rescue StandardError
    'unknown'
  end
  pid = Process.pid
  thread_id = Thread.current.object_id.to_s(16)
  "#{hostname}-#{pid}-#{thread_id}"
end

.resolve(worker_name, defaults = {}) ⇒ Hash

Resolve configuration for a worker

Parameters:

  • worker_name (String)

    Task definition name

  • defaults (Hash) (defaults to: {})

    Code-level defaults from worker definition

Returns:

  • (Hash)

    Resolved configuration



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/conductor/worker/worker_config.rb', line 33

def resolve(worker_name, defaults = {})
  result = {}

  PROPERTIES.each do |property, config|
    # Try to get from environment variables (3-tier hierarchy)
    env_value = get_env_value(worker_name, property)

    result[property] = if env_value
                         convert_value(env_value, config[:type])
                       elsif defaults.key?(property)
                         defaults[property]
                       else
                         config[:default]
                       end
  end

  # Auto-generate worker_id if not set
  result[:worker_id] ||= generate_worker_id

  result
end