rack-insight 0.5.14 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,12 +1,13 @@
1
- == HEAD
1
+ == 0.5.14 / 2012-09-11
2
2
 
3
3
  * New Features
4
4
 
5
5
  * Panel level configurations for :probes are now supported by default on all panels
6
6
  * Auto-magical panel names
7
- * Auto-magical table creation (skipped with self.tableless = false in a Panel class definition)
7
+ * Auto-magical panel probe detection and storage
8
+ * Auto-magical panel content
9
+ * Auto-magical table creation (skipped with self.has_table = false in a Panel class definition)
8
10
  * Under construction, or blank, panels have more scaffolding
9
- *
10
11
 
11
12
  == 0.5.13 / 2012-09-10
12
13
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-insight (0.5.13)
4
+ rack-insight (0.5.14)
5
5
  rack
6
6
  sqlite3 (>= 1.3.3)
7
7
  uuidtools (>= 2.1.2)
data/README.md CHANGED
@@ -114,15 +114,17 @@ Options:
114
114
  Currently this is implemented in the log_panel, and configured as:
115
115
 
116
116
  Rack::Insight::Config.configure do |config|
117
- config[:panel_configs][:log_panel] = {:watch => {'Logger' => :add}}
117
+ # The following two lines have the same result
118
+ config[:panel_configs][:log] = {:probes => {'Logger' => [:instance, :add]}}
119
+ config[:panel_configs][:log] = {:probes => ['Logger', :instance, :add]}
118
120
  end
119
121
 
120
122
  Example: If you want all of your log statements in Rails to be traced twice by Rack::Insight,
121
123
  this will do that because ActiveSupport::BufferedLogger utilizes Logger under the hood:
122
124
 
