60 lines
1.3 KiB
Ruby
Executable File
60 lines
1.3 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require 'date'
|
|
require 'zlib'
|
|
require 'pathname'
|
|
|
|
class Visit
|
|
attr_accessor :page, :date
|
|
|
|
def initialize(match_data)
|
|
@date = Date.iso8601 match_data[1]
|
|
@page = match_data[2].strip
|
|
end
|
|
end
|
|
|
|
def numeric_extension(filename)
|
|
if filename.extname == '.gz'
|
|
filename.sub_ext('').extname[1..-1].to_i
|
|
elsif filename.extname == '.log'
|
|
0
|
|
else
|
|
filename.extname[1..-1].to_i
|
|
end
|
|
end
|
|
|
|
entries = Dir.new('log')
|
|
.entries
|
|
.reject { |entry| entry.start_with? '.' }
|
|
.map { |entry| Pathname.new entry }
|
|
.sort { |a, b| numeric_extension(b) <=> numeric_extension(a) }
|
|
|
|
def read_lines(stream)
|
|
if ARGV.length > 0
|
|
regex = /([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}).+#{ARGV[0]}(.+) /
|
|
else
|
|
regex = /([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2})(.+) /
|
|
end
|
|
|
|
stream
|
|
.map { |line| line.match regex }
|
|
.reject { |line| line.nil? }
|
|
.map { |match_data| Visit.new match_data }
|
|
end
|
|
|
|
lines_in_all_files = entries.flat_map do |log|
|
|
log_path = Pathname.new('log') + log
|
|
|
|
if log_path.extname == '.gz'
|
|
File.open log_path.to_s do |file|
|
|
read_lines Zlib::GzipReader.new(file).readlines
|
|
end
|
|
else
|
|
read_lines File.readlines(log_path.to_s)
|
|
end
|
|
end
|
|
|
|
lines_in_all_files.each do |visit|
|
|
puts "#{visit.date.strftime} (#{visit.page})"
|
|
end
|