class LogStash::Outputs::DatadogMetrics

Public Instance Methods

flush(events, final=false) click to toggle source

public

# File lib/logstash/outputs/datadog_metrics.rb, line 91
def flush(events, final=false)
  dd_series = Hash.new
  dd_series['series'] = Array(events).flatten

  request = Net::HTTP::Post.new("#{@uri.path}?api_key=#{@api_key}")

  begin
    request.body = series_to_json(dd_series)
    request.add_field("Content-Type", 'application/json')
    response = @client.request(request)
    @logger.info("DD convo", :request => request.inspect, :response => response.inspect)
    raise unless response.code == '202'
  rescue Exception => e
    @logger.warn("Unhandled exception", :request => request.inspect, :response => response.inspect, :exception => e.inspect)
  end
end
receive(event) click to toggle source

public

# File lib/logstash/outputs/datadog_metrics.rb, line 68
def receive(event)
  return unless @metric_name && @metric_value && @metric_type
  return unless ["gauge", "counter"].include? event.sprintf(@metric_type)

  dd_metrics = Hash.new
  dd_metrics['metric'] = event.sprintf(@metric_name)
  dd_metrics['points'] = [[to_epoch(event.timestamp), event.sprintf(@metric_value).to_f]]
  dd_metrics['type'] = event.sprintf(@metric_type)
  dd_metrics['host'] = event.sprintf(@host)
  dd_metrics['device'] = event.sprintf(@device)

  if @dd_tags
    tagz = @dd_tags.collect {|x| event.sprintf(x) }
  else
    tagz = event.get("tags")
  end
  dd_metrics['tags'] = tagz if tagz

  @logger.info("Queueing event", :event => dd_metrics)
  buffer_receive(dd_metrics)
end
register() click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 50
def register
  require "net/https"
  require "uri"

  @url = "https://app.datadoghq.com/api/v1/series"
  @uri = URI.parse(@url)
  @client = Net::HTTP.new(@uri.host, @uri.port)
  @client.use_ssl = true
  @client.verify_mode = OpenSSL::SSL::VERIFY_NONE
  @logger.debug("Client", :client => @client.inspect)
  buffer_initialize(
    :max_items => @queue_size,
    :max_interval => @timeframe,
    :logger => @logger
  )
end

Private Instance Methods

series_to_json(series) click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 110
def series_to_json(series)
  LogStash::Json.dump(series)
end
to_epoch(t) click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 114
def to_epoch(t)
  Integer(t.is_a?(String) ? Time.parse(t) : t)
end