class LogStash::Outputs::DatadogLogs::DatadogHTTPClient

Constants

RETRYABLE_EXCEPTIONS

Public Class Methods

new(logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key) click to toggle source
# File lib/logstash/outputs/datadog_logs.rb, line 195
def initialize(logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key)
  @logger = logger
  protocol = use_ssl ? "https" : "http"
  @url = "#{protocol}://#{host}:#{port.to_s}/v1/input/#{api_key}"
  @headers = {"Content-Type" => "application/json"}
  if use_compression
    @headers["Content-Encoding"] = "gzip"
  end
  logger.info("Starting HTTP connection to #{protocol}://#{host}:#{port.to_s} with compression " + (use_compression ? "enabled" : "disabled"))
  config = {}
  config[:ssl][:verify] = :disable if no_ssl_validation
  @client = Manticore::Client.new(config)
end

Public Instance Methods

close() click to toggle source
# File lib/logstash/outputs/datadog_logs.rb, line 233
def close
  @client.close
end
retryable_exception?(exception) click to toggle source
# File lib/logstash/outputs/datadog_logs.rb, line 229
def retryable_exception?(exception)
  RETRYABLE_EXCEPTIONS.any? { |e| exception.is_a?(e) }
end
send(payload) click to toggle source
# File lib/logstash/outputs/datadog_logs.rb, line 209
def send(payload)
  begin
    response = @client.post(@url, :body => payload, :headers => @headers).call
    if response.code >= 500
      raise RetryableError.new "Unable to send payload: #{response.code} #{response.body}"
    end
    if response.code >= 400
      @logger.error("Unable to send payload due to client error: #{response.code} #{response.body}")
    end
  rescue => client_exception
    should_retry = retryable_exception?(client_exception)
    if should_retry
      raise RetryableError.new "Unable to send payload #{client_exception.message}"
    else
      raise client_exception
    end
  end

end