rorvswild 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rorvswild/version.rb +1 -1
- data/lib/rorvswild.rb +21 -17
- data/test/ror_vs_wild_test.rb +21 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1688d79676d52dc69efdbf5cb2149f0f1e8af89
|
4
|
+
data.tar.gz: 3c3428fd9bb732a4b18513206cb240e7125ad7ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2320d56b3563cf5a0257117e0b2eadf1958546aef3b40c84616da98d4068dc2a2844b879396e0532f0c910f8103f058896c8d963c11abcff8a24b19d03d2fd90
|
7
|
+
data.tar.gz: baffb82f1be10cf110c3d22230873af90e3bc2bc3269c04df3a1a4b896f504d062a85ff623927238f47a93f9840eb1e28ac880f470bccf68add3d8f2284bfdc3
|
data/lib/rorvswild/version.rb
CHANGED
data/lib/rorvswild.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "rorvswild/version"
|
2
2
|
require "json/ext"
|
3
3
|
require "net/http"
|
4
|
+
require "logger"
|
4
5
|
require "uri"
|
5
6
|
|
6
7
|
module RorVsWild
|
@@ -46,23 +47,35 @@ module RorVsWild
|
|
46
47
|
}
|
47
48
|
end
|
48
49
|
|
49
|
-
attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :log_sql_threshold
|
50
|
+
attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :log_sql_threshold, :app_root, :app_root_regex
|
50
51
|
|
51
52
|
def initialize(config)
|
52
53
|
config = self.class.default_config.merge(config)
|
53
54
|
@explain_sql_threshold = config[:explain_sql_threshold]
|
54
55
|
@log_sql_threshold = config[:log_sql_threshold]
|
56
|
+
@app_root = config[:app_root]
|
55
57
|
@api_url = config[:api_url]
|
56
58
|
@api_key = config[:api_key]
|
57
59
|
@app_id = config[:app_id]
|
60
|
+
@logger = config[:logger]
|
58
61
|
@data = {}
|
62
|
+
|
63
|
+
if defined?(Rails)
|
64
|
+
@logger ||= Rails.logger
|
65
|
+
@app_root ||= Rails.root.to_s
|
66
|
+
@parameter_filter = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
|
67
|
+
end
|
68
|
+
|
69
|
+
@logger ||= Logger.new(STDERR)
|
70
|
+
@app_root_regex = app_root ? /\A#{app_root}/ : nil
|
71
|
+
|
59
72
|
setup_callbacks
|
60
73
|
RorVsWild.register_default_client(self)
|
61
74
|
end
|
62
75
|
|
63
76
|
def setup_callbacks
|
64
77
|
client = self
|
65
|
-
if defined?(
|
78
|
+
if defined?(ActiveSupport::Notifications)
|
66
79
|
ActiveSupport::Notifications.subscribe("sql.active_record", &method(:after_sql_query))
|
67
80
|
ActiveSupport::Notifications.subscribe("render_template.action_view", &method(:after_view_rendering))
|
68
81
|
ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
|
@@ -248,7 +261,8 @@ module RorVsWild
|
|
248
261
|
GEM_HOME_REGEX = ENV["GEM_HOME"] ? /\A#{ENV["GEM_HOME"]}/.freeze : nil
|
249
262
|
|
250
263
|
def extract_most_relevant_location(stack)
|
251
|
-
location = stack.find { |str| !(str =~ GEM_HOME_REGEX) } if
|
264
|
+
location = stack.find { |str| str =~ app_root_regex && !(str =~ GEM_HOME_REGEX) } if app_root_regex
|
265
|
+
location ||= stack.find { |str| !(str =~ GEM_HOME_REGEX) } if GEM_HOME_REGEX
|
252
266
|
split_file_location(relative_path(location || stack.first))
|
253
267
|
end
|
254
268
|
|
@@ -270,7 +284,7 @@ module RorVsWild
|
|
270
284
|
end
|
271
285
|
|
272
286
|
def relative_path(path)
|
273
|
-
|
287
|
+
app_root_regex ? path.sub(app_root_regex, "".freeze) : path
|
274
288
|
end
|
275
289
|
|
276
290
|
def exception_to_hash(exception, extra_details = nil)
|
@@ -298,12 +312,7 @@ module RorVsWild
|
|
298
312
|
end
|
299
313
|
|
300
314
|
def filter_sensitive_data(hash)
|
301
|
-
|
302
|
-
@sensitive_filter ||= ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
|
303
|
-
@sensitive_filter.filter(hash)
|
304
|
-
else
|
305
|
-
hash
|
306
|
-
end
|
315
|
+
@parameter_filter ? @parameter_filter.filter(hash) : hash
|
307
316
|
end
|
308
317
|
|
309
318
|
def filter_environment_variables(hash)
|
@@ -311,13 +320,8 @@ module RorVsWild
|
|
311
320
|
end
|
312
321
|
|
313
322
|
def log_error(exception)
|
314
|
-
|
315
|
-
|
316
|
-
Rails.logger.error("[RorVsWild] " + exception.backtrace.join("\n[RorVsWild] "))
|
317
|
-
else
|
318
|
-
$stderr.puts("[RorVsWild] " + exception.inspect)
|
319
|
-
$stderr.puts("[RorVsWild] " + exception.backtrace.join("\n[RorVsWild] "))
|
320
|
-
end
|
323
|
+
logger.puts("[RorVsWild] " + exception.inspect)
|
324
|
+
logger.puts("[RorVsWild] " + exception.backtrace.join("\n[RorVsWild] "))
|
321
325
|
end
|
322
326
|
end
|
323
327
|
|
data/test/ror_vs_wild_test.rb
CHANGED
@@ -57,34 +57,38 @@ class RorVsWildTest < MiniTest::Unit::TestCase
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_extract_most_relevant_location
|
60
|
-
callstack = ["#{ENV["GEM_HOME"]}/lib/sql.rb:1:in `method1'", "/app/models/user.rb:
|
61
|
-
assert_equal(%w[/app/models/user.rb
|
60
|
+
callstack = ["#{ENV["GEM_HOME"]}/lib/sql.rb:1:in `method1'", "/usr/lib/ruby/net/http.rb:2:in `method2'", "/rails/root/app/models/user.rb:3:in `method3'"]
|
61
|
+
assert_equal(%w[/app/models/user.rb 3 method3], client.send(:extract_most_relevant_location, callstack))
|
62
|
+
|
62
63
|
assert_equal(["#{ENV["GEM_HOME"]}/lib/sql.rb", "1", "method1"], client.send(:extract_most_relevant_location, ["#{ENV["GEM_HOME"]}/lib/sql.rb:1:in `method1'"]))
|
63
64
|
end
|
64
65
|
|
66
|
+
def test_extract_most_relevant_location_when_there_is_not_app_root
|
67
|
+
client = initialize_client
|
68
|
+
callstack = ["#{ENV["GEM_HOME"]}/lib/sql.rb:1:in `method1'", "/usr/lib/ruby/net/http.rb:2:in `method2'", "/rails/root/app/models/user.rb:3:in `method3'"]
|
69
|
+
assert_equal(%w[/usr/lib/ruby/net/http.rb 2 method2], client.send(:extract_most_relevant_location, callstack))
|
70
|
+
end
|
71
|
+
|
65
72
|
def test_extract_most_relevant_location_when_there_is_no_method_name
|
66
73
|
assert_equal(["/foo/bar.rb", "123", nil], client.send(:extract_most_relevant_location, ["/foo/bar.rb:123"]))
|
67
74
|
end
|
68
75
|
|
76
|
+
def test_extract_most_relevant_location_when_gem_home_is_in_heroku_app_root
|
77
|
+
client = initialize_client(app_root: app_root = File.dirname(gem_home = ENV["GEM_HOME"]))
|
78
|
+
callstack = ["#{gem_home}/lib/sql.rb:1:in `method1'", "/usr/lib/ruby/net/http.rb:2:in `method2'", "#{app_root}/app/models/user.rb:3:in `method3'"]
|
79
|
+
assert_equal(["/app/models/user.rb", "3", "method3"], client.send(:extract_most_relevant_location, callstack))
|
80
|
+
end
|
81
|
+
|
69
82
|
private
|
70
83
|
|
71
84
|
def client
|
72
|
-
|
73
|
-
RorVsWild::Client.any_instance.stubs(:setup_callbacks)
|
74
|
-
@client ||= RorVsWild::Client.new({})
|
75
|
-
@client.stubs(:post_request)
|
76
|
-
@client.stubs(:post_task)
|
77
|
-
end
|
78
|
-
@client
|
85
|
+
@client ||= initialize_client(app_root: "/rails/root")
|
79
86
|
end
|
80
|
-
end
|
81
|
-
|
82
|
-
# Simulate Rails.root
|
83
|
-
|
84
|
-
require "pathname"
|
85
87
|
|
86
|
-
|
87
|
-
|
88
|
-
|
88
|
+
def initialize_client(options = {})
|
89
|
+
client ||= RorVsWild::Client.new(options)
|
90
|
+
client.stubs(:post_request)
|
91
|
+
client.stubs(:post_task)
|
92
|
+
client
|
89
93
|
end
|
90
94
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rorvswild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexis Bernard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|