rorvswild 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c255c25e5829f312cb6e04c42eb8bb0c4d0b247b
4
- data.tar.gz: 0581376548672b9c4e168bdf5b2bf0c02a1b044d
3
+ metadata.gz: defe2d991680e75ff224dcdf201db4410853b1c4
4
+ data.tar.gz: 6af12c56716629ac4b2a4abed82493639d49ba52
5
5
  SHA512:
6
- metadata.gz: f702cf9cb1ab6f629130bb5fcc543821181d8e8a4b7b45bf56a7c8277a19f4e6401cb7e3c29911e1f81dc9a9dc0fd6157e2db5f9a786a003887e75517722e7eb
7
- data.tar.gz: 0851c9573066fe3ca8b9581d10cc09c61c6f3e4da1c44fbc1c358bbae1fba47b4fdf66c9c796e2b501870ada44977af4209de3bf3a79a200cb2f6d21ccf85940
6
+ metadata.gz: b2815352f7222b25537f8a075527cb0a11a8a108029f9a19c91459156784b286519a20321c3a51cc0b9f3e2ecf59da637f8c57d504ab97fbe4da5f58e0c30db9
7
+ data.tar.gz: 26d522bbce03f923a85ce76f04e54d8476124b90a9d2e205ca85431a5a746a9ad0f369989f0544139093e6c5775cd1060f9aa92c264f5c12a85168ef4c96ddd5
@@ -1,3 +1,3 @@
1
1
  module RorVsWild
2
- VERSION = "0.2.1".freeze
2
+ VERSION = "0.2.2".freeze
3
3
  end
data/lib/rorvswild.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require "rorvswild/version"
2
+ require "json/ext"
3
+ require "net/http"
4
+ require "uri"
2
5
 
3
6
  module RorVsWild
4
7
  def self.new(*args)
@@ -59,11 +62,13 @@ module RorVsWild
59
62
 
60
63
  def setup_callbacks
61
64
  client = self
62
- ActiveSupport::Notifications.subscribe("sql.active_record", &method(:after_sql_query))
63
- ActiveSupport::Notifications.subscribe("render_template.action_view", &method(:after_view_rendering))
64
- ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
65
- ActiveSupport::Notifications.subscribe("start_processing.action_controller", &method(:before_http_request))
66
- ActionController::Base.rescue_from(StandardError) { |exception| client.after_exception(exception, self) }
65
+ if defined?(Rails)
66
+ ActiveSupport::Notifications.subscribe("sql.active_record", &method(:after_sql_query))
67
+ ActiveSupport::Notifications.subscribe("render_template.action_view", &method(:after_view_rendering))
68
+ ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
69
+ ActiveSupport::Notifications.subscribe("start_processing.action_controller", &method(:before_http_request))
70
+ ActionController::Base.rescue_from(StandardError) { |exception| client.after_exception(exception, self) }
71
+ end
67
72
 
68
73
  Resque::Job.send(:extend, ResquePlugin) if defined?(Resque::Job)
69
74
  Delayed::Worker.lifecycle.around(:invoke_job, &method(:around_delayed_job)) if defined?(Delayed::Worker)
@@ -87,7 +92,7 @@ module RorVsWild
87
92
  def after_sql_query(name, start, finish, id, payload)
88
93
  return if !queries || payload[:name] == "EXPLAIN".freeze
89
94
  runtime, sql, plan = compute_duration(start, finish), nil, nil
90
- file, line, method = extract_query_location(caller)
95
+ file, line, method = extract_most_relevant_location(caller)
91
96
  # I can't figure out the exact location which triggered the query, so at least the SQL is logged.
92
97
  sql, file, line, method = payload[:sql], "Unknow", 0, "Unknow" if !file
93
98
  sql = payload[:sql] if runtime >= log_sql_threshold
@@ -218,7 +223,7 @@ module RorVsWild
218
223
  SELECT_REGEX = /\Aselect/i.freeze
219
224
 
220
225
  def explain(sql, binds)
221
- ActiveRecord::Base.connection.explain(sql, binds) if (sql =~ SELECT_REGEX) == 0
226
+ ActiveRecord::Base.connection.explain(sql, binds) if sql =~ SELECT_REGEX
222
227
  end
223
228
 
224
229
  def post_request
@@ -240,14 +245,11 @@ module RorVsWild
240
245
  post("/errors".freeze, error: hash)
241
246
  end
242
247
 
243
- def extract_query_location(stack)
244
- if location = stack.find { |str| str.include?(Rails.root.to_s) }
245
- split_file_location(location.sub(Rails.root.to_s, "".freeze))
246
- end
247
- end
248
+ GEM_HOME_REGEX = ENV["GEM_HOME"] ? /\A#{ENV["GEM_HOME"]}/.freeze : nil
248
249
 
