Class: PatientHttp::SolidQueue::Configuration

Inherits:
Configuration
  • Object
show all
Defined in:
lib/patient_http/solid_queue/configuration.rb

Overview

Configuration for the Solid Queue Async HTTP gem.

Wraps PatientHttp::Configuration with Solid Queue-aware defaults and adds Solid Queue-specific options like queue name settings.

Constant Summary collapse

DEFAULT_PAYLOAD_STORE_THRESHOLD =

Default threshold in bytes above which payloads are stored externally.

64 * 1024
SHUTDOWN_TIMEOUT_BUFFER =

Buffer in seconds subtracted from SolidQueue.shutdown_timeout to derive the default shutdown_timeout for this gem’s connection pool.

2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(heartbeat_interval: 60, orphan_threshold: 300, queue_name: nil, payload_store_threshold: DEFAULT_PAYLOAD_STORE_THRESHOLD, on_retries_exhausted: nil, **pool_options) ⇒ Configuration

Returns a new instance of Configuration.

Parameters:

  • heartbeat_interval (Numeric) (defaults to: 60)

    Interval in seconds for heartbeat updates (default: 60)

  • orphan_threshold (Numeric) (defaults to: 300)

    Time in seconds to consider a job orphaned (default: 300)

  • queue_name (String, nil) (defaults to: nil)

    Optional queue name for RequestJob and CallbackJob (default: nil)

  • payload_store_threshold (Integer) (defaults to: DEFAULT_PAYLOAD_STORE_THRESHOLD)

    Size threshold in bytes for external payload storage (default: 64KB)

  • on_retries_exhausted (#call, nil) (defaults to: nil)

    Handler called when a CallbackWorker job exhausts retries

  • pool_options (Hash)

    Additional options passed to the SolidQueue connection pool



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/patient_http/solid_queue/configuration.rb', line 51

def initialize(
  heartbeat_interval: 60,
  orphan_threshold: 300,
  queue_name: nil,
  payload_store_threshold: DEFAULT_PAYLOAD_STORE_THRESHOLD,
  on_retries_exhausted: nil,
  **pool_options
)
  if ::SolidQueue.shutdown_timeout
    pool_options[:shutdown_timeout] ||= [::SolidQueue.shutdown_timeout - SHUTDOWN_TIMEOUT_BUFFER, 1].max
  end
  pool_options[:user_agent] ||= "SolidQueue-AsyncHttp"
  pool_options[:logger] ||= (defined?(SolidQueue.logger) ? SolidQueue.logger : nil)

  super(**pool_options)

  self.queue_name = queue_name
  self.heartbeat_interval = heartbeat_interval
  self.orphan_threshold = orphan_threshold
  self.payload_store_threshold = payload_store_threshold || DEFAULT_PAYLOAD_STORE_THRESHOLD
  self.on_retries_exhausted = on_retries_exhausted
end

Instance Attribute Details

#heartbeat_intervalNumeric

Returns Heartbeat update interval in seconds.

Returns:

  • (Numeric)

    Heartbeat update interval in seconds



20
21
22
# File 'lib/patient_http/solid_queue/configuration.rb', line 20

def heartbeat_interval
  @heartbeat_interval
end

#orphan_thresholdNumeric

Returns Orphan detection threshold in seconds.

Returns:

  • (Numeric)

    Orphan detection threshold in seconds



17
18
19
# File 'lib/patient_http/solid_queue/configuration.rb', line 17

def orphan_threshold
  @orphan_threshold
end

#payload_store_thresholdInteger

Returns Size threshold in bytes for external payload storage.

Returns:

  • (Integer)

    Size threshold in bytes for external payload storage



14
15
16
# File 'lib/patient_http/solid_queue/configuration.rb', line 14

def payload_store_threshold
  @payload_store_threshold
end

#queue_nameString?

Returns Queue name for RequestJob and CallbackJob.

Returns:

  • (String, nil)

    Queue name for RequestJob and CallbackJob



23
24
25
# File 'lib/patient_http/solid_queue/configuration.rb', line 23

def queue_name
  @queue_name
end

Instance Method Details

#on_retries_exhausted#call? #on_retries_exhausted {|error| ... } ⇒ #call?

Returns Handler invoked when a CallbackWorker job exhausts all retries.

Overloads:

  • #on_retries_exhausted#call?

    Returns the current handler.

    Returns:

    • (#call, nil)
  • #on_retries_exhausted {|error| ... } ⇒ #call?

    Sets a block as the handler.

    Yields:

    • (error)

      block to execute when retries are exhausted

    Yield Parameters:

    • error (PatientHttp::Error)

      information about the error

Returns:

  • (#call, nil)

    Handler invoked when a CallbackWorker job exhausts all retries.



33
34
35
36
37
38
39
# File 'lib/patient_http/solid_queue/configuration.rb', line 33

def on_retries_exhausted(&block)
  if block
    @on_retries_exhausted = block
  else
    @on_retries_exhausted
  end
end

#on_retries_exhausted=(value) ⇒ Object

Set the on_retries_exhausted handler.

This handler is called when a CallbackWorker job exhausts all retries. It receives the same arguments as the on_error callback.

Parameters:

  • value (#call, nil)

    A callable object or nil to clear the handler

Raises:

  • (ArgumentError)

    If value is not callable and not nil



109
110
111
112
113
114
115
# File 'lib/patient_http/solid_queue/configuration.rb', line 109

def on_retries_exhausted=(value)
  if value && !value.respond_to?(:call)
    raise ArgumentError.new("on_retries_exhausted must respond to #call, got: #{value.class}")
  end

  @on_retries_exhausted = value
end

#to_hHash

Returns configuration as a hash for logging/inspection.

Returns:

  • (Hash)

    configuration as a hash for logging/inspection



118
119
120
121
122
123
124
125
126
# File 'lib/patient_http/solid_queue/configuration.rb', line 118

def to_h
  super.merge(
    "payload_store_threshold" => payload_store_threshold,
    "heartbeat_interval" => heartbeat_interval,
    "orphan_threshold" => orphan_threshold,
    "queue_name" => queue_name,
    "on_retries_exhausted" => on_retries_exhausted ? "defined" : nil
  )
end