#!/usr/bin/env ruby $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))) CONNERRHELP = < 'redis://localhost:6379/0', :argument => true on :o, :output, 'Log destination - full file path. Default is STDOUT', :default => STDOUT, :argument => true on '--depinstall', "Installs additional dependencies" do puts "Installing dependencies" puts "em-hiredis..." `gem install em-hiredis` puts "em-http-request prerelease..." `gem install em-http-request --pre` puts "cookiejar...." `gem install cookiejar` exit end on :h, :help, 'Print help', :tail => true do puts help exit end end begin require 'em-hiredis' require 'eventmachine' require 'em-http-request' require 'cookiejar' rescue LoadError => e puts e.message puts HELP exit end ENV['REDIS_URL'] = opts[:redis_url] begin require 'noah' require 'noah/agent' rescue Errno::ECONNREFUSED puts CONNERRHELP exit end Noah::Log.logger = Logger.new(opts[:output]) LOGGER = Noah::Log.logger LOGGER.progname = __FILE__ EventMachine.run do EM.error_handler do |e| LOGGER.warn(e) end trap("INT") { LOGGER.debug("Shutting down. Watches will not be fired");EM.stop } noah = Noah::Agent.new noah.errback{|x| LOGGER.error("Errback: #{x}")} noah.callback{|y| LOGGER.info("Callback: #{y}")} r = EventMachine::Hiredis.connect(ENV["REDIS_URL"]) r.errback{|x| LOGGER.error("Unable to connect to redis: #{x}")} LOGGER.info("Attaching to Redis Pubsub") r.psubscribe("*") r.on(:pmessage) do |pattern, event, message| noah.reread_watchers if event =~ /^\/\/noah\/watchers\/.*/ noah.broker("#{event}|#{message}") unless noah.watchers == 0 end end