rollbar 2.19.2 → 2.19.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +27 -0
  3. data/Appraisals +10 -10
  4. data/Gemfile +2 -0
  5. data/README.md +4 -1
  6. data/Rakefile +0 -0
  7. data/data/rollbar.snippet.js +1 -1
  8. data/gemfiles/rails30.gemfile +2 -0
  9. data/gemfiles/rails31.gemfile +2 -0
  10. data/gemfiles/rails32.gemfile +2 -0
  11. data/gemfiles/rails40.gemfile +2 -0
  12. data/gemfiles/rails41.gemfile +2 -0
  13. data/gemfiles/rails42.gemfile +2 -0
  14. data/gemfiles/rails50.gemfile +2 -0
  15. data/gemfiles/rails51.gemfile +2 -0
  16. data/gemfiles/rails52.gemfile +2 -0
  17. data/gemfiles/ruby_1_8_and_1_9_2.gemfile +2 -0
  18. data/lib/generators/rollbar/rollbar_generator.rb +1 -1
  19. data/lib/rails/rollbar_runner.rb +1 -1
  20. data/lib/rollbar.rb +2 -3
  21. data/lib/rollbar/capistrano3.rb +6 -3
  22. data/lib/rollbar/capistrano_tasks.rb +13 -15
  23. data/lib/rollbar/configuration.rb +10 -8
  24. data/lib/rollbar/delay/girl_friday.rb +2 -2
  25. data/lib/rollbar/delay/resque.rb +4 -6
  26. data/lib/rollbar/delay/sidekiq.rb +6 -10
  27. data/lib/rollbar/delay/sucker_punch.rb +17 -19
  28. data/lib/rollbar/delay/thread.rb +2 -2
  29. data/lib/rollbar/deploy.rb +47 -30
  30. data/lib/rollbar/encoding/encoder.rb +9 -9
  31. data/lib/rollbar/item.rb +7 -7
  32. data/lib/rollbar/item/backtrace.rb +4 -4
  33. data/lib/rollbar/item/frame.rb +7 -1
  34. data/lib/rollbar/item/locals.rb +56 -0
  35. data/lib/rollbar/json.rb +5 -2
  36. data/lib/rollbar/json/default.rb +1 -1
  37. data/lib/rollbar/json/oj.rb +1 -1
  38. data/lib/rollbar/language_support.rb +1 -1
  39. data/lib/rollbar/lazy_store.rb +5 -5
  40. data/lib/rollbar/logger.rb +1 -0
  41. data/lib/rollbar/logger_proxy.rb +1 -1
  42. data/lib/rollbar/middleware/js.rb +15 -15
  43. data/lib/rollbar/middleware/rack.rb +4 -1
  44. data/lib/rollbar/middleware/rails/rollbar.rb +10 -1
  45. data/lib/rollbar/notifier.rb +40 -15
  46. data/lib/rollbar/notifier/trace_with_bindings.rb +65 -0
  47. data/lib/rollbar/plugin.rb +54 -6
  48. data/lib/rollbar/plugins.rb +7 -1
  49. data/lib/rollbar/plugins/basic_socket.rb +21 -6
  50. data/lib/rollbar/plugins/delayed_job/job_data.rb +3 -3
  51. data/lib/rollbar/plugins/delayed_job/plugin.rb +2 -2
  52. data/lib/rollbar/plugins/goalie.rb +11 -3
  53. data/lib/rollbar/plugins/rails/controller_methods.rb +15 -3
  54. data/lib/rollbar/plugins/rake.rb +2 -2
  55. data/lib/rollbar/plugins/sidekiq/plugin.rb +5 -4
  56. data/lib/rollbar/rake_tasks.rb +2 -2
  57. data/lib/rollbar/request_data_extractor.rb +21 -18
  58. data/lib/rollbar/scrubbers.rb +7 -3
  59. data/lib/rollbar/scrubbers/params.rb +17 -16
  60. data/lib/rollbar/scrubbers/url.rb +8 -3
  61. data/lib/rollbar/truncation.rb +1 -1
  62. data/lib/rollbar/truncation/strings_strategy.rb +1 -1
  63. data/lib/rollbar/util/ip_anonymizer.rb +8 -7
  64. data/lib/rollbar/util/ip_obfuscator.rb +1 -1
  65. data/lib/rollbar/version.rb +1 -1
  66. data/lib/tasks/benchmark.rake +103 -0
  67. data/rollbar.gemspec +13 -4
  68. metadata +12 -5
@@ -13,7 +13,7 @@ module Rollbar
13
13
  STRATEGIES = [RawStrategy,
14
14
  FramesStrategy,
15
15
  StringsStrategy,
16
- MinBodyStrategy]
16
+ MinBodyStrategy].freeze
17
17
 
18
18
  def self.truncate(payload)
