class Fluent::OutputFieldMultiFlattenJson

Public Instance Methods

emit(tag, es, chain) click to toggle source
# File lib/fluent/plugin/out_field_flatten_json.rb, line 11
def emit(tag, es, chain)
  tag = update_tag(tag)
  es.each { |time, record|
    Engine.emit(tag, time, flatten_field(record))
  }
  chain.next
end
flatten(json, prefix) click to toggle source
# File lib/fluent/plugin/out_field_flatten_json.rb, line 33
def flatten(json, prefix)
  json.keys.each do |key|
    if prefix.empty?
      full_path = key
    else
      full_path = [prefix, key].join('.')
    end
  
    if json[key].is_a?(Hash)
      value = json[key]
      json.delete key
      json.merge! flatten(value, full_path)
    else
      value = json[key]
      json.delete key
      json[full_path] = value
    end
  end
  return json
end
flatten_field(record) click to toggle source
# File lib/fluent/plugin/out_field_flatten_json.rb, line 54
def flatten_field(record)
  if !(flatten_key.nil?) and !(record.nil?) and record.key?(flatten_key)
    source = record[flatten_key].to_s
    json_field = JSON.parse(source)
    res_hash = flatten(json_field,flatten_key)
    res_hash.each do |key,val|
      record[key] = val
    end
  end
  return record
end
update_tag(tag) click to toggle source
# File lib/fluent/plugin/out_field_flatten_json.rb, line 19
def update_tag(tag)
  if remove_tag_prefix
    if remove_tag_prefix == tag
      tag = ''
    elsif tag.to_s.start_with?(remove_tag_prefix+'.')
      tag = tag[remove_tag_prefix.length+1 .. -1]
    end
  end
  if add_tag_prefix
    tag = tag && tag.length > 0 ? "#{add_tag_prefix}.#{tag}" : add_tag_prefix
  end
  return tag
end