class Fluent::Plugin::CMetricsSplunkMetricPayloadFormatter

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/formatter_cmetrics_splunk_metric_payload.rb, line 53
def initialize
  super
  @default_host = Socket.gethostname
end

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/formatter_cmetrics_splunk_metric_payload.rb, line 58
def configure(conf)
  super

  @cmetrics_name_accessor = record_accessor_create(@cmetrics_name_key)
  @cmetrics_value_accessor = record_accessor_create(@cmetrics_value_key)
  @cmetrics_dims_accessor = record_accessor_create(@cmetrics_dims_key)
  @host_key_accessor = record_accessor_create(@host_key)
  @fields_accessors = {}
  conf.elements(name: "fields").each do |e|
    e.each_pair{|k, _v|
      e.has_key?(k) # Suppress unused warnings.
      @fields_accessors[k] = record_accessor_create(k)
    }
  end
end
format(tag, time, record) click to toggle source
# File lib/fluent/plugin/formatter_cmetrics_splunk_metric_payload.rb, line 74
def format(tag, time, record)
  host = if host = @host_key_accessor.call(record)
           host
         else
           @default_host
         end
  extra_fields = {}

  payload = {
    host: host,
    # From the API reference
    # https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector
    time: time.to_f.to_s,
    event: 'metric',
  }
  payload[:index] = @index if @index
  payload[:source] = @source if @source
  payload[:sourcetype] = @sourcetype if @sourcetype
  fields = {
    "metric_name:#{@cmetrics_name_accessor.call(record)}" => @cmetrics_value_accessor.call(record)
  }
  if dims = @cmetrics_dims_accessor.call(record)
    fields.merge!(dims)
  end
  @fields_accessors.each do |key, accessor|
    if record = accessor.call(record)
      record.each do |k, v|
        if @only_use_last_field_keys
          extra_fields[k.split(".").last] = v
        else
          extra_fields[k] = v
        end
      end
    end
    fields.merge!(extra_fields)
  end
  payload.merge!(fields)
  Yajl.dump(payload)
end