Parent

Files

Class/Module Index [+]

Quicksearch

God::EventHandler

Public Class Methods

call(pid, event, extra_data = {}) click to toggle source
# 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
deregister(pid, event) click to toggle source
# 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
event_system() click to toggle source
# File lib/god/event_handler.rb, line 11
def self.event_system
  @@handler::EVENT_SYSTEM
end
load() click to toggle source
# 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
loaded?() click to toggle source
# File lib/god/event_handler.rb, line 7
def self.loaded?
  @@loaded
end
operational?() click to toggle source
# 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
register(pid, event, &block) click to toggle source
# 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
start() click to toggle source
# 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
watching_pid?(pid) click to toggle source
# File lib/god/event_handler.rb, line 54
def self.watching_pid?(pid)
  @@actions[pid]
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.