class LogStash::Outputs::ThetaPoint

This is most useful so you can use logstash to parse and structure your logs and ship structured, json events to ThetaPoint.

Public Instance Methods

multi_receive(events) click to toggle source
# File lib/logstash/outputs/thetapoint.rb, line 62
def multi_receive(events)
  @logger.debug("multi_receive(#{events.length})")

  send_data(events.to_json)
end
receive(event) click to toggle source
# File lib/logstash/outputs/thetapoint.rb, line 56
def receive(event)
  @logger.debug("receive(#{event})")

  send_data(event.to_json)
end
register() click to toggle source
# File lib/logstash/outputs/thetapoint.rb, line 51
def register
  @logger.debug "Initializing ThetaPoint Output", @config
end
send_data(data) click to toggle source
# File lib/logstash/outputs/thetapoint.rb, line 69
def send_data(data)
  @logger.debug("send_data(#{data.length})")

  uri = "#{@proto}://#{@host}"
  post_data = data

  # Comress data
  if @compress
    post_data = Zlib::Deflate.deflate(data, Zlib::BEST_COMPRESSION)
    uri << "/zbulk/#{@key}"
  else
    uri << "/#{@key}"
  end

  @logger.debug("URI: #{uri}")
  url = URI.parse(uri)

  http = Net::HTTP::Proxy(@proxy_host,
    @proxy_port,
    @proxy_user,
    @proxy_password.value).new(url.host, url.port)

  if url.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end

  request = Net::HTTP::Post.new(url.path)
  request.body = post_data

  begin
    response = http.request(request)
    @logger.debug "Response: #{response}"

    if response.is_a?(Net::HTTPSuccess)
      @logger.debug("Event send to ThetaPoint OK!")
    else
      @logger.warn("HTTP error", :error => response.error!)
    end

  rescue StandardError => e
      @logger.error("An unexpected error occurred", :exception => e.class.name, :error => e.to_s, :backtrace => e.backtrace)
  end # rescue

end