class Fluent::DatadogOutput::DatadogHTTPClient
HTTP datadog client
Public Class Methods
new(logger, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, api_key)
click to toggle source
# File lib/fluent/plugin/out_datadog.rb, line 304 def initialize(logger, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, api_key) @logger = logger protocol = use_ssl ? "https" : "http" port = use_ssl ? ssl_port : port @uri = URI("#{protocol}://#{host}:#{port.to_s}/v1/input/#{api_key}") proxy_uri = :ENV if http_proxy proxy_uri = URI.parse(http_proxy) elsif ENV['HTTP_PROXY'] || ENV['http_proxy'] logger.info("Using HTTP proxy defined in `HTTP_PROXY`/`http_proxy` env vars") end logger.info("Starting HTTP connection to #{protocol}://#{host}:#{port.to_s} with compression " + (use_compression ? "enabled" : "disabled")) @client = Net::HTTP::Persistent.new name: "fluent-plugin-datadog-logcollector", proxy: proxy_uri @client.verify_mode = OpenSSL::SSL::VERIFY_NONE if no_ssl_validation @client.override_headers["Content-Type"] = "application/json" if use_compression @client.override_headers["Content-Encoding"] = "gzip" end if !@client.proxy_uri.nil? # Log the proxy settings as resolved by the HTTP client logger.info("Using HTTP proxy #{@client.proxy_uri.scheme}://#{@client.proxy_uri.host}:#{@client.proxy_uri.port} username: #{@client.proxy_uri.user ? "set" : "unset"}, password: #{@client.proxy_uri.password ? "set" : "unset"}") end end
Public Instance Methods
close()
click to toggle source
# File lib/fluent/plugin/out_datadog.rb, line 341 def close @client.shutdown end
send(payload)
click to toggle source
# File lib/fluent/plugin/out_datadog.rb, line 328 def send(payload) request = Net::HTTP::Post.new @uri.request_uri request.body = payload response = @client.request @uri, request res_code = response.code.to_i if res_code >= 500 raise RetryableError.new "Unable to send payload: #{res_code} #{response.message}" end if res_code >= 400 @logger.error("Unable to send payload due to client error: #{res_code} #{response.message}") end end