bin/supervision
#!/usr/bin/env ruby
# Run the supervisor from a command prompt like this:
#
# bin/supervision --config bin/settings.yml &
#
require "erb"
require "uri"
require "yaml"
require "optparse"
require "bundler/setup"
require "celluloid/current"
require "celluloid/supervision"
require "celluloid-io-pg-listener"
require "celluloid-io-pg-listener/supervision_configuration_signature"
# These are referenced in bin/settings.yml, so they have to be required:
require "celluloid-io-pg-listener/examples/client"
require "celluloid-io-pg-listener/examples/listener_client_by_inheritance"
$supervisor_options = {}
OptionParser.new do |opts|
opts.banner = "Usage: bin/supervisor [options]"
opts.on("-c", "--config FILE", "Path to YAML configuration file") do |file|
$supervisor_options[:config_path] = file
end
opts.on("-d", "--debug", "set $CELLULOID_DEBUG = true") do |file|
$supervisor_options[:debug] = true
$CELLULOID_DEBUG = true
end
opts.on("-t", "--threaded", "set Celluloid.task_class = Celluloid::Task::Threaded") do |file|
$supervisor_options[:threaded] = true
Celluloid.task_class = Celluloid::Task::Threaded
end
end.parse!
puts "$supervisor_options: #{$supervisor_options.inspect}" if $supervisor_options[:debug]
module CelluloidIOPGListener
class InsertClient
include CelluloidIOPGListener.client(:unlisten_wrapper_without_termination)
def insert_callback(channel, payload)
# <-- within the unlisten_wrapper's block if :insert_callback is the callback_method
debug "#{self.class} channel is #{channel}"
debug "#{self.class} payload is #{payload}"
end
end
end
class ListeningGroup < Celluloid::Supervision::Container
supervise type: CelluloidIOPGListener::InsertClient, as: :insert_client, args: [{dbname: "celluloid_io_pg_listener_test", channel: "users_insert", callback_method: :insert_callback}]
end
# Alternatively:
# class ListeningGroup < Celluloid::Supervision::Container
# signature = CelluloidIOPGListener::SupervisionConfigurationSignature.new(path_to_yaml: $supervisor_options[:config_path]).signature.first
# supervise **signature
# end
ListeningGroup.run