Module: PatientHttp::Sidekiq
- Defined in:
- lib/patient_http/sidekiq.rb,
lib/patient_http/sidekiq/stats.rb,
lib/patient_http/sidekiq/web_ui.rb,
lib/patient_http/sidekiq/context.rb,
lib/patient_http/sidekiq/task_handler.rb,
lib/patient_http/sidekiq/task_monitor.rb,
lib/patient_http/sidekiq/configuration.rb,
lib/patient_http/sidekiq/request_worker.rb,
lib/patient_http/sidekiq/callback_worker.rb,
lib/patient_http/sidekiq/lifecycle_hooks.rb,
lib/patient_http/sidekiq/request_executor.rb,
lib/patient_http/sidekiq/processor_observer.rb,
lib/patient_http/sidekiq/task_monitor_thread.rb
Defined Under Namespace
Classes: CallbackWorker, Configuration, Context, LifecycleHooks, ProcessorObserver, RequestExecutor, RequestWorker, Stats, TaskHandler, TaskMonitor, TaskMonitorThread, WebUI
Constant Summary collapse
- VERSION =
File.read(File.("../../../VERSION", __FILE__)).strip
Class Attribute Summary collapse
-
.configuration ⇒ Configuration
Ensure configuration is initialized.
-
.processor ⇒ PatientHttp::Processor?
private
Returns the processor instance (internal accessor).
Class Method Summary collapse
-
.after_completion {|response| ... } ⇒ Object
Add a callback to be executed after a successful request completion.
-
.after_error {|error| ... } ⇒ Object
Add a callback to be executed after a request error.
-
.append_middleware ⇒ void
Add Sidekiq middleware for context handling.
-
.configure {|Configuration| ... } ⇒ Configuration
Configure the gem with a block.
-
.decrypt(data) ⇒ Hash
private
Decrypt data using the configured encryptor.
-
.draining? ⇒ Boolean
Check if the processor is draining (not accepting new requests but still processing in-flight ones).
-
.encrypt(data) ⇒ Hash
private
Encrypt data using the configured encryptor.
-
.execute(request, callback:, callback_args: nil, raise_error_responses: false) ⇒ String
Execute an async HTTP request.
-
.external_storage ⇒ PatientHttp::ExternalStorage
private
Get an ExternalStorage instance for storing and fetching payloads.
-
.invoke_completion_callbacks(response) ⇒ void
private
Invoke the registered completion callbacks.
-
.invoke_error_callbacks(error) ⇒ void
private
Invoke the registered error callbacks.
-
.quiet ⇒ void
Signal the processor to drain (stop accepting new requests).
-
.reset! ⇒ void
private
Reset all state (useful for testing).
-
.reset_configuration! ⇒ Configuration
Reset configuration to defaults (useful for testing).
-
.running? ⇒ Boolean
Check if the processor is running.
-
.start ⇒ void
Start the processor.
-
.stop(timeout: nil) ⇒ void
Stop the processor gracefully.
-
.stopped? ⇒ Boolean
Check if the processor is stopped or has not been started.
-
.stopping? ⇒ Boolean
Check if the processor is in the process of stopping.
Class Attribute Details
.configuration ⇒ Configuration
Ensure configuration is initialized
105 106 107 |
# File 'lib/patient_http/sidekiq.rb', line 105 def configuration @configuration ||= Configuration.new end |
.processor ⇒ PatientHttp::Processor?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the processor instance (internal accessor)
323 324 325 |
# File 'lib/patient_http/sidekiq.rb', line 323 def processor @processor end |
Class Method Details
.after_completion {|response| ... } ⇒ Object
Add a callback to be executed after a successful request completion.
120 121 122 |
# File 'lib/patient_http/sidekiq.rb', line 120 def after_completion(&block) @after_completion_callbacks << block end |
.after_error {|error| ... } ⇒ Object
Add a callback to be executed after a request error.
128 129 130 |
# File 'lib/patient_http/sidekiq.rb', line 128 def after_error(&block) @after_error_callbacks << block end |
.append_middleware ⇒ void
This method returns an undefined value.
Add Sidekiq middleware for context handling. The middleware is already added during initialization. You can call this method again to append the middleware if needed to insert it after other middleware. If you need further control, you can manually add the ‘PatientHttp::Sidekiq::Context::Middleware` middleware yourself.
139 140 141 142 143 144 145 |
# File 'lib/patient_http/sidekiq.rb', line 139 def append_middleware ::Sidekiq.configure_server do |config| config.server_middleware do |chain| chain.add PatientHttp::Sidekiq::Context::Middleware end end end |
.configure {|Configuration| ... } ⇒ Configuration
Configure the gem with a block
97 98 99 100 101 |
# File 'lib/patient_http/sidekiq.rb', line 97 def configure configuration = Configuration.new yield(configuration) if block_given? @configuration = configuration end |
.decrypt(data) ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Decrypt data using the configured encryptor.
198 199 200 |
# File 'lib/patient_http/sidekiq.rb', line 198 def decrypt(data) configuration.encryptor.decrypt(data) end |
.draining? ⇒ Boolean
Check if the processor is draining (not accepting new requests but still processing in-flight ones).
158 159 160 |
# File 'lib/patient_http/sidekiq.rb', line 158 def draining? !!@processor&.draining? end |
.encrypt(data) ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Encrypt data using the configured encryptor.
189 190 191 |
# File 'lib/patient_http/sidekiq.rb', line 189 def encrypt(data) configuration.encryptor.encrypt(data) end |
.execute(request, callback:, callback_args: nil, raise_error_responses: false) ⇒ String
Execute an async HTTP request.
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/patient_http/sidekiq.rb', line 215 def execute(request, callback:, callback_args: nil, raise_error_responses: false) PatientHttp::CallbackValidator.validate!(callback) callback_name = callback.is_a?(Class) ? callback.name : callback.to_s callback_args = PatientHttp::CallbackValidator.validate_callback_args(callback_args) request_id = SecureRandom.uuid encrypted = encrypt(request.as_json) data = if external_storage.enabled? external_storage.store(encrypted, max_size: configuration.payload_store_threshold) else encrypted end RequestWorker.perform_async(data, callback_name, raise_error_responses, callback_args, request_id) request_id end |
.external_storage ⇒ PatientHttp::ExternalStorage
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Get an ExternalStorage instance for storing and fetching payloads.
180 181 182 |
# File 'lib/patient_http/sidekiq.rb', line 180 def external_storage @external_storage ||= PatientHttp::ExternalStorage.new(configuration) end |
.invoke_completion_callbacks(response) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Invoke the registered completion callbacks
302 303 304 305 306 |
# File 'lib/patient_http/sidekiq.rb', line 302 def invoke_completion_callbacks(response) @after_completion_callbacks.each do |callback| callback.call(response) end end |
.invoke_error_callbacks(error) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Invoke the registered error callbacks
313 314 315 316 317 |
# File 'lib/patient_http/sidekiq.rb', line 313 def invoke_error_callbacks(error) @after_error_callbacks.each do |callback| callback.call(error) end end |
.quiet ⇒ void
This method returns an undefined value.
Signal the processor to drain (stop accepting new requests)
262 263 264 265 266 |
# File 'lib/patient_http/sidekiq.rb', line 262 def quiet return unless running? @processor.drain end |
.reset! ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Reset all state (useful for testing)
287 288 289 290 291 292 293 294 295 |
# File 'lib/patient_http/sidekiq.rb', line 287 def reset! @processor&.stop(timeout: 0) @processor = nil @configuration = nil @external_storage = nil @after_completion_callbacks = [] @after_error_callbacks = [] PatientHttp.unregister_handler(@request_handler) if @request_handler end |
.reset_configuration! ⇒ Configuration
Reset configuration to defaults (useful for testing)
111 112 113 114 |
# File 'lib/patient_http/sidekiq.rb', line 111 def reset_configuration! @configuration = nil configuration end |
.running? ⇒ Boolean
Check if the processor is running.
150 151 152 |
# File 'lib/patient_http/sidekiq.rb', line 150 def running? !!@processor&.running? end |
.start ⇒ void
This method returns an undefined value.
Start the processor
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/patient_http/sidekiq.rb', line 237 def start return if running? @processor = PatientHttp::Processor.new(configuration) @processor.observe(ProcessorObserver.new(@processor)) configuration.observers.each do |observer| @processor.observe(observer) end @processor.start @request_handler ||= lambda do |request:, callback:, raise_error_responses:, callback_args:| execute( request, callback: callback, raise_error_responses: raise_error_responses, callback_args: callback_args ) end PatientHttp.register_handler(@request_handler) end |
.stop(timeout: nil) ⇒ void
This method returns an undefined value.
Stop the processor gracefully
272 273 274 275 276 277 278 279 280 281 |
# File 'lib/patient_http/sidekiq.rb', line 272 def stop(timeout: nil) if @request_handler PatientHttp.unregister_handler(@request_handler) end return unless @processor @processor.stop(timeout: timeout) @processor = nil end |
.stopped? ⇒ Boolean
Check if the processor is stopped or has not been started.
172 173 174 |
# File 'lib/patient_http/sidekiq.rb', line 172 def stopped? @processor.nil? || @processor.stopped? end |
.stopping? ⇒ Boolean
Check if the processor is in the process of stopping.
165 166 167 |
# File 'lib/patient_http/sidekiq.rb', line 165 def stopping? !!@processor&.stopping? end |