rack-insight 0.5.26 → 0.5.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +6 -5
  5. data/CHANGELOG +26 -4
  6. data/Gemfile.lock +25 -33
  7. data/README.md +8 -9
  8. data/lib/rack/insight/config.rb +27 -2
  9. data/lib/rack/insight/database.rb +20 -7
  10. data/lib/rack/insight/instrumentation.rb +1 -0
  11. data/lib/rack/insight/instrumentation/eigen_client.rb +16 -0
  12. data/lib/rack/insight/logging.rb +11 -13
  13. data/lib/rack/insight/panel.rb +14 -7
  14. data/lib/rack/insight/panels/log_panel.rb +2 -1
  15. data/lib/rack/insight/panels/redis_panel.rb +0 -20
  16. data/lib/rack/insight/panels/redis_panel/stats.rb +1 -0
  17. data/lib/rack/insight/panels/speedtracer_panel.rb +3 -0
  18. data/lib/rack/insight/params_signature.rb +8 -6
  19. data/lib/rack/insight/rspec_matchers.rb +16 -0
  20. data/lib/rack/insight/toolbar.rb +1 -0
  21. data/lib/rack/insight/version.rb +1 -1
  22. data/rack-insight.gemspec +13 -10
  23. data/spec/insight_spec.rb +21 -18
  24. data/spec/instrumentation_spec.rb +45 -2
  25. data/spec/rack/insight/panels/active_record_panel_spec.rb +7 -7
  26. data/spec/rack/insight/panels/active_resource_panel_spec.rb +4 -4
  27. data/spec/rack/insight/panels/cache_panel_spec.rb +6 -6
  28. data/spec/rack/insight/panels/log_panel_spec.rb +9 -11
  29. data/spec/rack/insight/panels/memory_panel_spec.rb +1 -1
  30. data/spec/rack/insight/panels/rails_info_panel_spec.rb +5 -5
  31. data/spec/rack/insight/panels/redis_panel_spec.rb +17 -3
  32. data/spec/rack/insight/panels/speedtracer_panel_spec.rb +87 -86
  33. data/spec/rack/insight/panels/sql_panel_spec.rb +11 -8
  34. data/spec/rack/insight/panels/templates_panel_spec.rb +8 -7
  35. data/spec/rack/insight/panels/timer_panel_spec.rb +4 -4
  36. data/spec/spec_helper.rb +6 -4
  37. metadata +47 -100
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9014b272efd1a4dacfded3cd104d90138f3e862c
4
+ data.tar.gz: 737f8d87ce64751c2d453cef210c2ba104cf022a
5
+ SHA512:
6
+ metadata.gz: 0e824b8ff9e415506009c9445d938dda476b3b9c6effb38f7c9b74d6e11936f92df929017b51bcd4ecb0a05c8c5999a0c42dc29d8c9fa78f42807d8c4b6a60a3
7
+ data.tar.gz: f92a70fa12747312cc057ddcbb40ae29123d541fb9f5a2fc5d33d9046456c1086e9932e07d8d6b2f3981da79c17341a67157e3739cab7ca29493f9178a6a1461
@@ -0,0 +1 @@
1
+ foss
@@ -0,0 +1 @@
1
+ ruby-1.9.3-p448
@@ -1,9 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.0.0
3
4
  - 1.9.3
4
5
  - 1.9.2
5
- - jruby-19mode
6
- - rbx-19mode
7
- - ruby-head
8
- - jruby-head
9
- bundler_args: "--binstubs --without documentation"
6
+ # - jruby-19mode # Fails to install sqlite3
7
+ # - rbx-19mode
8
+ # - ruby-head # Fails to download rubygems.org/latest_specs.4.8.gz
9
+ # - jruby-head # Fails to install sqlite3
10
+ bundler_args: "--binstubs --without documentation"
data/CHANGELOG CHANGED
@@ -1,14 +1,36 @@
1
+ == 0.5.27 / 2013-09-03
2
+
3
+ * Other
4
+
5
+ * Improved configuration of logging and verbosity by Peter Boling
6
+
7
+ * Moved VERBOSITY from Logging module into Config class
8
+
9
+ * gemspec email should reflect who the current contacts are for the gem by Peter Boling
10
+
11
+ * Removed unused development dependencies by Peter Boling
12
+
13
+ * All specs passing! by Peter Boling
14
+
15
+ * Fixing deprecations by Peter Boling
16
+
17
+ * Require the standard Ruby Logger by Peter Boling
18
+
19
+ * Convert to .ruby-version by Peter Boling
20
+
21
+ * Add license and platform to gemspec by Peter Boling
22
+
1
23
  == 0.5.26 / 2013-08-06
