У меня есть журнал apache. Я ищу фильтр по кодам HTTP.Я сделал математику вручную, так как моя программа ruby не возвращает правильные числа.Я также планирую использовать этот же код, чтобы, возможно, выводить число посещений по IP-адресам и посещенным URL-адресам, но только если я не смогу заставить свой код работать.
вот что я получил
class Numeric
def percent_of(n)
self.to_f / n.to_f * 100.0
end
end
stat_hash = Hash.new(0)
url_hash = Hash.new(0)
ip_hash = Hash.new(0)
#lineArray= Array.new()
file = File.open("./test_log", 'r')
total = 0
#load hash
file.each_line do |line|
total += 1
lnarr = line.chomp.split #Split is messed up needs to split to array first i think then hash from array similar to Lab 10
#Array needs to split to {IP,Date/time, URL, Status, size}
#http://httpd.apache.org/docs/1.3/logs.html
stat_hash[lnarr[-2]] += 1
url_hash[lnarr[-4]] += 1
ip_hash[lnarr[0]] +=1
end
for i in 0..stat_hash.length-1 do
percent = stat_hash.percent_of(total) #current equation will not work. Hash does populate with the http status do but math
#does not output any average. returns undefined method but method is defined at top.
status = stat_hash[i]
end
puts total
#puts (stat_hash[i]/total)
stat_hash.sort.each { |status| puts "#{status}:"+ percent}
Журнал испытаний, с которыми я работаю, можно найти здесь: http://dl.dropbox.com/u/71927/test_log
Я сделал это вручную и ожидаю
200:90%
301:8%
401:1%
404:1%
но я получаю
200: 97%
301: 1%
304: 8%
403: 2%
, что просто их количество раз, когда они происходят.если вы сложите их 108, то в файле журнала будет 108 строк с кодами состояния.
РЕДАКТИРОВАТЬ: В качестве продолжения этого вопроса проценты округляются по мере необходимостиони использовали функцию потолка типа данных с плавающей точкой с помощью '.ceil' и получили мои данные для анализа определенных данных, записав в командной строке параметры с помощью optparser