[ruby] выгрузка данных по логам ProcessMonitor
От: Jakop Россия https://wmspanel.com
Дата: 31.10.12 06:36
Оценка:
После выхода новой версии ProcessMonitor обнаружил, что теперь формат логов изменился. Вариантов выгрузки стало три XML,CSV и нативный формат тула. Решил CSV запарсировать.

у тула два параметра
1) лог в формате csv
2) директория куда пойдет output

тул удобен когда важно понять не только откуда читается, но и что

require "fileutils"

def processLog(file_name, len_offset)
  len_offset_params = len_offset.split /,/
  len    = (len_offset_params[1].split /:/)[1].gsub(/\u00A0/, "").gsub(/\s+/, "").gsub(/"/, "")
  offset = (len_offset_params[0].split /:/)[1].gsub(/\u00A0/, "").gsub(/\s+/, "").gsub(/"/, "")
  begin
    buffer = nil
    File.open file_name, 'rb' do |file|
      file.seek offset.to_i, IO::SEEK_SET
      buffer = file.read len.to_i
      $map_file.write("#{$log_file_num} #{file_name} #{offset} #{len}\n")
    end

    File.open $log_file_num.to_s, 'wb' do |file|
      file.write buffer
    end
  rescue Exception => e
    p e.class
  end
end

p "call me ruby Logfile.CSV output_dir" and exit if ARGV.length != 2

lines = nil

File.open ARGV[0], 'r:bom|utf-8' do |file|
  lines = file.readlines
end
lines.delete_at 0 # lets remove the first line

output_directory = ARGV[1]
FileUtils.mkdir(output_directory) if !File.directory?(output_directory)
Dir.chdir output_directory

$map_file = File.open "map.txt", 'w'
$map_file.write "\xEF\xBB\xBF"

$log_file_num = 0
lines.each {|line|
  params = line.split '","'
  next if !params[3].eql?('ReadFile')
  processLog params[4], params[6]
  $log_file_num+=1
}

$map_file.close
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.