Class: Vessel::MiddlewareScheduler

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/vessel/middleware_scheduler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#middlewaresObject (readonly)

Returns the value of attribute middlewares.



12
13
14
# File 'lib/vessel/middleware_scheduler.rb', line 12

def middlewares
  @middlewares
end

#settingsObject (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_killObject



47
48
49
# File 'lib/vessel/middleware_scheduler.rb', line 47

def force_kill
  pool.send(:ns_kill_execution)
end

#idle?(after: false) ⇒ Boolean

Returns:

  • (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

#poolObject



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

#stopObject



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