module ZabbixReceiver::Worker
Constants
- ZABBIX_HEADER
Public Instance Methods
output()
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 7 def output @output ||= config[:output_class].new(logger, config) end
process(c)
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 22 def process(c) request_body = c.read request = parse(request_body) logger.debug "Request: #{request}" request_type = request['request'] case request_type when 'active checks' response_body = proxy_request(request_body) when 'sender data' output.receive_sender_data(request) count = request['data'].size response_body = format_response({ "response" => "success", "info" => "Processed #{count} Failed 0 Total #{count} Seconds spent 0.000000" }) else logger.error "Unknown request type (#{request_type})" response_body = format_response({ "response" => "success", "info" => "" }) end logger.debug "Raw response: #{response.inspect}" c.write(response_body) ensure c.close end
proxy_request(request_body)
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 54 def proxy_request(request_body) socket = TCPSocket.open( config[:proxy_to_host], config[:proxy_to_port], ) socket.write(request_body) socket.read ensure socket && socket.close end
run()
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 11 def run until @stop process(server.sock.accept) end end
stop()
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 18 def stop @stop = true end
Private Instance Methods
format_response(payload)
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 85 def format_response(payload) payload = payload.to_json ZABBIX_HEADER + [payload.bytesize].pack('q') + payload end
parse(request_body)
click to toggle source
# File lib/zabbix_receiver/worker.rb, line 67 def parse(request_body) request = StringIO.new(request_body) unless request.read(5) == ZABBIX_HEADER logger.error "Invalid Zabbix request" return end length = request.read(8).unpack('q').first body = request.read unless body.size == length logger.error "Length mismatch" return end JSON.parse(body) end