249
- def extract_error_location(stack)
250
- extract_query_location(stack) || split_file_location(stack.first)
250
+ def extract_most_relevant_location(stack)
251
+ location = stack.find { |str| !(str =~ GEM_HOME_REGEX) } if GEM_HOME_REGEX
252
+ split_file_location(relative_path(location || stack.first))
251
253
  end
252
254
 
253
255
  def split_file_location(location)
@@ -268,11 +270,11 @@ module RorVsWild
268
270
  end
269
271
 
270
272
  def relative_path(path)
271
- path.sub(Rails.root.to_s, "".freeze)
273
+ defined?(Rails) ? path.sub(Rails.root.to_s, "".freeze) : path
272
274
  end
273
275
 
274
276
  def exception_to_hash(exception, extra_details = nil)
275
- file, line, method = extract_error_location(exception.backtrace)
277
+ file, line, method = extract_most_relevant_location(exception.backtrace)
276
278
  {
277
279
  method: method,
278
280
  line: line.to_i,
@@ -296,21 +298,26 @@ module RorVsWild
296
298
  end
297
299
 
298
300
  def filter_sensitive_data(hash)
299
- @sensitive_filter ||= ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
300
- @sensitive_filter.filter(hash)
301
+ if defined?(Rails)
302
+ @sensitive_filter ||= ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
303
+ @sensitive_filter.filter(hash)
304
+ else
305
+ hash
306
+ end
301
307
  end
302
308
 
303
309
  def filter_environment_variables(hash)
304
310
  hash.clone.keep_if { |key,value| key == key.upcase }
305
311
  end
306
312
 
307
- def logger
308
- Rails.logger
309
- end
310
-
311
313
  def log_error(exception)
312
- logger.error("[RorVsWild] " + exception.inspect)
313
- logger.error("[RorVsWild] " + exception.backtrace.join("\n[RorVsWild] "))
314
+ if defined?(Rails)
315
+ Rails.logger.error("[RorVsWild] " + exception.inspect)
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
314
321
  end
315
322
  end
316
323
 
@@ -45,7 +45,7 @@ class RorVsWildTest < MiniTest::Unit::TestCase
45
45
  assert_equal(ZeroDivisionError, exception.class)
46
46
  end
47
47
 
48
- def test_catch_error_with_extra_Details
48
+ def test_catch_error_with_extra_details
49
49
  client.expects(:post_error)
50
50
  exception = RorVsWild.catch_error(foo: "bar") { 1 / 0 }
51
51
  assert_equal(ZeroDivisionError, exception.class)
@@ -56,22 +56,14 @@ class RorVsWildTest < MiniTest::Unit::TestCase
56
56
  assert_equal(2, RorVsWild.catch_error { 1 + 1 })
57
57
  end
58
58
 
59
- def test_extract_query_location
60
- callstack = ["/ruby/gems/lib/sql.rb:1:in `method1'", "#{Rails.root}/app/models/user.rb:2:in `method2'"]
61
- assert_equal(%w[/app/models/user.rb 2 method2], client.send(:extract_query_location, callstack))
62
- refute(client.send(:extract_query_location, ["/ruby/gems/lib/sql.rb:1:in `method1'", "/foo/bar.rb:2:in `method2'"]))
59
+ def test_extract_most_relevant_location
60
+ callstack = ["#{ENV["GEM_HOME"]}/lib/sql.rb:1:in `method1'", "/app/models/user.rb:2:in `method2'"]
61
+ assert_equal(%w[/app/models/user.rb 2 method2], client.send(:extract_most_relevant_location, callstack))
62
+ 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
63
  end
64
64
 
65
- def test_extract_error_location
66
- callstack = ["/ruby/gems/lib/sql.rb:1:in `method1'", "#{Rails.root}/app/models/user.rb:2:in `method2'"]
67
- assert_equal(%w[/app/models/user.rb 2 method2], client.send(:extract_error_location, callstack))
68
-
69
- callstack = ["/ruby/gems/lib/sql.rb:1:in `method1'", "/foo/bar.rb:2:in `method2'"]
70
- assert_equal(%w[/ruby/gems/lib/sql.rb 1 method1], client.send(:extract_error_location, callstack))
71
- end
72
-
73
- def test_extract_error_location_when_there_is_no_method_name
74
- assert_equal(["/foo/bar.rb", "123", nil], client.send(:extract_error_location, ["/foo/bar.rb:123"]))
65
+ def test_extract_most_relevant_location_when_there_is_no_method_name
66
+ assert_equal(["/foo/bar.rb", "123", nil], client.send(:extract_most_relevant_location, ["/foo/bar.rb:123"]))
75
67
  end
76
68
 
77
69
  private
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.1
4
+ version: 0.2.2
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-03-25 00:00:00.000000000 Z
11
+ date: 2015-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler