Sha256: 2549f4b97bc29a33e244360391db29bde9c65a28d352a22576ec3cc55eaa2724

Contents?: true

Size: 1.03 KB

Versions: 38

Compression:

Stored size: 1.03 KB

Contents

class GrokConverter
  def load_patterns(dir = nil)
    @patterns = {}
    dir ||= Rails.root.join("vendor/patterns")
    Dir.glob("#{dir}/*").each do |file|
      File.read(file).split("\n").each do |line|
        line.strip!
        next if line == ""
        next if line.start_with?("#")
        name, pattern = line.split(/\s+/, 2)
        next unless pattern
        @patterns[name] = pattern
      end
    end
  end

  def convert_to_regexp(pattern)
    limit = 100
    expanded = pattern.dup
    while m = expanded.match(/%{(.*?)(?::(.*?))?}/) # %{key:name} or #{key}
      all, key, name = *m
      if name
        expanded = expanded.gsub(all, "(?<#{name}>#{@patterns[key]})")
      else
        expanded = expanded.gsub(all, @patterns[key])
      end
      limit -= 1
      break if limit == 0
    end
    Regexp.new expanded
  end
end

=begin
  g = GrokConverter.new
  g.load_patterns("vendor/patterns")
  p g.convert_to_regexp("%{USERNAME:user} %{NOT_EXISTS:foo} %{USER} aaaa")
  # => /(?<user>[a-zA-Z0-9._-]+) (?<foo>) [a-zA-Z0-9._-]+ aaaa/
=end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
fluentd-ui-1.0.0 lib/grok_converter.rb
fluentd-ui-1.0.0.beta.1 lib/grok_converter.rb
fluentd-ui-1.0.0.alpha.3 lib/grok_converter.rb
fluentd-ui-1.0.0.alpha.2 lib/grok_converter.rb
fluentd-ui-1.0.0.alpha.1 lib/grok_converter.rb
fluentd-ui-0.4.5 lib/grok_converter.rb
fluentd-ui-0.4.4 lib/grok_converter.rb
fluentd-ui-0.4.3 lib/grok_converter.rb
fluentd-ui-0.4.2 lib/grok_converter.rb
fluentd-ui-0.4.1 lib/grok_converter.rb
fluentd-ui-0.4.0 lib/grok_converter.rb
fluentd-ui-0.3.21 lib/grok_converter.rb
fluentd-ui-0.3.20 lib/grok_converter.rb
fluentd-ui-0.3.19 lib/grok_converter.rb
fluentd-ui-0.3.18 lib/grok_converter.rb
fluentd-ui-0.3.17 lib/grok_converter.rb
fluentd-ui-0.3.16 lib/grok_converter.rb
fluentd-ui-0.3.15 lib/grok_converter.rb
fluentd-ui-0.3.14 lib/grok_converter.rb
fluentd-ui-0.3.13 lib/grok_converter.rb