2
24
 
3
25
  * Bug Fixes
4
26
 
5
- * Dont reload page, just close panel by Harry Walter (5 months ago)
6
- * Allow panels to scroll when fixed to bottom by Harry Walter (5 months ago)
7
- * Set position to fixed to keep toolbar at bottom by Harry Walter (5 months ago)
27
+ * Dont reload page, just close panel by Harry Walter
28
+ * Allow panels to scroll when fixed to bottom by Harry Walter
29
+ * Set position to fixed to keep toolbar at bottom by Harry Walter
8
30
 
9
31
  * Other
10
32
 
11
- * Update README.md by Agis Anastasopoulos (5 months ago)
33
+ * Update README.md by Agis Anastasopoulos
12
34
 
13
35
  == 0.5.25 / 2013-03-15
14
36
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-insight (0.5.25)
4
+ rack-insight (0.5.26)
5
5
  rack
6
6
  sqlite3 (>= 1.3.3)
7
7
  uuidtools (>= 2.1.2)
@@ -9,23 +9,17 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- columnize (0.3.6)
13
- debugger (1.5.0)
14
- columnize (>= 0.3.1)
15
- debugger-linecache (~> 1.2.0)
16
- debugger-ruby_core_source (~> 1.2.0)
17
- debugger-linecache (1.2.0)
18
- debugger-ruby_core_source (1.2.0)
19
- diff-lcs (1.2.1)
20
- gem-release (0.5.2)
21
- nokogiri (1.5.6)
12
+ diff-lcs (1.2.4)
13
+ gem-release (0.6.0)
14
+ mini_portile (0.5.1)
15
+ nokogiri (1.6.0)
16
+ mini_portile (~> 0.5.0)
22
17
  rack (1.5.2)
23
18
  rack-protection (1.5.0)
24
19
  rack
25
20
  rack-test (0.6.2)
26
21
  rack (>= 1.0)
27
- rake (10.0.3)
28
- redcarpet (2.2.2)
22
+ rake (10.1.0)
29
23
  reek (1.2.13)
30
24
  ripper_ruby_parser (~> 0.0.7)
31
25
  ruby2ruby (~> 1.2.5)
@@ -35,27 +29,27 @@ GEM
35
29
  sexp_processor (~> 3.0)
36
30
  roodi (2.2.0)
37
31
  ruby_parser (~> 2.3.0)
38
- rspec (2.13.0)
39
- rspec-core (~> 2.13.0)
40
- rspec-expectations (~> 2.13.0)
41
- rspec-mocks (~> 2.13.0)
42
- rspec-core (2.13.1)
43
- rspec-expectations (2.13.0)
32
+ rspec (2.14.1)
33
+ rspec-core (~> 2.14.0)
34
+ rspec-expectations (~> 2.14.0)
35
+ rspec-mocks (~> 2.14.0)
36
+ rspec-core (2.14.4)
37
+ rspec-expectations (2.14.0)
44
38
  diff-lcs (>= 1.1.3, < 2.0)
45
- rspec-mocks (2.13.0)
39
+ rspec-mocks (2.14.2)
46
40
  ruby2ruby (1.2.5)
47
41
  ruby_parser (~> 2.0)
48
42
  sexp_processor (~> 3.0)
49
43
  ruby_parser (2.3.1)
50
44
  sexp_processor (~> 3.0)
51
45
  sexp_processor (3.2.0)