123
- config[:panel_configs][:log_panel] = {:watch => {
124
- "ActiveSupport::BufferedLogger" => :add,
125
- "Logger" => :add
125
+ config[:panel_configs][:log_panel] = {:probes => {
126
+ "ActiveSupport::BufferedLogger" => [:instance, :add],
127
+ "Logger" => [:instance, :add]
126
128
  }}
127
129
 
128
130
 
@@ -208,6 +210,35 @@ location (i.e. Heroku), you can pass a custom file path.
208
210
  :secret_key => "someverylongandveryhardtoguesspreferablyrandomstring",
209
211
  :database_path => "tmp/my_insight_db.sqlite"
210
212
 
213
+ Magic Panels
214
+ ------------
215
+
216
+ You can now create a fully functional new panel with a simple class definition:
217
+
218
+ module Rack::Insight
219
+ class FooBarPanel < Panel
220
+ self.is_magic = true
221
+ end
222
+ end
223
+
224
+ Setup the probes for the magic panel in a `before_initialize` block in your application.rb as follows:
225
+
226
+ # Assuming there is a FooBra class with instance methods: foo, bar, cheese, and ducks
227
+ Rack::Insight::Config.configure do |config|
228
+ # Not :foo_bar_panel or 'FooBarPanel'... :foo_bar
229
+ config[:panel_configs][:foo_bar] = {:probes => {'FooBra' => [:instance, :foo, :bar, :cheese, :ducks]}}
230
+ end
231
+
232
+ Custom Panels
233
+ -------------
234
+
235
+ See Magic Panels above, remove teh is_magic declaration, and add your own methods.
236
+ Look at the panels bundled with this gem for pointers. Here are some important methods to watch for:
237
+
238
+ * initialize
239
+ * after_detect
240
+ * content_for_request(number)
241
+
211
242
  Authors
212
243
  -------
213
244
 
@@ -10,7 +10,7 @@ module Rack::Insight
10
10
  end
11
11
 
12
12
  def filtered_backtrace
13
- @filtered_backtrace ||= @backtrace.grep(FilteredBacktrace.backtrace_regexp)
13
+ @filtered_backtrace ||= @backtrace.respond_to?(:grep) ? @backtrace.grep(FilteredBacktrace.backtrace_regexp) : []
14
14
  end
15
15
 
16
16
  def self.backtrace_regexp
@@ -132,7 +132,7 @@ module Rack::Insight
132
132
  end
133
133
  end
134
134
  else
135
- raise "Expected Rack::Insight::Config.config[:panel_configs][#{self.as_sym.inspect}][:probes] to be a kind of Hash or an Array with length >= 3, but is a #{Rack::Insight::Config.config[:panel_configs][self.as_sym][:probes].class}"
135
+ raise "Expected Rack::Insight::Config.config[:panel_configs][#{panel_name}][:probes] to be a kind of Hash or an Array with length >= 3, but is a #{Rack::Insight::Config.config[:panel_configs][self.as_sym][:probes].class}"
136
136
  end
137
137
  end
138
138
 
@@ -240,28 +240,14 @@ module Rack::Insight
240
240
  logger.info("#{self.class} is being used without a table") if verbose(:med)
241
241
  content
242
242
  elsif self.is_probed?
243
- html = "<h3>#{self.camelized_name}</h3>"
244
243
  invocations = retrieve(number)
245
244
  if invocations.length > 0 && invocations.first.is_a?(Rack::Insight::Panel::DefaultInvocation)
246
- html += '<table><thead><tr>'
247
- logger.info("Rack::Insight is using magic content for #{self.class}, which is probed") if verbose(:med)
248
- members = invocations.first.members # is a struct, so we have members, not keys
249
- members.each do |member|
250
- html += '<td>' << member.to_s << '</td>'
251
- end
252
- html += '</tr></thead><tbody>'
253
- invocations.each do |invocation|
254
- html += '<tr>'
255
- members.each do |member|
256
- html += '<td>' << invocation.send(member).inspect << '</td>'
257
- end
258
- html += '</tr>'
259
- end
260
- html += '</tbody></table>'
245
+ logger.info("Rack::Insight is using magic content for #{self.class}, which is probed")# if verbose(:med)
246
+ render_template 'default_invocation', :invocations => invocations, :name => self.camelized_name
261
247
  else
262
- html += '<p>No Data Available</p>'
248
+ logger.info("Rack::Insight has no data for magic content for #{self.class}, which is probed")# if verbose(:med)
249
+ render_template 'no_data', :name => self.camelized_name
263
250
  end
264
- html
265
251
  else
266
252
  content
267
253
  end
@@ -284,7 +270,7 @@ module Rack::Insight
284
270
  def after_detect(method_call, timing, args, result)
285
271
  #puts "Default After Detect for #{self.underscored_name}: 1. #{self.is_magic?} && 2. #{self.has_table?} && 3. #{self.is_probed?}"
286
272
  if self.is_magic? && self.has_table? && self.is_probed?
287
- store(@env, DefaultInvocation.new(method_call.to_s, timing.duration, args, result))
273
+ store(@env, DefaultInvocation.new(method_call.method.to_s, timing, args, result, method_call.backtrace[2..-1]))
288
274
  end
289
275
  end
290
276
 
@@ -297,14 +283,24 @@ module Rack::Insight
297
283
  def render(template)
298
284
  end
299
285
 
300
- # For Magic Panels (not fully implemented)
301
- class DefaultInvocation < Struct.new :method, :time, :args, :result
286
+ # For Magic Panels
287
+ class DefaultInvocation < Struct.new :method, :time, :arguments, :result, :backtrace
288
+ attr_accessor :method, :time, :arguments, :result, :backtrace
289
+
290
+ include Rack::Insight::FilteredBacktrace
291
+
302
292
  def initialize(*args)
303
- @time = human_time(args[1])
293
+ @method = args[0]
294
+ @time = [args[1].duration, args[1].delta_t]
295
+ @arguments = args[2]
296
+ @result = args[3]
297
+ @backtrace = args[4]
304
298
  end
305
- def human_time(t)
306
- "%.2fms" % (t * 1_000)
299
+
300
+ def human_time
301
+ "%.2fms" % (self.time * 1_000)
307
302
  end
303
+
308
304
  end
309
305
 
310
306
  end
@@ -1,7 +1,7 @@
1
1
  module Rack
2
2
  module Insight
3
3
 
4
- VERSION = '0.5.14'
4
+ VERSION = '0.5.15'
5
5
 
6
6
  end
7
7
  end
@@ -0,0 +1,30 @@
1
+ <h3><%= name %></h3>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <%- members = invocations.last.members # is a struct, so we have members, not keys %>
6
+ <%- members.each do |member| %>
7
+ <td><%= member %></td>
8
+ <%- end %>
9
+ </tr>
10
+ </thead>
11
+ <tbody>
12
+ <%- invocations.each do |invocation| %>
13
+ <tr>
14
+ <%- members.each do |member| %>
15
+ <td>
16
+ <%- if member == :backtrace %>
17
+ <%- invocation.filtered_backtrace.each do |line| %>
18
+ <%= line %><br/>
19
+ <%- end %>
20
+ <%- elsif member == :time %>
21
+ <%= invocation.human_time %>
22
+ <%- else %>
23
+ <%= invocation.send(member).inspect %>
24
+ <%- end %>
25
+ </td>
26
+ <%- end %>
27
+ </tr>
28
+ <%- end %>
29
+ </tbody>
30
+ </table>
@@ -0,0 +1,2 @@
1
+ <h3><%= name %></h3>
2
+ <p>No Data Available</p>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-insight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.14
4
+ version: 0.5.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -280,9 +280,11 @@ files:
280
280
  - lib/rack/insight/rspec_matchers.rb
281
281
  - lib/rack/insight/toolbar.rb
282
282
  - lib/rack/insight/version.rb
283
+ - lib/rack/insight/views/default_invocation.html.erb
283
284
  - lib/rack/insight/views/enable-button.html.erb
284
285
  - lib/rack/insight/views/error.html.erb
285
286
  - lib/rack/insight/views/headers_fragment.html.erb
287
+ - lib/rack/insight/views/no_data.html.erb
286
288
  - lib/rack/insight/views/panels/active_record.html.erb
287
289
  - lib/rack/insight/views/panels/active_resource.html.erb
288
290
  - lib/rack/insight/views/panels/cache.html.erb