Class: Vessel::MiddlewareScheduler
- Inherits:
-
Object
- Object
- Vessel::MiddlewareScheduler
- Extended by:
- Forwardable
- Defined in:
- lib/vessel/middleware_scheduler.rb
Instance Attribute Summary collapse
-
#middlewares ⇒ Object
readonly
Returns the value of attribute middlewares.
-
#settings ⇒ Object
readonly
Returns the value of attribute settings.
Instance Method Summary collapse
- #call(fields) ⇒ Object
- #force_kill ⇒ Object
- #idle?(after: false) ⇒ Boolean
-
#initialize(settings, &block) ⇒ MiddlewareScheduler
constructor
A new instance of MiddlewareScheduler.
- #pool ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(settings, &block) ⇒ MiddlewareScheduler
Returns a new instance of MiddlewareScheduler.
14 15 16 17 18 19 20 21 |
# File 'lib/vessel/middleware_scheduler.rb', line 14 def initialize(settings, &block) @settings = settings @middlewares = if block_given? [block] else settings[:middleware].map { |m| Object.const_get(m).new(settings) } end end |
Instance Attribute Details
#middlewares ⇒ Object (readonly)
Returns the value of attribute middlewares.
12 13 14 |
# File 'lib/vessel/middleware_scheduler.rb', line 12 def middlewares @middlewares end |
#settings ⇒ Object (readonly)
Returns the value of attribute settings.
12 13 14 |
# File 'lib/vessel/middleware_scheduler.rb', line 12 def settings @settings end |
Instance Method Details
#call(fields) ⇒ Object
23 24 25 26 27 |
# File 'lib/vessel/middleware_scheduler.rb', line 23 def call(fields) Concurrent::Future.execute(executor: pool) do middlewares.inject(fields.to_h) { |hash, middleware| middleware.call(hash, fields) } end end |
#force_kill ⇒ Object
47 48 49 |
# File 'lib/vessel/middleware_scheduler.rb', line 47 def force_kill pool.send(:ns_kill_execution) end |
#idle?(after: false) ⇒ Boolean
37 38 39 40 |
# File 'lib/vessel/middleware_scheduler.rb', line 37 def idle?(after: false) completed_tasks = completed_task_count + (after ? 1 : 0) queue_length.zero? && scheduled_task_count == completed_tasks end |
#pool ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/vessel/middleware_scheduler.rb', line 29 def pool @pool ||= Concurrent::ThreadPoolExecutor.new( min_threads: settings[:min_threads], max_threads: settings[:max_threads], max_queue: 0 ) end |
#stop ⇒ Object
42 43 44 45 |
# File 'lib/vessel/middleware_scheduler.rb', line 42 def stop pool.shutdown pool.kill unless pool.wait_for_termination(30) end |