module Peek::Rblineprof::ControllerHelpers
Protected Instance Methods
inject_rblineprof() { || ... }
click to toggle source
# File lib/peek/rblineprof/controller_helpers.rb, line 61 def inject_rblineprof ret = nil profile = lineprof(rblineprof_profiler_regex) do ret = yield end if response.content_type =~ %r|text/html| sort = params[:lineprofiler_sort] mode = params[:lineprofiler_mode] || 'cpu' min = (params[:lineprofiler_min] || 5).to_i * 1000 summary = params[:lineprofiler_summary] # Sort each file by the longest calculated time per_file = profile.map do |file, lines| total, child, excl, total_cpu, child_cpu, excl_cpu = lines[0] wall = summary == 'exclusive' ? excl : total cpu = summary == 'exclusive' ? excl_cpu : total_cpu idle = summary == 'exclusive' ? (excl - excl_cpu) : (total - total_cpu) [ file, lines, wall, cpu, idle, sort == 'idle' ? idle : sort == 'cpu' ? cpu : wall ] end.sort_by{ |a,b,c,d,e,f| -f } output = '' per_file.each do |file_name, lines, file_wall, file_cpu, file_idle, file_sort| output << "<div class='peek-rblineprof-file'><div class='heading'>" show_src = file_sort > min tmpl = show_src ? "<a href='#' class='js-lineprof-file'>%s</a>" : "%s" if mode == 'cpu' output << sprintf("<span class='duration'>% 8.1fms + % 8.1fms</span> #{tmpl}", file_cpu / 1000.0, file_idle / 1000.0, file_name.sub(Rails.root.to_s + '/', '')) else output << sprintf("<span class='duration'>% 8.1fms</span> #{tmpl}", file_wall/1000.0, file_name.sub(Rails.root.to_s + '/', '')) end output << "</div>" # .heading next unless show_src output << "<div class='data'>" code = [] times = [] File.readlines(file_name).each_with_index do |line, i| code << line wall, cpu, calls = lines[i + 1] if calls && calls > 0 if mode == 'cpu' idle = wall - cpu times << sprintf("% 8.1fms + % 8.1fms (% 5d)", cpu / 1000.0, idle / 1000.0, calls) else times << sprintf("% 8.1fms (% 5d)", wall / 1000.0, calls) end else times << ' ' end end output << "<pre class='duration'>#{times.join("\n")}</pre>" output << "<div class='code'>#{pygmentize(file_name, code.join, 'ruby')}</div>" output << "</div></div>" # .data then .peek-rblineprof-file end response.body += "<div class='peek-rblineprof-modal' id='line-profile'>#{output}</div>".html_safe end ret end
lexer_for_filename(file_name)
click to toggle source
# File lib/peek/rblineprof/controller_helpers.rb, line 36 def lexer_for_filename(file_name) case file_name when /\.rb$/ then 'ruby' when /\.erb$/ then 'erb' end end
pygmentize(file_name, code, lexer = nil)
click to toggle source
# File lib/peek/rblineprof/controller_helpers.rb, line 24 def pygmentize(file_name, code, lexer = nil) if pygmentize? && lexer.present? Pygments.highlight(code, :lexer => lexer_for_filename(file_name)) else "<pre>#{Rack::Utils.escape_html(code)}</pre>" end end
pygmentize?()
click to toggle source
# File lib/peek/rblineprof/controller_helpers.rb, line 20 def pygmentize? defined?(Pygments) end
rblineprof_enabled?()
click to toggle source
# File lib/peek/rblineprof/controller_helpers.rb, line 32 def rblineprof_enabled? params[:lineprofiler].present? end
rblineprof_profiler_regex()
click to toggle source
# File lib/peek/rblineprof/controller_helpers.rb, line 43 def rblineprof_profiler_regex escaped_rails_root = Regexp.escape(Rails.root.to_s) case params[:lineprofiler] when 'app' %r{^#{escaped_rails_root}/(app|lib)} when 'views' %r{^#{escaped_rails_root}/app/view} when 'gems' %r|^#{escaped_rails_root}/vendor/gems| when 'all' %r|^#{escaped_rails_root}| when 'stdlib' %r|^#{Regexp.escape RbConfig::CONFIG['rubylibdir']}| else %r{^#{escaped_rails_root}/(app|config|lib|vendor/plugin)} end end