diff --git a/app/models/agent.rb b/app/models/agent.rb index 5356b0ed..cb7b9181 100644 --- a/app/models/agent.rb +++ b/app/models/agent.rb @@ -55,6 +55,8 @@ class Agent < ActiveRecord::Base has_many :scenario_memberships, :dependent => :destroy, :inverse_of => :agent has_many :scenarios, :through => :scenario_memberships, :inverse_of => :agents + scope :active, -> { where(disabled: false) } + scope :of_type, lambda { |type| type = case type when String, Symbol, Class diff --git a/lib/twitter_stream.rb b/lib/twitter_stream.rb index 3aac876a..b6ad79bd 100644 --- a/lib/twitter_stream.rb +++ b/lib/twitter_stream.rb @@ -11,7 +11,6 @@ class TwitterStream def stop @running = false - EventMachine::stop_event_loop if EventMachine.reactor_running? end def stream!(filters, agent, &block) @@ -91,9 +90,13 @@ class TwitterStream def run while @running begin - agents = Agents::TwitterStreamAgent.all + agents = Agents::TwitterStreamAgent.active.all EventMachine::run do + EventMachine.add_periodic_timer(1) { + EventMachine::stop_event_loop if !@running + } + EventMachine.add_periodic_timer(RELOAD_TIMEOUT) { puts "Reloading EventMachine and all Agents..." EventMachine::stop_event_loop @@ -101,17 +104,14 @@ class TwitterStream if agents.length == 0 puts "No agents found. Will look again in a minute." - sleep 60 - EventMachine::stop_event_loop + EventMachine.add_timer(60) { + EventMachine::stop_event_loop + } else puts "Found #{agents.length} agent(s). Loading them now..." load_and_run agents end end - - print "Pausing..."; STDOUT.flush - sleep 1 - puts "done." rescue SignalException, SystemExit @running = false EventMachine::stop_event_loop if EventMachine.reactor_running?