class Serfx::Utils::Handler::SerfEvent

when serf agent invokes a handler it passes the event payload through STDIN. while event metadata such as event type, name etc is passed as a set of environment variables.

SerfEvent

encapsulates such event.

Attributes

environment[R]
name[R]
payload[R]
type[R]

Public Class Methods

new(env = ENV, stdin = STDIN) click to toggle source

@param env [Hash] environment @param stdin [IO] stadard input stream for the event

# File lib/serfx/utils/handler.rb, line 33
def initialize(env = ENV, stdin = STDIN)
  @environment = {}
  @payload = nil
  @name = nil
  env.keys.select { |k| k =~ /^SERF/ }.each do | k|
    @environment[k] = env[k].strip
  end
  @type = @environment['SERF_EVENT']
  case @type
  when 'query'
    @name = @environment['SERF_QUERY_NAME']
    begin
      @payload = stdin.read_nonblock(4096).strip
    rescue Errno::EAGAIN, EOFError
    end
  when 'user'
    @name = @environment['SERF_USER_EVENT']
    begin
      @payload = stdin.read_nonblock(4096).strip
    rescue Errno::EAGAIN, EOFError
    end
  end
end