class LogStash::Filters::Metaevent

Public Instance Methods

filter(event) click to toggle source
# File lib/logstash/filters/metaevent.rb, line 20
def filter(event)
  if filter?(event)
    start_period(event)
  elsif within_period(event)
    if followed_by_tags_match(event)
      trigger(event)
    else
      @logger.debug(["metaevent", @add_tag, "ignoring (tags don't match)", event])
    end
  else
    @logger.debug(["metaevent", @add_tag, "ignoring (not in period)", event])
  end
end
flush() click to toggle source
# File lib/logstash/filters/metaevent.rb, line 34
def flush
  return if @metaevents.empty?

  new_events = @metaevents
  @metaevents = []
  new_events
end
register() click to toggle source
# File lib/logstash/filters/metaevent.rb, line 15
def register
  @logger.debug("registering")
  @metaevents = []
end

Private Instance Methods

followed_by_tags_match(event) click to toggle source
# File lib/logstash/filters/metaevent.rb, line 60
def followed_by_tags_match(event)
  (event["tags"] & @followed_by_tags).size == @followed_by_tags.size
end
start_period(event) click to toggle source
# File lib/logstash/filters/metaevent.rb, line 44
def start_period(event)
  @logger.debug(["metaevent", @add_tag, "start_period", event])
  @start_event = event
end
trigger(event) click to toggle source
# File lib/logstash/filters/metaevent.rb, line 49
def trigger(event)
  @logger.debug(["metaevent", @add_tag, "trigger", event])

  event = LogStash::Event.new
  event["source"] = Socket.gethostname
  event["tags"] = [@add_tag]

  @metaevents << event
  @start_event = nil
end
within_period(event) click to toggle source
# File lib/logstash/filters/metaevent.rb, line 64
def within_period(event)
  time_delta = event["@timestamp"] - @start_event["@timestamp"]
  time_delta >= 0 && time_delta <= @period
end