Created
November 13, 2009 18:26
-
-
Save luisbebop/234052 to your computer and use it in GitHub Desktop.
Use this script to parse Walk Server 2 log files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# http://rubular.com/regexes/11722 | |
# sudo gem install dm-core | |
# sudo gem install dm-validations | |
# sudo gem install do_sqlite3 | |
# parse walk server (www.planobe.com.br) log files and write to a database called walk_server.sqlite3 on current directory/db | |
# Using: | |
# ruby wsparser.rb walk_server2/LOGS/ | |
require 'rubygems' | |
require 'dm-core' | |
require 'dm-validations' | |
require 'csv' | |
class Terminal | |
include DataMapper::Resource | |
property :id, Serial | |
property :terminal_number, String | |
property :walk_version, String | |
property :serial_number, String | |
property :last_connected, DateTime | |
validates_is_unique :serial_number | |
end | |
def process_line(line) | |
first_frame_protocol_walk = /\A(.*?) ::\sfd \d{1,} :: Terminal (.*?) : >[-a-z0-9]*,[-a-z0-9]{14,14}(.{4}?).*<sn>(.*?)<\/sn>/i | |
if line =~ first_frame_protocol_walk | |
add_terminal(line.scan(first_frame_protocol_walk)[0]) | |
end | |
end | |
def add_terminal(params) | |
last_connected, terminal_number, walk_version, serial_number = params | |
@terminal = Terminal.first(:serial_number => serial_number) | |
if @terminal | |
@terminal.last_connected = last_connected | |
@terminal.terminal_number = terminal_number | |
@terminal.walk_version = walk_version | |
@terminal.save | |
else | |
Terminal.new( :last_connected => last_connected, | |
:terminal_number => terminal_number, | |
:walk_version => walk_version, | |
:serial_number=> serial_number).save | |
puts "Adding terminal #{serial_number} ..." | |
end | |
end | |
def init_datamapper | |
FileUtils.mkdir_p "#{Dir.pwd}/db" | |
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/db/walk_server.sqlite3") | |
DataMapper.auto_upgrade! | |
end | |
def read_directory(path) | |
num_files = Dir.glob("#{path}/*.log").size | |
task("Starting processing of #{num_files} log files") do | |
Dir.glob("#{path}/*.log").each_with_index do |file,i| | |
task("Reading log file (#{i+1}/#{num_files}): #{file}") do | |
File.readlines(file).each { |line| process_line(line) } | |
"Finished reading log file #{file}" | |
end | |
end | |
"Finished processing of #{num_files} log files" | |
end | |
end | |
def task(msg, &block) | |
puts "---> #{msg}..." | |
start = Time.now | |
result = block.call || 'done' | |
finish = Time.now | |
time = sprintf("%0.1f", finish - start) | |
puts "===> #{result} (#{time}s)" | |
result | |
end | |
def generate_csv() | |
task("Generating CSV file: walk_server.csv") do | |
CSV.open('walk_server.csv', 'w', ';') do |writer| | |
writer << ["Numero", "Versao WALK", "Numero Serial", "Data Ultima Conexao"] | |
Terminal.all.each do |t| | |
writer << [t.terminal_number,t.walk_version,t.serial_number,t.last_connected] | |
end | |
end | |
"CSV file generated: walk_server.csv" | |
end | |
end | |
init_datamapper | |
read_directory(ARGV[0]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment