Sha256: 8a3890fd86b3f74f019856311bd680bd963c358fc9aa0176ee1b0fbca8929ea6

Contents?: true

Size: 1000 Bytes

Versions: 1

Compression:

Stored size: 1000 Bytes

Contents

# encoding: utf-8
require "logstash/codecs/base"
require "logstash/namespace"
require "logstash/codecs/json"

class LogStash::Codecs::GoogleAppengine < LogStash::Codecs::Base
  config_name "google_appengine"

  public

  def register
    @json = LogStash::Codecs::JSON.new
  end

  def decode(data)
    begin
      @json.decode(data) do |json|
        if is_parse_failure(json)
          return yield json
        end
        flatten(json).each { |flattenedJson|
          yield LogStash::Event.new(flattenedJson)
        }
      end
      rescue => e
        @logger.info("Failed to process data", :error => e, :data => data)
        yield LogStash::Event.new("message" => data, "tags" => ["_googleappengineparsefailure"])
    end
  end
end


private

def is_parse_failure(event)
  event["tags"] && event["tags"].include?("_jsonparsefailure")
end

def flatten(event)
  payload = event['protoPayload']
  lines = payload['line']
  payload.delete('line')
  lines.map { |line| payload.merge(line) }
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
logstash-codec-google_appengine-1.2.0 lib/logstash/codecs/google_appengine.rb