Sha256: cca99b84a7441f14ebf2bd7aadb636dd608b563090494e9c1a4deb80e2dc7f14

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

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

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

  config_name "google_appengine"

  public
  def register
    @md5 = Digest::MD5.new
    @semaphore = Mutex.new
  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'])
    if payload['pendingTime']
      payload['pendingTimeS'] = to_number(payload['pendingTime'])
    end
    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' => get_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' => get_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

  def get_id(source)
    @semaphore.synchronize {
      @md5.hexdigest(source) #md5 isn't threadsafe :(
    }
  end

end # class LogStash::Filters::GoogleAppengine

Version data entries

1 entries across 1 versions & 1 rubygems

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