class Celluloid::Supervision::Container
Attributes
registry[RW]
Public Class Methods
blocks()
click to toggle source
Actors or sub-applications to be supervised
# File lib/celluloid/supervision/container.rb, line 28 def blocks @blocks ||= [] end
define(options)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 10 def define(options) Configuration.define(top(options)) end
deploy(options)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 14 def deploy(options) Configuration.deploy(top(options)) end
new(options = {}) { |current_actor| ... }
click to toggle source
Start the container.
# File lib/celluloid/supervision/container.rb, line 60 def initialize(options = {}) options = { registry: options } if options.is_a? Internals::Registry @state = :initializing @actors = [] # instances in the container @registry = options.delete(:registry) || Celluloid.actor_system.registry @branch = options.delete(:branch) || :services yield current_actor if block_given? end
pool(klass, config, &block)
click to toggle source
Register a pool of actors to be launched on group startup
# File lib/celluloid/supervision/container/behavior/pool.rb, line 39 def pool(klass, config, &block) blocks << lambda do |container| container.pool(klass, config, &block) end end
run(options = {})
click to toggle source
Run the application in the foreground with a simple watchdog
# File lib/celluloid/supervision/container.rb, line 43 def run(options = {}) loop do supervisor = run!(options) # Take five, toplevel supervisor sleep 5 while supervisor.alive? # Why 5? Internals::Logger.error "!!! Celluloid::Supervision::Container #{self} crashed. Restarting..." end end
run!(options = {})
click to toggle source
Start this application (and watch it with a supervisor)
# File lib/celluloid/supervision/container.rb, line 33 def run!(options = {}) container = new(options) do |g| blocks.each do |block| block.call(g) end end container end
supervise(config, &block)
click to toggle source
# File lib/celluloid/supervision/supervise.rb, line 23 def supervise(config, &block) blocks << lambda do |container| container.add(config, &block) end end
top(options)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 18 def top(options) { as: options.delete(:as), type: (options.delete(:type) || self), branch: (options.delete(:branch) || :services), supervise: options.delete(:supervise) || [] } end
Public Instance Methods
[](actor_name)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 109 def [](actor_name) @registry[actor_name] end
actors()
click to toggle source
# File lib/celluloid/supervision/container.rb, line 99 def actors @actors.map(&:actor) end
add(configuration)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 71 def add(configuration) Configuration.valid?(configuration, true) @actors << Instance.new(configuration.merge(registry: @registry, branch: @branch)) @state = :running add_accessors configuration Actor.current end
add_accessors(configuration)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 79 def add_accessors(configuration) if configuration[:as] unless methods.include? configuration[:as] self.class.instance_eval do define_method(configuration[:as]) do @registry[configuration[:as]] end end end end end
find(actor)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 103 def find(actor) @actors.find do |instance| instance.actor == actor end end
pool(klass, config = {}, &block)
click to toggle source
# File lib/celluloid/supervision/container/behavior/pool.rb, line 28 def pool(klass, config = {}, &block) _ = supervise(pooling_options(config, block: block, actors: klass)) _.actors.last end
remove(actor)
click to toggle source
# File lib/celluloid/supervision/container.rb, line 93 def remove(actor) actor = Celluloid::Actor[actor] if actor.is_a? Symbol instance = find(actor) instance.terminate if instance end
remove_accessors()
click to toggle source
# File lib/celluloid/supervision/container.rb, line 91 def remove_accessors; end
restart_actor(actor, reason)
click to toggle source
Restart a crashed actor
# File lib/celluloid/supervision/container.rb, line 114 def restart_actor(actor, reason) return if @state == :shutdown instance = find(actor) raise "a container instance went missing. This shouldn't be!" unless instance if reason exclusive { instance.restart } else instance.cleanup @actors.delete(instance) end end
shutdown()
click to toggle source
# File lib/celluloid/supervision/container.rb, line 127 def shutdown @state = :shutdown finalize end
supervise(config, &block)
click to toggle source
# File lib/celluloid/supervision/supervise.rb, line 29 def supervise(config, &block) add(Configuration.options(config, block: block)) end
Private Instance Methods
finalize()
click to toggle source
# File lib/celluloid/supervision/container.rb, line 134 def finalize if @actors @actors.reverse_each do |instance| instance.terminate @actors.delete(instance) end end end