class NewRelicMetricsParser

Public Class Methods

new(metric_prefix, router, tag) click to toggle source
# File lib/fluent/plugin/newrelic_metrics_parser.rb, line 6
def initialize(metric_prefix, router, tag)
  @metric_prefix = metric_prefix
  @router = router
  @tag = tag
end

Public Instance Methods

format_data(cleaned_data = [], prefix = '', separator = '') click to toggle source
# File lib/fluent/plugin/newrelic_metrics_parser.rb, line 12
def format_data(cleaned_data = [], prefix = '', separator = '')
  hash_data_array = []
  data_hash = {}
  data_array = []
  cleaned_data.each do |interim_data|
    metrics_hash = {}
    if interim_data =~ /{/ && interim_data =~ /}/
      attributes = {}
      metric_name, additional_dims, metric_val_and_time = interim_data.match(/(.*){(.*)}(.*)/i).captures
      if additional_dims =~ /,/
        additional_dims.split(/,/).map do |interim_data|
          attributes[interim_data.split(/=/)[0]] = interim_data.split(/=/)[1].gsub(/"/, '') if interim_data =~ /=/
        end
      else
        attribute_name, attribute_value = additional_dims.split('=')
        attributes[attribute_name] = attribute_value.delete_prefix('"').delete_suffix('"')
      end
      if metric_val_and_time =~ / /
        metrics_hash['name'] = prefix + separator + metric_name
        metrics_hash['value'] =
            metric_val_and_time.strip.split[0] =~ /^\S*\.\S*$/ ? metric_val_and_time.strip.split[0].to_f : metric_val_and_time.strip.split[0].to_i
        metrics_hash['timestamp'] = metric_val_and_time.strip.split[1].to_i
        metrics_hash['attributes'] = attributes
      end
    else
      metrics_hash['name'], metrics_hash['value'], metrics_hash['timestamp'] = interim_data.split
      metrics_hash['name'] = prefix + separator + metrics_hash['name']
      metrics_hash['value'] =
          metrics_hash['value'] =~ /^\S*\.\S*$/ ? metrics_hash['value'].to_f : metrics_hash['value'].to_i
      metrics_hash['timestamp'] = metrics_hash['timestamp'].to_i
    end
    data_array << metrics_hash
  end
  data_hash["metrics"] = data_array
  hash_data_array.push(data_hash)
  hash_data_array
end