Your IP : 216.73.216.220


Current Path : /opt/microsoft/omsagent/plugin/
Upload File :
Current File : //opt/microsoft/omsagent/plugin/flattenjson_lib.rb

module OMS
  require_relative 'omslog'

  class FlattenJson
    # select element(s) of a Json object.
    # split the element if it's an array
    # flatten the inner Json objects to single layer
    def select_split_flatten(time, record, select, es)
      begin
        data = eval(select)
      rescue => e
        OMS::Log.error_once("Invalid select: #{select} #{e}");
      end

      if data.instance_of?(Array)
        data.each { |d| es.add(time, flatten(d)) }
      else
        es.add(time, flatten(data))
      end
    end

    def flatten(data, parent_prefix=nil)
      res = {}

      if !data.nil?
        data.each_with_index do |elem, i|
          if elem.is_a?(Array)
            k, v = elem
          else
            k, v = i, elem
          end

          key = parent_prefix ? "#{parent_prefix}_#{k}" : k

          if v.is_a? Enumerable
            res.merge!(flatten(v, key))
          else
            res[key] = v
          end
        end
      end

      return res
    end
  end
end