Sha256: 7bfdf99c1eddb6cae6854b2b7e96499db2eece3caaed85e9b25d62a971d5cf0f

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

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

class LogStash::Filters::Duration < LogStash::Filters::Base

  config_name "duration"

  config :iso, :validate => :string, :default => "", :required => true

  public
  def register
  end # def register

  public
  def filter(event)
    if @iso
      value = event.get(@iso)
      if not valid(value)
        return event.set("duration", 0)
      end
      days = value[/([0-9]+)D/, 1].to_i
      hours = value[/([0-9]+)H/, 1].to_i
      minutes = value[/([0-9]+)M/, 1].to_i
      seconds = value[/([0-9]+)S/, 1].to_i
      duration = total_seconds(days, hours, minutes, seconds)
      if value[/^-/]
        duration *= -1
      end

      event.set("duration", duration)
    end

    filter_matched(event)
  end # def filter

  private
  def total_seconds(days=0, hours=0, minutes=0, seconds=0)
    seconds + 60 * (minutes + 60 * (hours + 24 * days))
  end # def total_seconds

  private
  def valid(value)
    value[/^(-)?(P([0-9]+D)+(T([0-9]+H)?([0-9]+M)?([0-9]+S)?([0-9]+MS)?)?$|P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+S)?([0-9]+MS)?)+$)/]
  end

end # class LogStash::Filters::Duration

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
logstash-filter-duration-0.1.1 lib/logstash/filters/duration.rb
logstash-filter-duration-0.1.0 lib/logstash/filters/duration.rb