module Zulu
Constants
- DEFAULTS
- VERSION
Public Class Methods
options()
click to toggle source
# File lib/zulu.rb, line 31 def self.options @options ||= DEFAULTS.dup end
options=(opts)
click to toggle source
# File lib/zulu.rb, line 35 def self.options=(opts) @options = opts end
parse_options(args=ARGV)
click to toggle source
# File lib/zulu.rb, line 39 def self.parse_options(args=ARGV) banner = "Zulu #{Zulu::VERSION}\nUsage: zulu [options]" opts = Slop.parse args, strict: true, help: true, banner: banner do on :v, :version, 'Print the version' do puts "Version #{Zulu::VERSION}" end on :p, :port, 'Use PORT (default: 9292)', argument: true, as: Integer on :o, :host, 'Listen on HOST (default: 0.0.0.0)', argument: true on :s, :servers, 'Run SERVERS server workers (default: 0)', argument: true, as: Integer on :w, :workers, 'Run WORKERS background workers (default: 5)', argument: true, as: Integer on :d, :database, "Connect to DATABASE (default: redis://127.0.0.1:6379)", argument: true on :k, :keeper, "Run a keeper worker (default: false)" on :i, :interval, 'Check time every INTERVAL seconds (default: 5)', argument: true, as: Integer end opts.each do |option| next unless option.value value = option.value value = value.strip if value.is_a?(String) options[option.key.to_sym] = value end rescue Slop::Error => e abort "ERROR: #{e.message}" end
redis()
click to toggle source
# File lib/zulu.rb, line 116 def self.redis Thread.current[:redis] ||= Redis.new(url: options[:database], driver: :celluloid) end
run()
click to toggle source
# File lib/zulu.rb, line 64 def self.run run_keeper if options[:keeper] run_workers if options[:workers] > 0 run_servers if options[:servers] > 0 sleep rescue Interrupt stop end
run_keeper()
click to toggle source
# File lib/zulu.rb, line 80 def self.run_keeper Keeper.supervise_as :keeper Celluloid::Actor[:keeper].async.start end
run_servers()
click to toggle source
# File lib/zulu.rb, line 89 def self.run_servers Rack::Handler::Reel.run Zulu::Server, port: options[:port], host: options[:host], workers: options[:servers] end
run_workers()
click to toggle source
# File lib/zulu.rb, line 100 def self.run_workers Celluloid::Actor[:worker_supervisor] = Celluloid::SupervisionGroup.run! Celluloid::Actor[:worker_supervisor].pool(SubscriptionRequestProcessor, as: :request_processors, size: options[:workers]) Celluloid::Actor[:worker_supervisor].pool(TopicDistributionProcessor, as: :distribution_processors, size: options[:workers]) Celluloid::Actor[:request_processors].async.process Celluloid::Actor[:distribution_processors].async.process end
stop()
click to toggle source
# File lib/zulu.rb, line 73 def self.stop stop_keeper if options[:keeper] stop_servers if options[:servers] > 0 stop_workers if options[:workers] > 0 exit end
stop_keeper()
click to toggle source
# File lib/zulu.rb, line 85 def self.stop_keeper Celluloid::Actor[:keeper].terminate if Celluloid::Actor[:worker_supervisor] end
stop_servers()
click to toggle source
# File lib/zulu.rb, line 95 def self.stop_servers Celluloid::Actor[:reel_server].terminate if Celluloid::Actor[:reel_server] Celluloid::Actor[:reel_rack_pool].terminate if Celluloid::Actor[:reel_rack_pool] end
stop_workers()
click to toggle source
# File lib/zulu.rb, line 112 def self.stop_workers Celluloid::Actor[:worker_supervisor].terminate if Celluloid::Actor[:worker_supervisor] end