File: speedtest.rb

package info (click to toggle)
grok 1.20110708.1-4
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 2,388 kB
  • sloc: ansic: 3,469; ruby: 987; makefile: 276; sh: 124; yacc: 106
file content (58 lines) | stat: -rw-r--r-- 1,177 bytes parent folder | download | duplicates (8)
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)