# File lib/god/event_handler.rb, line 50 def self.call(pid, event, extra_data = {}) @@actions[pid][event].call(extra_data) if watching_pid?(pid) && @@actions[pid][event] end
# File lib/god/event_handler.rb, line 41 def self.deregister(pid, event) if watching_pid? pid running = ::Process.kill(0, pid.to_i) rescue false @@actions[pid].delete(event) @@handler.register_process(pid, @@actions[pid].keys) if running @@actions.delete(pid) if @@actions[pid].empty? end end
# File lib/god/event_handler.rb, line 11 def self.event_system @@handler::EVENT_SYSTEM end
# File lib/god/event_handler.rb, line 15 def self.load begin case RUBY_PLATFORM when /darwin/, /bsd/ require 'god/event_handlers/kqueue_handler' @@handler = KQueueHandler when /linux/ require 'god/event_handlers/netlink_handler' @@handler = NetlinkHandler else raise NotImplementedError, "Platform not supported for EventHandler" end @@loaded = true rescue Exception require 'god/event_handlers/dummy_handler' @@handler = DummyHandler @@loaded = false end end
# File lib/god/event_handler.rb, line 7 def self.loaded? @@loaded end
# File lib/god/event_handler.rb, line 75 def self.operational? com = [false] Thread.new do begin event_system = God::EventHandler.event_system pid = fork do loop { sleep(1) } end self.register(pid, :proc_exit) do com[0] = true end ::Process.kill('KILL', pid) ::Process.waitpid(pid) sleep(0.1) self.deregister(pid, :proc_exit) rescue nil rescue => e puts e.message puts e.backtrace.join("\n") end end.join sleep(0.1) com.first end
# File lib/god/event_handler.rb, line 35 def self.register(pid, event, &block) @@actions[pid] ||= {} @@actions[pid][event] = block @@handler.register_process(pid, @@actions[pid].keys) end
# File lib/god/event_handler.rb, line 58 def self.start Thread.new do loop do begin @@handler.handle_events rescue Exception => e message = format("Unhandled exception (%s): %s\n%s", e.class, e.message, e.backtrace.join("\n")) applog(nil, :fatal, message) end end end # do a real test to make sure events are working properly @@loaded = self.operational? end
Generated with the Darkfish Rdoc Generator 2.