Skip to content

Instantly share code, notes, and snippets.

@grantr
Created May 21, 2012 22:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grantr/2765007 to your computer and use it in GitHub Desktop.
Save grantr/2765007 to your computer and use it in GitHub Desktop.
module Zensu
module RPC
class Requester
include Celluloid::ZMQ
include RPC::Encoding
def initialize
@socket = Celluloid::ZMQ::ReqSocket.new
begin
Zensu.settings.servers.each do |server|
@socket.connect("tcp://#{server.host}:#{server.rpc_port}")
end
rescue IOError
@socket.close
raise
end
end
def finalize
@socket.close if @socket
end
def request(*args)
request = generate_request(*args)
Zensu.logger.debug "sending request: #{request}"
@socket << encode(request)
# TODO configurable timeout
response = future(:get_response).value(5)
Zensu.logger.debug "got reply: #{response}"
handle_response response
end
def get_response
RPC::Response.parse decode(@socket.read)
end
def generate_request
# override in subclasses
end
def handle_response(response)
# override in subclasses
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment