module Libis::Ingester::Base::Status2Csv
Public Instance Methods
status2csv(item, csv_file = nil)
click to toggle source
@param [Libis::Ingester::WorkItem] item @param [String] csv_file
# File lib/libis/ingester/tasks/base/status_to_csv.rb, line 13 def status2csv(item, csv_file = nil) csv_out = csv_file ? File.open(csv_file, 'w') : StringIO.new status2csv_io(item, csv_out) return csv_out if StringIO === csv_out csv_out.close end
status2csv_io(item, csv_out = nil)
click to toggle source
@param [Libis::Ingester::WorkItem] item @param [IO] csv_out
# File lib/libis/ingester/tasks/base/status_to_csv.rb, line 22 def status2csv_io(item, csv_out = nil) csv_out ||= StringIO.new csv_out.puts CSV.generate_line(%w'Task Progress Status Started Updated Elapsed', col_sep: ';', quote_char: '"') item.reload.status_log.inject({}) do |hash, status| task = status['task'].gsub(/[^\/]*\//, '- ') task = '- ' + task unless task == 'Run' data = { status: status['status'].to_s.capitalize, start: status['created'].localtime, end: status['updated'].localtime } if status['progress'] data[:progress] = status['progress'].to_s data[:progress] += ' of ' + status['max'].to_s if status['max'] end data.delete :start if hash[task] (hash[task] ||= {}).merge! data hash end.each do |task, data| data_array = [ task, data[:progress].to_s, data[:status], data[:start].strftime('%d/%m/%Y %T'), data[:end].strftime('%d/%m/%Y %T'), time_diff_in_hours(data[:start], data[:end]), ] csv_out.puts CSV.generate_line(data_array, col_sep: ';', quote_char: '"') end csv_out.rewind csv_out end
Protected Instance Methods
time_diff_in_hours(start_time, end_time)
click to toggle source
# File lib/libis/ingester/tasks/base/status_to_csv.rb, line 60 def time_diff_in_hours(start_time, end_time) seconds = TimeDifference.between(start_time, end_time).in_seconds.round minutes = seconds / 60 seconds = seconds % 60 hours = minutes / 60 minutes = minutes % 60 "#{'%4d' % hours}:#{'%02d' % minutes}:#{'%02d' % seconds}" end