require 'semantic_logger' require 'set' require 'file-tail' log = SemanticLogger['main'] filename = File.expand_path('development.log') SemanticLogger.add_appender(file_name: filename) SemanticLogger.add_appender(io: $stderr) buffer = StringIO.new SemanticLogger.add_appender(io: buffer) # , formatter: :json) tail_lines = 3 log.info 'start' # puts buffer.string start = Time.now last = start old = -1 duration = 0 puts start set = Set.new array = [] top = 2 ** 23 (0...top).each do |i| set << i # array[i] = i now = Time.now elapsed = now - last next unless (elapsed > 5) && (now.sec % 5).zero? stats = "#{now}: #{format('%.6f', (i / 1e6))}" \ ", #{format('%.2f', elapsed)}s" \ ", #{format('%.2f', (now - start))}s" \ ", #{format('%.6f', ((i - old) / 1e6))}" puts stats log.info(stats) # puts buffer.string last = now old = i # end # rubocop: disable Style/Next if (now - start > 1800) || (i == top - 1) duration = now - start stats = "#{now}: #{format('%.6f', (i / 1e6))}" \ ", #{format('%.2f', duration)}s" \ ", #{format('%.6f', set.size / 1e6)}" \ ", #{format('%.6f', array.size / 1e6)}" puts stats log.info stats # puts buffer.string break end # rubocop: enable Style/Next end now = Time.now # last = now # result = set.classify do |i| # here = Time.now # if (here - last) > 5 && (here.sec % 5).zero? # last = here # puts "#{here}: #{i}" # end # i % 10 # end # result.keys.each do |key| # puts "#{key}: #{format('%.6f', result[key].size / 1e6)}" # end puts format('%.6f', (set.size / 1e6)), format('%.6f', (array.size / 1e6)) puts format('%.2fs', duration) puts format('%.2fs', (Time.now - now)) puts format('%.2fs', (Time.now - start)) log.info( 'finish', set_size: set.size / 1e6, load: duration, analyze: Time.now - now, total: Time.now - start ) SemanticLogger.flush puts '*****FILE*****' File.open(filename) do |a_log| a_log.extend(File::Tail) puts a_log.backward(tail_lines).tail(tail_lines) end puts '*****BUFFER*****' puts buffer.string # sleep(1) puts '*****FILE*****' File.open(filename) do |a_log| a_log.extend(File::Tail) puts a_log.backward(tail_lines).tail(tail_lines) end