1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
#!/usr/bin/env ruby
require 'rubygems'
require 'grok'
#require 'ruby-prof'
require 'pp'
#RubyProf.start
iterations = 100000
pattern = "[A-z0-9_-]*\\[[0-9]+\\]"
grok = Grok.new
grok.add_patterns_from_file("../../patterns/base")
grok.compile("%{COMBINEDAPACHELOG}")
#rubyre = Regexp.new("(?<foo>#{pattern})")
#rubyre = Regexp.new(pattern)
matches = { :grok => 0, :rubyre => 0 }
failures = { :grok => 0, :rubyre => 0 }
def time(iterations, &block)
start = Time.now
file = File.open("/b/logs/access")
data = (1 .. iterations).collect { file.readline() }
data.each do |line|
block.call(line)
end
return Time.now - start
end
groktime = time(iterations) do |line|
m = grok.match(line)
if m
matches[:grok] += 1
m.captures["FOO"]
else
#puts line
failures[:grok] +=1
end
end
#rubyretime = time(iterations) do |line|
#m = rubyre.match(line)
#if m
#matches[:rubyre] += 1
#m["foo"]
#end
#end
puts "Grok: #{matches[:grok] / groktime}"
puts matches.inspect
puts failures.inspect
#puts "rubyre: #{rubyretime}"
#puts matches.inspect
#result = RubyProf.stop
#printer = RubyProf::FlatPrinter.new(result)
#printer.print(STDOUT, 0)
|