Ciao,
vorrei realizzare un parser di log in real time, ovvero il processo rimane attivo e controlla i cambiamenti i in file. Via via che al file vengono aggiunte stringhe, il processo le intercetta e fa il parsing.
Qui di seguito cio' che per ora sono riuscito a fare, il problema e' che non riesco a far coesistere i due thread di lettura e parsing (che per ora mi basta scrivano cio' che accade). Con questo codice lo script ruby esce e 'tail' rimane in esecuzione...
codice:
require 'thread'
class LogParser
def initialize(file2parse)
@@file2parse = file2parse
@queue = Queue.new
end
def fifo_build
producer = Thread.new do
IO.popen(@@file2parse) do |pipe|
pipe.sync = true
while str = pipe.gets
@queue << str
end
end
end
end
def printRes
consumer = Thread.new do
puts @queue.pop
end
end
end
parser = LogParser.new("tail -F -n 0 ~/test")
parser.fifo_build
parser.printRes