Skip to content

Commit

Permalink
Highlight caller lines within Merb.root (and not in gems/)
Browse files Browse the repository at this point in the history
Link to Proc filters
  • Loading branch information
Bruce Williams committed Sep 18, 2008
1 parent ece7231 commit aef6790
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 46 deletions.
28 changes: 24 additions & 4 deletions lib/fiveruns_tuneup_core.rb
Expand Up @@ -44,14 +44,34 @@ def self.format_caller(trace)
'<pre>%s</pre>' % linked_lines.join("\n")
end

def self.strip_root(text)
pattern = /^#{Regexp.quote Merb.root}\/?/o
if text =~ pattern
result = text.sub(pattern, '')
in_app = result !~ /^gems\//
[in_app, result]
else
[false, text]
end
end

def self.editor_link_line(line)
filename, number, extra = line.match(/^(.+?):(\d+):in\b(.*?)/)[1, 2]
filename, number, extra = line.match(/^(.+?):(\d+)(?::in\b(.*?))?/)[1, 2]
in_app, line = strip_root(line)
name = if line.size > 87
"&hellip;#{CGI.escapeHTML line.sub(/^.*?(.{40})$/, '\1')}"
else
"&hellip;#{CGI.escapeHTML line.sub(/^.*?(.{84})$/, '\1')}"
else
line
end
name.sub!(/([^\/\\]+\.rb:.*)$/, '<span>\1</span>')
name = if in_app
if name =~ /`/
name.sub(/^(.*?)\s+`(.*?)'$/, %q(<span class='tuneup-app-line'>\1</span> `<b class='tuneup-app-line'>\2</b>'))
else
%(<span class='tuneup-app-line'>#{name}</span>)
end
else
name.sub(/([^\/\\]+\.\S+:\d+:in)\s+`(.*?)'$/, %q(\1 `<b>\2</b>'))
end
%(<a title='%s' href='txmt://open/?url=file://%s&line=%d'>%s</a>%s) % [CGI.escapeHTML(line), filename, number, name, extra]
end

Expand Down
97 changes: 57 additions & 40 deletions lib/fiveruns_tuneup_merb/instrumentation.rb
Expand Up @@ -3,6 +3,52 @@
module FiverunsTuneupMerb

module Instrumentation

def self.pretty(value)
CGI.escapeHTML(PP.pp(value, ''))
end

def self.format_filters(filters)
sets = filters.map do |filter, opts|
content = if filter.is_a?(Proc)
where = filter.inspect[/@(.+)>$/, 1]
"Proc at %s with options %s" % [Fiveruns::Tuneup.editor_link_line(where), pretty(opts)]
else
"%s with options %s" % [pretty(filter), pretty(opts)]
end
%(<li>%s</li>) % content
end
"<ul>%s</ul>" % sets.join("\n")
end

def self.format_sql(query, statement, attributes = nil)
values = query.bind_values + (attributes ? attributes.values : [])
[statement, "<b>Values:</b> " + CGI.escapeHTML(values.inspect)].join("<br/>")
end

def self.attrs_for(query)
[
[ :repository, query.repository.name ],
[ :model, query.model ],
[ :fields, query.fields ],
[ :links, query.links ],
[ :conditions, query.conditions ],
[ :order, query.order ],
[ :limit, query.limit ],
[ :offset, query.offset ],
[ :reload, query.reload? ],
[ :unique, query.unique? ]
]
end

def self.format_query(query)
rows = attrs_for(query).map do |set|
%(<tr><th>%s</th><td><pre>%s</pre></td></tr>) % set.map { |item|
pretty item
}
end
"<table>%s</table>" % rows.join
end

module Merb

Expand Down Expand Up @@ -34,7 +80,9 @@ def _call_filters(filters)
if filters.empty?
super
else
Fiveruns::Tuneup.step("Called filters (#{filters.size})", :controller) { super }
Fiveruns::Tuneup.step("Filters (#{filters.size})", :controller,
"Filters Called" => FiverunsTuneupMerb::Instrumentation.format_filters(filters)
) { super }
end
end

Expand Down Expand Up @@ -72,37 +120,6 @@ def dispatch_action(controller, action, *args, &block)
end

module DataMapper

def self.pretty(value)
CGI.escapeHTML(PP.pp(value, ''))
end

def self.attrs_for(query)
[
[ :repository, query.repository.name ],
[ :model, query.model ],
[ :fields, query.fields ],
[ :links, query.links ],
[ :conditions, query.conditions ],
[ :order, query.order ],
[ :limit, query.limit ],
[ :offset, query.offset ],
[ :reload, query.reload? ],
[ :unique, query.unique? ]
]
end

def self.format_sql(query, statement, attributes = nil)
values = query.bind_values + (attributes ? attributes.values : [])
[statement, "<b>Values:</b> " + CGI.escapeHTML(values.inspect)].join("<br/>")
end

def self.format_query(query)
rows = attrs_for(query).map do |set|
%(<tr><th>%s</th><td><pre>%s</pre></td></tr>) % set.map { |item| pretty item }
end
"<table>%s</table>" % rows.join
end

module Repository

Expand All @@ -115,35 +132,35 @@ module Ext
def read_many(query)
Fiveruns::Tuneup.step("DM Read Many", :model,
'Query' => [
FiverunsTuneupMerb::Instrumentation::DataMapper.format_sql(query, adapter.send(:read_statement, query)),
{'Details' => FiverunsTuneupMerb::Instrumentation::DataMapper.format_query(query)}
FiverunsTuneupMerb::Instrumentation.format_sql(query, adapter.send(:read_statement, query)),
{'Details' => FiverunsTuneupMerb::Instrumentation.format_query(query)}
]
) { super }
end

def read_one(query)
Fiveruns::Tuneup.step("DM Read One ", :model,
'Query' => [
FiverunsTuneupMerb::Instrumentation::DataMapper.format_sql(query, adapter.send(:read_statement, query)),
{'Details' => FiverunsTuneupMerb::Instrumentation::DataMapper.format_query(query)}
FiverunsTuneupMerb::Instrumentation.format_sql(query, adapter.send(:read_statement, query)),
{'Details' => FiverunsTuneupMerb::Instrumentation.format_query(query)}
]
) { super }
end

def update(attributes, query)
Fiveruns::Tuneup.step("DM Update", :model,
'Query' => [
FiverunsTuneupMerb::Instrumentation::DataMapper.format_sql(query, adapter.send(:update_statement, query), attributes),
{'Details' => FiverunsTuneupMerb::Instrumentation::DataMapper.format_query(query)}
FiverunsTuneupMerb::Instrumentation.format_sql(query, adapter.send(:update_statement, query), attributes),
{'Details' => FiverunsTuneupMerb::Instrumentation.format_query(query)}
]
) { super }
end

def delete(query)
Fiveruns::Tuneup.step("DM Delete", :model,
'Query' => [
FiverunsTuneupMerb::Instrumentation::DataMapper.format_sql(query, adapter.send(:delete_statement, query)),
{'Details' => FiverunsTuneupMerb::Instrumentation::DataMapper.format_query(query)}
FiverunsTuneupMerb::Instrumentation.format_sql(query, adapter.send(:delete_statement, query)),
{'Details' => FiverunsTuneupMerb::Instrumentation.format_query(query)}
]
) { super }
end
Expand Down
9 changes: 7 additions & 2 deletions public/stylesheets/tuneup.css
Expand Up @@ -57,7 +57,7 @@ version: 2.5.1


#tuneup .tuneup-bar { margin: 0 4px; margin-left: 10px; height: 15px; list-style: none; }
#tuneup .tuneup-bar li { float:left; height: 20px; color: #fff; line-height: 20px; vertical-align: middle; font-size: 11px; padding: 0 4px;
#tuneup .tuneup-bar li { float:left; height: 20px; color: #fff; line-height: 20px; vertical-align: middle; font-size: 12px; padding: 0 4px;
background-image: url(/slices/fiveruns_tuneup_merb/images/fade.png);
background-position: bottom left;
background-repeat: repeat-x;
Expand Down Expand Up @@ -109,7 +109,7 @@ version: 2.5.1
#tuneup #tuneup-details li.fiveruns_tuneup_step.with_children.tuneup-opened > ul.fiveruns_tuneup_children { display: block; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras { display: none; padding-top: 16px; background: url(/slices/fiveruns_tuneup_merb/images/dialog.png) 5% 0 no-repeat; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras a { font-size: 11px; color: #333; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras a span { color: #000; font-weight: bold; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras a b { color: #000; font-weight: bold; }

#tuneup ul#tuneup-details span.time { margin-right: 12px; }

Expand All @@ -132,11 +132,16 @@ version: 2.5.1
width: 600px;
}
#tuneup dd { color: #000; font-family:monospace; *font-size:108%; line-height:100%; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras .tuneup-app-line { text-decoration: underline; background: #ffa; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras a.tuneup-close-link { float: right; font-family: sans-serif; color: red; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras a.tuneup-more-link { font-family: sans-serif; color: red; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras dd b { font-family: sans-serif; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras-link { margin-left: 9px; display: none; }
#tuneup #tuneup-details li.fiveruns_tuneup_step li.tuneup-title:hover .tuneup-step-extras-link { display: inline; }
#tuneup #tuneup-details li.fiveruns_tuneup_step .tuneup-step-extras ul {
padding-left: 9px;
font-size: 12px;
}

#tuneup .tuneup-step-extras > div { background: #ffc url(/slices/fiveruns_tuneup_merb/images/fade.png) bottom left repeat-x; padding: 6px; padding-bottom: 16px; -moz-border-radius: 6px; -webkit-border-radius: 6px; margin-left: 18px; }
#tuneup dd { margin-left: 18px; }
Expand Down

0 comments on commit aef6790

Please sign in to comment.