52
- sinatra (1.4.1)
53
- rack (~> 1.5, >= 1.5.2)
46
+ sinatra (1.4.3)
47
+ rack (~> 1.4)
54
48
  rack-protection (~> 1.4)
55
49
  tilt (~> 1.3, >= 1.3.4)
56
50
  sqlite3 (1.3.7)
57
- tilt (1.3.5)
58
- uuidtools (2.1.3)
51
+ tilt (1.4.1)
52
+ uuidtools (2.1.4)
59
53
  webrat (0.7.3)
60
54
  nokogiri (>= 1.2.0)
61
55
  rack (>= 1.0)
@@ -65,13 +59,11 @@ PLATFORMS
65
59
  ruby
66
60
 
67
61
  DEPENDENCIES
68
- debugger (>= 1.5.0)
69
- gem-release (>= 0.5.2)
62
+ gem-release (>= 0.6.0)
70
63
  rack-insight!
71
- rake
72
- redcarpet
73
- reek (>= 1.2.8)
74
- roodi (>= 2.1.0)
75
- rspec (>= 2.11.0)
76
- sinatra
77
- webrat
64
+ rake (>= 10.1.0)
65
+ reek (>= 1.2.13)
66
+ roodi (>= 2.2.0)
67
+ rspec (>= 2.14.1)
68
+ sinatra (>= 1.4.3)
69
+ webrat (>= 0.7.3)
data/README.md CHANGED
@@ -8,7 +8,7 @@ Description
8
8
  -----------
9
9
 
10
10
  Rack::Insight adds a diagnostics toolbar to Rack apps. When enabled, it injects a floating div
11
- allowing exploration of logging, database queries, template rendering times, etc. Rack::Insight
11
+ allowing exploration of logging, database queries, template rendering times, etc. Rack::Insight
12
12
  stores debugging info over many requests, incuding AJAX requests.
13
13
 
14
14
  Features
@@ -25,7 +25,7 @@ Features
25
25
  * Templates
26
26
  * Log (can configure which loggers to watch!)
27
27
  * Memory
