blob: 0e9060f8cbea1fbaf7d2b40fff3106edecf4d47e [file] [log] [blame]
#!/usr/bin/env ruby
# Copyright 2010 Thomas Stromberg - All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
#
# lasthit, part of iExploder
#
# Shows statistics about recent agents that have tested with iExploder.
# It takes all or part of an apache logfile via stdin, and outputs a list
# of all the agents who tested within that section, what their last test
# was, and how many tests they have done.
# The usefulness is finding out where a browser crashed.
require 'cgi'
hostHash = Hash.new
if (ARGV[0])
file = File.open(ARGV[0])
else
puts "No filename specified, waiting for data via stdin..."
file = $stdin
end
last_index = nil
file.readlines.each_with_index { |line, index|
# filter out mime hits as they produce a lot of odd user agents
next if line =~ /&m=/
if (line =~ /([\w\.]+) - - .*iexploder.cgi\?(.*?)&b=([\w\%-\.+]+)/)
host = $1
test_url = $2
agent = $3
if (! hostHash[host])
hostHash[host] = Hash.new
end
if (! hostHash[host][agent])
hostHash[host][agent] = Hash.new
hostHash[host][agent]['total'] = 0
end
hostHash[host][agent]['last'] = test_url
hostHash[host][agent]['total'] = hostHash[host][agent]['total'] + 1
hostHash[host][agent]['last_line'] = index
end
last_index = index
}
printf("%-14.14s | %-25.25s | %6.6s | %7.7s | %s\n",
"Host", "Test URL", "Total", "LineAgo", "Agent")
puts "-" * 78
hostHash.each_key { |host|
hostHash[host].each_key { |agent|
next if agent.length < 8
display_agent = CGI::unescape(agent).sub('U; ', '')
printf("%-14.14s | %-25.25s | %6.6s | %7.7s | %s\n",
host, hostHash[host][agent]['last'],
hostHash[host][agent]['total'],
hostHash[host][agent]['last_line'] - last_index,
display_agent);
}
}