Sha256: e1b82de7f144332d1194b540c0706aa0e2c64a6753af9fb836c67faef530f5d5

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

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

class LogStash::Filters::GoogleAppengine < LogStash::Filters::Base

  config_name "google_appengine"

  public

  def register
  end

  def filter(event)
    return unless filter?(event)
    return unless event.get('protoPayload')

    payload = event.get('protoPayload')
    payload.delete '@type'
    payload['type'] = event.get('type')
    payload['latencyS'] = to_number(payload['latency'])
    payload['pendingTimeS'] = to_number(payload['pendingTime'])
    payload['appTimeS'] = payload['latencyS'] - payload['pendingTimeS']
    lines = payload.delete 'line'

    if lines
      lines.each_with_index { |line, i|
        yield create_event(collect_line_data(i, line, payload))
      }
    else
      yield create_event(collect_resource_request_data(payload))
    end
    event.cancel
  end

  private
  # noinspection RubyStringKeysInHashInspection
  def to_number(string)
    string ? string.delete("s").to_f : 0.0
  end

  def collect_line_data(i, line, payload)
    {
        'id' => (payload['requestId'] + i.to_s),
        'message' => line.delete('logMessage'),
        'position' => i
    }
        .merge(payload)
        .merge(line)
  end

  # noinspection RubyStringKeysInHashInspection
  def collect_resource_request_data(payload)
    {
        'id' => payload['requestId'],
        'time' => payload['endTime'],
        'position' => 0
    }
        .merge(payload)
  end

  def create_event(payload)
    new_event = LogStash::Event::new(payload)
    filter_matched(new_event)
    new_event
  end

end # class LogStash::Filters::GoogleAppengine

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
logstash-filter-google_appengine-0.121.0 lib/logstash/filters/google_appengine.rb