28
- * SQL (Failing specs, and I don't use it, someone please pull me a fix!)
28
+ * SQL
29
29
  * Active Record (Thanks to [Kevin Glowacz](https://github.com/kjg) for the fix!)
30
30
  * Other bundled panels:
31
31
  * Sphinx (thanks to Oggy for updating this to the rack-insight panel API)
@@ -59,7 +59,7 @@ In config/environments/development.rb, add:
59
59
  :secret_key => "someverylongandveryhardtoguesspreferablyrandomstring"
60
60
 
61
61
  Any environment with Rack::Insight loaded will have a link to "Rack::Insight" added to as
62
- the last child of BODY to normal responses. Clicking that link will load the
62
+ the last child of `<body>` to normal responses. Clicking that link will load the
63
63
  toolbar. It's set with an id of "rack-insight-enabler", so it can be styled
64
64
  to go somewhere more noticeable. E.g. "position: absolute; top: 0; left: 0"
65
65
 
@@ -69,9 +69,6 @@ Using with non-Rails Rack apps
69
69
  Just 'use Rack::Insight' as any other middleware. See the SampleApp in the
70
70
  spec/fixtures folder for an example Sinatra app.
71
71
 
72
- If you wish to use the logger panel define the LOGGER constant that is a ruby
73
- Logger or ActiveSupport::BufferedLogger
74
-
75
72
  Configure Rack::Insight
76
73
  ---------------------
77
74
 
@@ -91,11 +88,11 @@ Options:
91
88
 
92
89
  :rails_log_copy - If you are setting :logger to the Rails Logger, you should set this to false (default is true).
93
90
 
94
- :verbosity - true is default .
91
+ :verbosity - true is default.
95
92
  true is equivalent to relying soley on the logger's log level to determine if a message is logged.
96
93
  Other potential values are:
97
94
  anything falsey => no logging at all
98
- Rack::Insight::Logging::VERBOSITY[*level*] where *level* is one of:
95
+ Rack::Insight::Config::VERBOSITY[*level*] where *level* is one of:
99
96
  :debug, :high, :med, :low, :silent
100
97
 
101
98
  :panel_load_paths => [File::join('rack', 'insight', 'panels')] (default)
@@ -206,10 +203,12 @@ Restrict access using a password:
206
203
 
207
204
  #### custom file path for the request recording database ####
208
205
 
209
- Rack::Insight uses SQLite to store data from requests, and outputs a database
206
+ Rack::Insight uses SQLite to store data across requests, and outputs a database
210
207
  file in the root directory. If you need the file to be created at another
211
208
  location (i.e. Heroku), you can pass a custom file path.
212
209
 
210
+ Please report back if you have success with this on Heroku!
211
+
213
212
  ActionController::Dispatcher.middleware.use "Rack::Insight::App"
214
213
  :secret_key => "someverylongandveryhardtoguesspreferablyrandomstring",
215
214
  :database_path => "tmp/my_insight_db.sqlite"
@@ -1,5 +1,18 @@
1
+ require 'logger' # Require the standard Ruby Logger
2
+
1
3
  module Rack::Insight
2
4
  class Config
5
+
6
+ VERBOSITY = {
7
+ :debug => Logger::DEBUG,
8
+ :high => Logger::INFO,
9
+ :med => Logger::WARN,
10
+ :low => Logger::ERROR,
11
+ # Silent can be used with unless instead of if. Example:
12
+ # logger.info("some message") unless app.verbose(:silent)
13
+ :silent => Logger::FATAL
14
+ }
15
+
3
16
  class << self
4
17
  attr_reader :config, :verbosity, :log_file, :log_level, :rails_log_copy,
5
18
  :filtered_backtrace, :panel_configs, :silence_magic_insight_warnings,
@@ -8,7 +21,7 @@ module Rack::Insight
8
21
  @log_file = STDOUT
9
22
  @log_level = ::Logger::DEBUG
10
23
  @logger = nil
11
- @verbosity = Rack::Insight::Logging::VERBOSITY[:silent]
24
+ @verbosity = nil
12
25
  @rails_log_copy = true
13
26
  @filtered_backtrace = true
14
27
  @panel_configs = {
@@ -24,7 +37,11 @@ module Rack::Insight
24
37
  Mysql2Adapter OracleEnhancedAdapter }.map do |adapter|
25
38
  ["ActiveRecord::ConnectionAdapters::#{adapter}", [:instance, :execute]]
26
39
  end ] },
27
- :templates => {:probes => {'ActionView::Template' => [:instance, :render]}}
40
+ :templates => {:probes => {'ActionView::Template' => [:instance, :render]}},
41
+ :redis => {:probes => defined?(Redis::Client) ?
42
+ { 'Redis::Client' => [:instance, :call] } : # Redis >= 3.0.0
43
+ { 'Redis' => [:instance, :call_command] } # Redis < 3.0.0
44
+ }
28
45
  }
29
46
  @silence_magic_insight_warnings = false
