class LogStash::Outputs::Http
Public Instance Methods
encode(hash)
click to toggle source
# File lib/logstash/outputs/http.rb, line 137 def encode(hash) return hash.collect do |key, value| CGI.escape(key) + "=" + CGI.escape(value) end.join("&") end
receive(event)
click to toggle source
# File lib/logstash/outputs/http.rb, line 85 def receive(event) return unless output?(event) if @mapping evt = Hash.new @mapping.each do |k,v| evt[k] = event.sprintf(v) end else evt = event.to_hash end case @http_method when "put" request = @agent.put(event.sprintf(@url)) when "post" request = @agent.post(event.sprintf(@url)) else @logger.error("Unknown verb:", :verb => @http_method) end if @headers @headers.each do |k,v| request.headers[k] = event.sprintf(v) end end request["Content-Type"] = @content_type begin if @format == "json" request.body = evt.to_json elsif @format == "message" request.body = event.sprintf(@message) else request.body = encode(evt) end #puts "#{request.port} / #{request.protocol}" #puts request #puts #puts request.body response = @agent.execute(request) # Consume body to let this connection be reused rbody = "" response.read_body { |c| rbody << c } #puts rbody rescue Exception => e @logger.warn("Unhandled exception", :request => request, :response => response, :exception => e, :stacktrace => e.backtrace) end end
register()
click to toggle source
# File lib/logstash/outputs/http.rb, line 59 def register require "ftw" require "uri" @agent = FTW::Agent.new # TODO(sissel): SSL verify mode? if @content_type.nil? case @format when "form" ; @content_type = "application/x-www-form-urlencoded" when "json" ; @content_type = "application/json" end end if @format == "message" if @message.nil? raise "message must be set if message format is used" end if @content_type.nil? raise "content_type must be set if message format is used" end unless @mapping.nil? @logger.warn "mapping is not supported and will be ignored if message format is used" end end end