19
19
  result = nil
@@ -6,7 +6,7 @@ module Rollbar
6
6
  class StringsStrategy
7
7
  include ::Rollbar::Truncation::Mixin
8
8
 
9
- STRING_THRESHOLDS = [1024, 512, 256]
9
+ STRING_THRESHOLDS = [1024, 512, 256].freeze
10
10
 
11
11
  def self.call(payload)
12
12
  new.call(payload)
@@ -5,26 +5,27 @@ module Rollbar
5
5
 
6
6
  def self.anonymize_ip(ip_string)
7
7
  return ip_string unless Rollbar.configuration.anonymize_user_ip
8
+
8
9
  ip = IPAddr.new(ip_string)
9
10
  return anonymize_ipv6 ip if ip.ipv6?
10
11
  return anonymize_ipv4 ip if ip.ipv4?
11
- rescue
12
+ rescue StandardError
12
13
  nil
13
14
  end
14
-
15
+
15
16
  def self.anonymize_ipv4(ip)
16
17
  ip_parts = ip.to_s.split '.'
17
-
18
+
18
19
  ip_parts[ip_parts.count - 1] = '0'
19
-
20
+
20
21
  IPAddr.new(ip_parts.join('.')).to_s
21
22
  end
22
-
23
+
23
24
  def self.anonymize_ipv6(ip)
24
25
  ip_parts = ip.to_s.split ':'
25
-
26
+
26
27
  ip_string = ip_parts[0..2].join(':') + ':0000:0000:0000:0000:0000'
27
-
28
+
28
29
  IPAddr.new(ip_string).to_s
29
30
  end
30
31
  end
@@ -13,7 +13,7 @@ module Rollbar
13
13
  obfuscated_ip_int32 = ip_int32 ^ secret_int32 % (2 << 31)
14
14
 
15
15
  IPAddr.new(obfuscated_ip_int32, Socket::AF_INET).to_s
16
- rescue
16
+ rescue StandardError
17
17
  nil
18
18
  end
19
19
  end
@@ -1,3 +1,3 @@
1
1
  module Rollbar
2
- VERSION = '2.19.2'
2
+ VERSION = '2.19.3'.freeze
3
3
  end
@@ -0,0 +1,103 @@
1
+ require 'benchmark'
2
+
3
+ namespace :benchmark do
4
+ desc 'Measure TracePoint perf for current Ruby'
5
+ task :trace_point do
6
+ ARGV.each { |a| task(a.to_sym { ; }) } # Keep rake from treating these ask task names.
7
+
8
+ options = {}.tap do |hash|
9
+ ARGV.each { |arg| hash[arg] = true }
10
+ end
11
+
12
+ puts "options: #{options}"
13
+
14
+ trace_with_bindings = BenchmarkTraceWithBindings.new(options)
15
+
16
+ trace_with_bindings.enable
17
+ puts(Benchmark.measure do
18
+ TraceTest.benchmark_with_locals
19
+ end)
20
+ trace_with_bindings.disable
21
+
22
+ puts "counts: #{trace_with_bindings.counts}" if options['counts']
23
+ end
24
+ end
25
+
26
+ class TraceTest # :nodoc:
27
+ class << self
28
+ def benchmark_with_locals
29
+ foo = false
30
+
31
+ (0..20_000).each do |index|
32
+ foo = TraceTest
33
+
34
+ change_frame_with_locals(foo, index)
35
+ end
36
+ end
37
+
38
+ def change_frame_with_locals(foo, _index)
39
+ foo.tap do |obj|
40
+ bar = 'bar'
41
+ hash = { :foo => obj, :bar => bar } # rubocop:disable Lint/UselessAssignment
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ class BenchmarkTraceWithBindings # :nodoc:
48
+ attr_reader :frames, :exception_frames, :options, :counts
49
+
50
+ def initialize(options = {})
51
+ @options = options
52
+ @frames = []
53
+ @exception_frames = []
54
+ @exception_signature = nil
55
+ @counts = init_counts({})
56
+ end
57
+
58
+ def init_counts(counts)
59
+ [:call, :b_call, :c_call, :class].each do |event|
60
+ counts[event] = 0
61
+ end
62
+ counts
63
+ end
64
+
65
+ def enable
66
+ return if options['disable']
67
+
68
+ trace_point.enable if defined?(TracePoint)
69
+ end
70
+
71
+ def disable
72
+ return if options['disable']
73
+
74
+ trace_point.disable if defined?(TracePoint)
75
+ end
76
+
77
+ def trace_point # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
78
+ return unless defined?(TracePoint)
79
+
80
+ @trace_point ||= TracePoint.new(:call, :return, :b_call, :b_return, :c_call, :c_return, :raise) do |tp|
81
+ next if options['hook_only']
82
+
83
+ case tp.event
84
+ when :call, :b_call, :c_call, :class
85
+ @counts[tp.event] += 1 if options['counts']
86
+ frame = options['frame'] ? frame(tp) : {}
87
+ frames.push frame if options['stack']
88
+ when :return, :b_return, :c_return, :end
89
+ frames.pop if options['stack']
90
+ end
91
+ end
92
+ end
93
+
94
+ def frame(trace)
95
+ {
96
+ :binding => trace.binding,
97
+ :defined_class => trace.defined_class,
98
+ :method_id => trace.method_id,
99
+ :path => trace.path,
100
+ :lineno => trace.lineno
101
+ }
102
+ end
103
+ end
@@ -1,21 +1,30 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  require File.expand_path('../lib/rollbar/version', __FILE__)
3
4
 
