Sha256: 5e65d79acd3cabb3a98fa2b338cd1f7fd2ccf598cf4fe15ca5e524cbac1a1402

Contents?: true

Size: 1.81 KB

Versions: 1

Compression:

Stored size: 1.81 KB

Contents

require 'logger'
require 'pilfer/profile'

module Pilfer
  class Logger
    attr_reader :app_root, :logger

    def initialize(path_or_io, options = {})
      @logger = ::Logger.new(path_or_io)
      if (app_root = options[:app_root])
        app_root += '/' unless app_root[-1, 1] == '/'
        @app_root = %r{^#{Regexp.escape(app_root)}}
      end
    end

    def write(profile_data, profile_start)
      profile = Pilfer::Profile.new(profile_data, profile_start)
      print_report_banner profile_start
      profile.each do |path, data|
        print_file_banner path, data
        print_file_source_with_profile path, data
      end
    end

    private

    def print_report_banner(profile_start)
      formatted_start = profile_start.utc.strftime('%Y-%m-%d %H:%M:%S UTC')
      logger.info "Profile start=#{formatted_start}"
    end

    def print_file_banner(path, data)
      wall = data['wall_time'] / 1000.0
      cpu  = data['cpu_time']  / 1000.0
      logger.info sprintf("%s wall_time=%.1fms cpu_time=%.1fms",
                          strip_app_root(path), wall, cpu)
    end

    def print_file_source_with_profile(path, data)
      return unless File.exists?(path)
      File.readlines(path).each_with_index do |line_source, index|
        line_source  = line_source.chomp
        line_profile = data['lines'][index]
        if line_profile && line_profile['calls'] > 0
          total = line_profile['wall_time']
          logger.info sprintf("% 8.1fms (% 5d) | %s",
                              total/1000.0,
                              line_profile['calls'],
                              line_source)
        else
          logger.info sprintf("                   | %s", line_source)
        end
      end
    end

    def strip_app_root(path)
      return path unless app_root
      path.gsub(app_root, '')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pilfer-0.0.1.pre4 lib/pilfer/logger.rb