|
1 #!/usr/bin/ruby |
|
2 # lasthit, part of iExploder |
|
3 # |
|
4 # Shows statistics about recent agents that have tested with iExploder. |
|
5 # It takes all or part of an apache logfile via stdin, and outputs a list |
|
6 # of all the agents who tested within that section, what their last test |
|
7 # was, and how many tests they have done. |
|
8 |
|
9 # The usefulness is finding out where a browser crashed. |
|
10 |
|
11 |
|
12 hostHash = Hash.new |
|
13 |
|
14 if (ARGV[0]) |
|
15 file = File.open(ARGV[0]) |
|
16 else |
|
17 file = $stdin |
|
18 end |
|
19 |
|
20 file.readlines.each { |line| |
|
21 if (line =~ /^(.*?) .*iexploder.*?test=(\d+).* HTTP.* \"(.*?)\"$/) |
|
22 host = $1 |
|
23 testnum = $2 |
|
24 agent = $3 |
|
25 if (! hostHash[host]) |
|
26 hostHash[host] = Hash.new |
|
27 end |
|
28 if (! hostHash[host][agent]) |
|
29 hostHash[host][agent] = Hash.new |
|
30 hostHash[host][agent]['total'] = 0 |
|
31 end |
|
32 |
|
33 hostHash[host][agent]['last'] = testnum |
|
34 if line =~ /subtest=(\d+)/ |
|
35 hostHash[host][agent]['subtest'] = $1 |
|
36 else |
|
37 hostHash[host][agent]['subtest'] = '' |
|
38 end |
|
39 hostHash[host][agent]['total'] = hostHash[host][agent]['total'] + 1 |
|
40 end |
|
41 } |
|
42 |
|
43 printf("%14.14s | %8.8s | %3.3s | %8.8s | %s\n", |
|
44 "IP", "Test", "SubTest", "Total", "Agent") |
|
45 puts "---------------------------------------------------------------------------" |
|
46 hostHash.each_key { |host| |
|
47 |
|
48 hostHash[host].each_key { |agent| |
|
49 printf("%14.14s | %8.8s | %3.3s | %8.8s | %s\n", |
|
50 host, hostHash[host][agent]['last'], hostHash[host][agent]['subtest'], hostHash[host][agent]['total'], agent); |
|
51 } |
|
52 } |
|
53 |