4
5
  Gem::Specification.new do |gem|
5
- is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && 'jruby' == RUBY_ENGINE)
6
+ _is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby')
6
7
 
7
8
  gem.authors = ['Rollbar, Inc.']
8
9
  gem.email = ['support@rollbar.com']
9
- gem.description = %q{Easy and powerful exception tracking for Ruby}
10
+ gem.description = 'Easy and powerful exception tracking for Ruby'
10
11
  gem.executables = ['rollbar-rails-runner']
11
- gem.summary = %q{Reports exceptions to Rollbar}
12
+ gem.summary = 'Reports exceptions to Rollbar'
12
13
  gem.homepage = 'https://rollbar.com'
13
14
  gem.license = 'MIT'
14
15
  gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
16
  gem.name = 'rollbar'
16
17
  gem.require_paths = ['lib']
17
18
  gem.required_ruby_version = '>= 1.9.3'
18
- gem.version = Rollbar::VERSION
19
+ gem.version = Rollbar::VERSION
19
20
 
20
21
  gem.add_runtime_dependency 'multi_json'
22
+
23
+ if gem.respond_to?(:metadata)
24
+ gem.metadata['changelog_uri'] = 'https://github.com/rollbar/rollbar-gem/releases'
25
+ gem.metadata['source_code_uri'] = 'https://github.com/rollbar/rollbar-gem'
26
+ gem.metadata['bug_tracker_uri'] = 'https://github.com/rollbar/rollbar-gem/issues'
27
+ gem.metadata['homepage_uri'] = 'https://rollbar.com/'
28
+ gem.metadata['documentation_uri'] = 'https://docs.rollbar.com/docs/ruby'
29
+ end
21
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rollbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.2
4
+ version: 2.19.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rollbar, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-27 00:00:00.000000000 Z
11
+ date: 2019-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -85,6 +85,7 @@ files:
85
85
  - lib/rollbar/item.rb
86
86
  - lib/rollbar/item/backtrace.rb
87
87
  - lib/rollbar/item/frame.rb
88
+ - lib/rollbar/item/locals.rb
88
89
  - lib/rollbar/js.rb
89
90
  - lib/rollbar/json.rb
90
91
  - lib/rollbar/json/default.rb
@@ -102,6 +103,7 @@ files:
102
103
  - lib/rollbar/middleware/rails/show_exceptions.rb
103
104
  - lib/rollbar/middleware/sinatra.rb
104
105
  - lib/rollbar/notifier.rb
106
+ - lib/rollbar/notifier/trace_with_bindings.rb
105
107
  - lib/rollbar/plugin.rb
106
108
  - lib/rollbar/plugins.rb
107
109
  - lib/rollbar/plugins/active_job.rb
@@ -140,12 +142,18 @@ files:
140
142
  - lib/rollbar/util/ip_anonymizer.rb
141
143
  - lib/rollbar/util/ip_obfuscator.rb
142
144
  - lib/rollbar/version.rb
145
+ - lib/tasks/benchmark.rake
143
146
  - lib/tasks/tasks.rake
144
147
  - rollbar.gemspec
145
148
  homepage: https://rollbar.com
146
149
  licenses:
147
150
  - MIT
148
- metadata: {}
151
+ metadata:
152
+ changelog_uri: https://github.com/rollbar/rollbar-gem/releases
153
+ source_code_uri: https://github.com/rollbar/rollbar-gem
154
+ bug_tracker_uri: https://github.com/rollbar/rollbar-gem/issues
155
+ homepage_uri: https://rollbar.com/
156
+ documentation_uri: https://docs.rollbar.com/docs/ruby
149
157
  post_install_message:
150
158
  rdoc_options: []
151
159
  require_paths:
@@ -161,8 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
169
  - !ruby/object:Gem::Version
162
170
  version: '0'
163
171
  requirements: []
164
- rubyforge_project:
165
- rubygems_version: 2.5.1
172
+ rubygems_version: 3.0.1
166
173
  signing_key:
167
174
  specification_version: 4
168
175
  summary: Reports exceptions to Rollbar