rack-insight 0.5.21 → 0.5.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +26 -0
- data/README.md +10 -1
- data/lib/rack/insight/config.rb +36 -9
- data/lib/rack/insight/database.rb +29 -1
- data/lib/rack/insight/panels/redis_panel/redis_extension.rb +3 -3
- data/lib/rack/insight/version.rb +1 -1
- data/lib/rack/insight/views/decoding_error.html.erb +14 -0
- metadata +3 -2
data/CHANGELOG
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
== HEAD
|
2
2
|
|
3
|
+
== 0.5.22 / 2012-09-14
|
4
|
+
|
5
|
+
* New Features
|
6
|
+
|
7
|
+
* Improve handling of decoding and marshalling problems with new config options and implementation: (pboling - Peter Boling)
|
8
|
+
|
9
|
+
:database => a hash. Keys :raise_encoding_errors, and :raise_decoding_errors are self explanatory
|
10
|
+
:raise_encoding_errors
|
11
|
+
When set to true, if there is an encoding error (unlikely)
|
12
|
+
it will cause a 500 error on your site. !!!WARNING!!!
|
13
|
+
:raise_decoding_errors
|
14
|
+
The bundled panels should work fine with :raise_decoding_errors set to true or false
|
15
|
+
but custom panel implementations may prefer one over the other
|
16
|
+
The bundled panels will capture these errors and perform admirably.
|
17
|
+
Site won't go down unless a custom panel is not handling the errors well.
|
18
|
+
|
19
|
+
* Bug Fixes
|
20
|
+
|
21
|
+
* Fixes for redis panel. (oggy - George Ogata)
|
22
|
+
|
23
|
+
* Other
|
24
|
+
|
25
|
+
* Error system improvements and refactoring (pboling - Peter Boling)
|
26
|
+
|
27
|
+
* Internal config validation system (pboling - Peter Boling)
|
28
|
+
|
3
29
|
== 0.5.21 / 2012-09-13 - Peter Boling
|
4
30
|
|
5
31
|
* Attempting to handle values that get stored in the sqlite db, but which can't be re-marshalled, without failing the entire panel
|
data/README.md
CHANGED
@@ -127,6 +127,15 @@ Options:
|
|
127
127
|
"Logger" => [:instance, :add]
|
128
128
|
}}
|
129
129
|
|
130
|
+
:database => a hash. Keys :raise_encoding_errors, and :raise_decoding_errors are self explanatory
|
131
|
+
:raise_encoding_errors
|
132
|
+
When set to true, if there is an encoding error (unlikely)
|
133
|
+
it will cause a 500 error on your site. !!!WARNING!!!
|
134
|
+
:raise_decoding_errors
|
135
|
+
The bundled panels should work fine with :raise_decoding_errors set to true or false
|
136
|
+
but custom panel implementations may prefer one over the other
|
137
|
+
The bundled panels will capture these errors and perform admirably.
|
138
|
+
Site won't go down unless a custom panel is not handling the errors well.
|
130
139
|
|
131
140
|
Configure Middleware
|
132
141
|
--------------------
|
@@ -200,7 +209,7 @@ Restrict access using a password:
|
|
200
209
|
:ip_masks => false # Default is 127.0.0.1
|
201
210
|
:password => "yourpassword"
|
202
211
|
|
203
|
-
#### custom file path for the
|
212
|
+
#### custom file path for the request recording database ####
|
204
213
|
|
205
214
|
Logical Rack::Insight uses SQLite to store data from requests, and outputs a database
|
206
215
|
file in the root directory. If you need the file to be created at another
|
data/lib/rack/insight/config.rb
CHANGED
@@ -2,7 +2,8 @@ module Rack::Insight
|
|
2
2
|
class Config
|
3
3
|
class << self
|
4
4
|
attr_reader :config, :verbosity, :log_file, :log_level, :rails_log_copy,
|
5
|
-
:filtered_backtrace, :panel_configs, :silence_magic_insight_warnings
|
5
|
+
:filtered_backtrace, :panel_configs, :silence_magic_insight_warnings,
|
6
|
+
:database
|
6
7
|
end
|
7
8
|
@log_file = STDOUT
|
8
9
|
@log_level = ::Logger::DEBUG
|
@@ -26,6 +27,10 @@ module Rack::Insight
|
|
26
27
|
:templates => {:probes => {'ActionView::Template' => [:instance, :render]}}
|
27
28
|
}
|
28
29
|
@silence_magic_insight_warnings = false
|
30
|
+
@database = {
|
31
|
+
:raise_encoding_errors => false, # Either way will be logged
|
32
|
+
:raise_decoding_errors => true, # Either way will be logged
|
33
|
+
}
|
29
34
|
|
30
35
|
DEFAULTS = {
|
31
36
|
# You can augment or replace the default set of panel load paths.
|
@@ -45,7 +50,16 @@ module Rack::Insight
|
|
45
50
|
:verbosity => @verbosity, # true is equivalent to relying soley on the log level of each logged message
|
46
51
|
:filtered_backtrace => @filtered_backtrace, # Full backtraces, or filtered ones?
|
47
52
|
:panel_configs => @panel_configs, # Allow specific panels to have their own configurations, and make it extensible
|
48
|
-
:silence_magic_insight_warnings => @silence_magic_insight_warnings # Should Rack::Insight warn when the MagicInsight is used?
|
53
|
+
:silence_magic_insight_warnings => @silence_magic_insight_warnings, # Should Rack::Insight warn when the MagicInsight is used?
|
54
|
+
:database => @database # a hash. Keys :raise_encoding_errors, and :raise_decoding_errors are self explanatory
|
55
|
+
# :raise_encoding_errors
|
56
|
+
# When set to true, if there is an encoding error (unlikely)
|
57
|
+
# it will cause a 500 error on your site. !!!WARNING!!!
|
58
|
+
# :raise_decoding_errors
|
59
|
+
# The bundled panels should work fine with :raise_decoding_errors set to true or false
|
60
|
+
# but custom panel implementations may prefer one over the other
|
61
|
+
# The bundled panels will capture these errors and perform admirably.
|
62
|
+
# Site won't go down unless a custom panel is not handling the errors well.
|
49
63
|
}
|
50
64
|
|
51
65
|
@config ||= DEFAULTS
|
@@ -53,21 +67,34 @@ module Rack::Insight
|
|
53
67
|
yield @config
|
54
68
|
logger.debug("Rack::Insight::Config#configure:\n called from: #{caller[0]}\n with: #{@config}") if config[:verbosity] == true || config[:verbosity].respond_to?(:<) && config[:verbosity] <= 1
|
55
69
|
@logger = config[:logger]
|
56
|
-
@
|
57
|
-
|
70
|
+
if @logger.nil?
|
71
|
+
@log_level = config[:log_level]
|
72
|
+
@log_file = config[:log_file]
|
73
|
+
elsif config[:log_level] || config[:log_file]
|
74
|
+
logger.warn("Rack::Insight::Config#configure: when logger is set, log_level and log_file have no effect, and will only confuse you.")
|
75
|
+
end
|
58
76
|
@verbosity = config[:verbosity]
|
59
77
|
@filtered_backtrace = config[:filtered_backtrace]
|
60
78
|
@silence_magic_insight_warnings = config[:silence_magic_insight_warnings]
|
79
|
+
@database = config[:database]
|
61
80
|
|
62
81
|
config[:panel_configs].each do |panel_name_sym, config|
|
63
82
|
set_panel_config(panel_name_sym, config)
|
64
83
|
end
|
65
84
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
85
|
+
validate_config(:panel_configs, Hash)
|
86
|
+
validate_config(:panel_load_paths, Array)
|
87
|
+
validate_config(:database, Hash)
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.validate_config(key, klass)
|
91
|
+
raise ConfigurationError.new(key, klass.to_s) unless config[key].kind_of?(klass)
|
92
|
+
end
|
93
|
+
|
94
|
+
class ConfigurationError < StandardError;
|
95
|
+
def self.new(key, expected)
|
96
|
+
actual = Rack::Insight::Config.config[key].class
|
97
|
+
super("Rack::Insight::Config.config[:#{key}] is invalid: Expected kind of #{expected} but got #{actual}")
|
71
98
|
end
|
72
99
|
end
|
73
100
|
|
@@ -14,6 +14,7 @@ module Rack::Insight
|
|
14
14
|
# # Setting as below is only required when not using a table (Why are you including this module then?)
|
15
15
|
# # self.has_table = false
|
16
16
|
# end
|
17
|
+
# TODO: Move the has_table definition into this module's included hook.
|
17
18
|
module RequestDataClient
|
18
19
|
def key_sql_template(sql)
|
19
20
|
@key_sql_template = sql
|
@@ -185,12 +186,39 @@ module Rack::Insight
|
|
185
186
|
insert(sql)
|
186
187
|
end
|
187
188
|
|
189
|
+
# We sometimes get errors in the encoding and decoding, and they could be from any number of root causes.
|
190
|
+
# This will allow those root causes to be exposed at the top layer by wrapping all errors in a Rack::Insight
|
191
|
+
# namespaced error class, which will be rescued higher up the stack.
|
192
|
+
module ErrorWrapper
|
193
|
+
def new(parent, message = '')
|
194
|
+
ex = super("#{message}#{parent.class}: #{parent.message}")
|
195
|
+
ex.set_backtrace parent.backtrace
|
196
|
+
ex
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
class EncodingError < StandardError
|
201
|
+
extend ErrorWrapper
|
202
|
+
end
|
203
|
+
|
204
|
+
class DecodingError < StandardError
|
205
|
+
extend ErrorWrapper
|
206
|
+
end
|
207
|
+
|
188
208
|
def encode_value(value)
|
189
209
|
Base64.encode64(YAML.dump(value))
|
210
|
+
rescue Exception => ex
|
211
|
+
wrapped = EncodingError.new(ex, "Rack::Insight::Database#encode_value failed with error: ")
|
212
|
+
logger.error(wrapped)
|
213
|
+
raise wrapped if Rack::Insight::Config.database[:raise_encoding_errors]
|
190
214
|
end
|
191
215
|
|
192
216
|
def decode_value(value)
|
193
|
-
YAML.load(Base64.decode64(value))
|
217
|
+
YAML.load(Base64.decode64(value))
|
218
|
+
rescue Exception => ex
|
219
|
+
wrapped = DecodingError.new(ex, "Rack::Insight::Database#decode_value failed with error: ")
|
220
|
+
logger.error(wrapped)
|
221
|
+
raise wrapped if Rack::Insight::Config.database[:raise_decoding_errors]
|
194
222
|
end
|
195
223
|
|
196
224
|
def retrieve(key_sql)
|
@@ -12,9 +12,9 @@ if defined?(Redis)
|
|
12
12
|
elsif defined?(Redis::Client) # newer versions of redis-rb
|
13
13
|
|
14
14
|
Redis::Client.class_eval do
|
15
|
-
def call_with_insight(
|
16
|
-
Rack::Insight::RedisPanel.record(
|
17
|
-
call_without_insight(
|
15
|
+
def call_with_insight(command, &block)
|
16
|
+
Rack::Insight::RedisPanel.record(command, Kernel.caller) do
|
17
|
+
call_without_insight(command, &block)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/rack/insight/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
<h3><%= name %></h3>
|
2
|
+
<p>Unable to Decoding or Marshalling Objects from rack-insight data storage.</p>
|
3
|
+
<h4>Error</h4>
|
4
|
+
<p><%= @error.message %></p>
|
5
|
+
<h4>Backtrace</h4>
|
6
|
+
<p>
|
7
|
+
<pre>
|
8
|
+
<code>
|
9
|
+
<%- @error.backtrace.each do |line| %>
|
10
|
+
<%= line %>
|
11
|
+
<%- end %>
|
12
|
+
</code>
|
13
|
+
</pre>
|
14
|
+
</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.
|
4
|
+
version: 0.5.22
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-09-
|
15
|
+
date: 2012-09-14 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rack
|
@@ -283,6 +283,7 @@ files:
|
|
283
283
|
- lib/rack/insight/rspec_matchers.rb
|
284
284
|
- lib/rack/insight/toolbar.rb
|
285
285
|
- lib/rack/insight/version.rb
|
286
|
+
- lib/rack/insight/views/decoding_error.html.erb
|
286
287
|
- lib/rack/insight/views/enable-button.html.erb
|
287
288
|
- lib/rack/insight/views/error.html.erb
|
288
289
|
- lib/rack/insight/views/headers_fragment.html.erb
|