30
47
  @database = {
@@ -43,6 +60,7 @@ module Rack::Insight
43
60
  # end
44
61
  :panel_load_paths => [File::join('rack', 'insight', 'panels')],
45
62
  :logger => @logger,
63
+ :verbosity => @verbosity,
46
64
  :log_file => @log_file,
47
65
  :log_level => @log_level,
48
66
  :rails_log_copy => @rails_log_copy, # Only has effect when logger is the Rack::Insight::Logger, or a logger behaving like it
@@ -74,6 +92,9 @@ module Rack::Insight
74
92
  logger.warn("Rack::Insight::Config#configure: when logger is set, log_level and log_file have no effect, and will only confuse you.")
75
93
  end
76
94
  @verbosity = config[:verbosity]
95
+ if @verbosity.nil?
96
+ @verbosity = Rack::Insight::Config::VERBOSITY[:silent]
97
+ end
77
98
  @filtered_backtrace = config[:filtered_backtrace]
78
99
  @silence_magic_insight_warnings = config[:silence_magic_insight_warnings]
79
100
  @database = config[:database]
@@ -105,6 +126,10 @@ module Rack::Insight
105
126
  self.config[:panel_configs][panel_name_sym] = @panel_configs[panel_name_sym]
106
127
  end
107
128
 
129
+ def self.verbosity
130
+ @verbosity ||= self.config[:verbosity]
131
+ end
132
+
108
133
  def self.logger
109
134
  @logger ||= begin
110
135
  logga = self.config[:logger]
@@ -5,6 +5,13 @@ require 'base64'
5
5
  module Rack::Insight
6
6
  class Database
7
7
 
8
+ module EigenClient
9
+ def self.included(base)
10
+ base.send(:attr_accessor, :table)
11
+ base.send(:attr_accessor, :key_sql_template)
12
+ end
13
+ end
14
+
8
15
  # Classes including this module must define the following structure:
9
16
  # class FooBar
10
17
  # include Rack::Insight::Database
@@ -17,15 +24,16 @@ module Rack::Insight
17
24
  # TODO: Move the has_table definition into this module's included hook.
18
25
  module RequestDataClient
19
26
  def key_sql_template(sql)
20
- @key_sql_template = sql
27
+ self.class.key_sql_template = sql
21
28
  end
22
29
 
23
30
  def table_setup(name, *keys)
24
31
  self.class.has_table = true
25
- @table = DataTable.new(name, *keys)
32
+ self.class.table = DataTable.new(name, *keys)
26
33
  if keys.empty?
27
- @key_sql_template = ''
34
+ self.class.key_sql_template = ''
28
35
  end
36
+ self.class.table
29
37
  end
30
38
 
31
39
  def store(env, *keys_and_value)
@@ -36,19 +44,24 @@ module Rack::Insight
36
44
  value = keys_and_value[-1]
37
45
  keys = keys_and_value[0...-1]
38
46
 
39
- @table.store(request_id, value, @key_sql_template % keys)
47
+ #puts "value: #{value}"
48
+ #puts "keys: #{keys}"
49
+ #puts "table: #{self.class.table.inspect}"
50
+ #puts "@key_sql_template: #{self.class.key_sql_template}"
51
+ #puts "class: #{self.class.inspect}"
52
+ self.class.table.store(request_id, value, self.class.key_sql_template % keys)
40
53
  end
41
54
 
42
55
  def retrieve(request_id)
43
- @table.for_request(request_id)
56
+ self.class.table.for_request(request_id)
44
57
  end
45
58
 
46
59
  def count(request_id)
47
- @table.count_for_request(request_id)
60
+ self.class.table.count_for_request(request_id)
48
61
  end
49
62
 
50
63
  def table_length
51
- @table.length
64
+ self.class.table.length
52
65
  end
53
66
  end
54
67
 
@@ -4,6 +4,7 @@ end
4
4
  require 'rack/insight/instrumentation/instrument'
5
5
  require 'rack/insight/instrumentation/probe'
6
6
  require 'rack/insight/instrumentation/client'
7
+ require 'rack/insight/instrumentation/eigen_client'
7
8
  require 'rack/insight/instrumentation/setup'
8
9
  require 'rack/insight/instrumentation/package-definition'
9
10
  require 'rack/insight/instrumentation/probe-definition'
@@ -0,0 +1,16 @@
1
+ module Rack::Insight::Instrumentation
2
+ module EigenClient
3
+
4
+ def self.included(base)
5
+ # Once a panel is probed self.is_probing should be set to true
6
+ # Panels without tables override with self.has_table = false
7
+ # check is_magic to wrap any functionality targeted at magic panels.
8
+ base.send(:attr_accessor, :is_probing)
9
+ base.send(:attr_accessor, :has_table)
10
+ base.send(:attr_accessor, :table)
11
+ base.send(:attr_accessor, :is_magic)
12
+ base.send(:attr_accessor, :template_root)
13
+ end
14
+
15
+ end
16
+ end
@@ -1,14 +1,12 @@
1
+ require 'rack/insight/config'
2
+
1
3
  module Rack::Insight
2
4
  module Logging
3
- VERBOSITY = {
4
- :debug => Logger::DEBUG,
5
- :high => Logger::INFO,
6
- :med => Logger::WARN,
7
- :low => Logger::ERROR,
8
- # Silent can be used with unless instead of if. Example:
9
- # logger.info("some message") unless app.verbose(:silent)
10
- :silent => Logger::FATAL
11
- }
5
+
6
+ def verbosity
7
+ Rack::Insight::Config.verbosity
8
+ end
9
+ module_function :verbosity
12
10
 
13
11
  def logger
14
12
  Rack::Insight::Config.logger
@@ -18,15 +16,15 @@ module Rack::Insight
18
16
  # max_level is confusing because the 'level' of output goes up (and this is what max refers to)
19
17
  # when the integer value goes DOWN
20
18
  def verbose(max_level = false)
21
- #logger.unknown "Rack::Insight::Config.verbosity: #{Rack::Insight::Config.verbosity} <= max_level: #{VERBOSITY[max_level]}" #for debugging the logger
22
- return false if (!Rack::Insight::Config.verbosity) # false results in Exactly Zero output!
23
- return true if (Rack::Insight::Config.verbosity == true) # Not checking truthy because need to check against max_level...
19
+ #logger.unknown "Rack::Insight::Logging.verbosity: #{Rack::Insight::Logging.verbosity} <= max_level: #{VERBOSITY[max_level]}" #for debugging the logger
20
+ return false if (!verbosity) # false results in Exactly Zero output!
21
+ return true if (verbosity == true) # Not checking truthy because need to check against max_level...
24
22
  # Example: if configured log spam level is high (1) logger should get all messages that are not :debug (0)
25
23
  # so, if a log statement has if verbose(:low) (:low is 3)
26
24
  # 1 <= 3 # true => Message sent to logger
27
25
  # then, if a log statement has if verbose(:debug) (:debug is 0)
28
26
  # 1 <= 0 # false => Nothing sent to logger
29
- return true if Rack::Insight::Config.verbosity <= (VERBOSITY[max_level]) # Integers!
27
+ return true if verbosity <= (Rack::Insight::Config::VERBOSITY[max_level]) # Integers!
30
28
  end
31
29
  module_function :verbose
32
30
  end
@@ -16,14 +16,19 @@ module Rack::Insight
16
16
 
17
17
  attr_reader :request
18
18
 
19
+ # has table defaults to true for panels.
20
+ def self.has_table
21
+ self.has_table.nil? ? true : self.class.table.nil?
22
+ end
23
+
19
24
  class << self
20
25
 
21
26
  include Rack::Insight::Logging
22
-
23
- attr_accessor :template_root, :is_probing, :has_table, :is_magic
24
- @is_probing = false # Once a panel is probed this should be set to true
25
- @has_table = true # default to true. Panels without tables override with self.has_table = false
26
- @is_magic = false # check this to wrap any functionality targeted at magic panels.
27
+ # This will allow the following:
28
+ # p = Panel.new
29
+ # p.class.is_probing = true
30
+ include Rack::Insight::Instrumentation::EigenClient
31
+ include Rack::Insight::Database::EigenClient
27
32
 
28
33
  def file_index
29
34
  return @file_index ||= Hash.new do |h,k|
@@ -113,13 +118,15 @@ module Rack::Insight
113
118
  # end
114
119
  panel_name = self.underscored_name.to_sym
115
120
  if self.has_custom_probes?(panel_name)
121
+ # Both formats are valid and must be supported
122
+ #config[:panel_configs][:log] = {:probes => {'Logger' => [:instance, :add]}}
123
+ #config[:panel_configs][:log] = {:probes => ['Logger', :instance, :add]}
116
124
  custom_probes = Rack::Insight::Config.config[:panel_configs][panel_name][:probes]
117
125
  if custom_probes.kind_of?(Hash)
118
126
  probe(self) do
119
127
  custom_probes.each do |klass, method_probes|
120
- probe_type = method_probes.shift
121
128
  instrument klass do
122
- self.send("#{probe_type}_probe", *method_probes)
129
+ self.send("#{method_probes[0]}_probe", *(method_probes[1..-1]))
123
130
  end
124
131
  end
125
132
  end