rollbar 2.25.1 → 3.0.0
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.
- checksums.yaml +4 -4
- data/.github/pull_request_template.md +25 -0
- data/.rubocop.yml +1 -1
- data/.travis.yml +0 -16
- data/Gemfile +5 -12
- data/README.md +10 -8
- data/data/rollbar.snippet.js +1 -1
- data/docs/configuration.md +7 -0
- data/gemfiles/rails30.gemfile +6 -18
- data/gemfiles/rails31.gemfile +6 -18
- data/gemfiles/rails32.gemfile +6 -18
- data/gemfiles/rails40.gemfile +7 -20
- data/gemfiles/rails41.gemfile +6 -18
- data/gemfiles/rails42.gemfile +6 -18
- data/gemfiles/rails50.gemfile +4 -13
- data/gemfiles/rails51.gemfile +4 -13
- data/lib/rollbar/capistrano.rb +1 -1
- data/lib/rollbar/capistrano_tasks.rb +10 -1
- data/lib/rollbar/configuration.rb +2 -0
- data/lib/rollbar/item.rb +9 -2
- data/lib/rollbar/item/backtrace.rb +1 -1
- data/lib/rollbar/language_support.rb +0 -6
- data/lib/rollbar/middleware/js.rb +5 -2
- data/lib/rollbar/notifier.rb +79 -25
- data/lib/rollbar/plugins/delayed_job/plugin.rb +4 -0
- data/lib/rollbar/rake_tasks.rb +1 -1
- data/lib/rollbar/request_data_extractor.rb +1 -0
- data/lib/rollbar/rollbar_test.rb +6 -117
- data/lib/rollbar/scrubbers/url.rb +10 -5
- data/lib/rollbar/version.rb +1 -1
- data/rollbar.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fbf141d927e82bdfe66ceb1b2e03564cb6e57479d808c85f9fb3d15dcbf7287c
|
|
4
|
+
data.tar.gz: 751d5d3a04d4687a910c11856b24f923cf2c785bb3bc5b74eb2060d58999495d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e2fbd0041e9de24ea141abb9e24628b225b6dc80126ed7e4f4e298619db6bf4ee7c73173d6fc7e6a8405261e761d80f71b3d218e57272a64e69f0b6eb551cf08
|
|
7
|
+
data.tar.gz: ad1b5b19824aaaa731d61862d88cf7a206ec660a739b31ac0e0934b90dc0ea2d0dc6c0366a786d7b474e142d6620f253dfcebc7ad46d558bfcc449b4c2a17594
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## Description of the change
|
|
2
|
+
|
|
3
|
+
> Description here
|
|
4
|
+
## Type of change
|
|
5
|
+
- [ ] Bug fix (non-breaking change that fixes an issue)
|
|
6
|
+
- [ ] New feature (non-breaking change that adds functionality)
|
|
7
|
+
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
|
8
|
+
|
|
9
|
+
## Related issues
|
|
10
|
+
|
|
11
|
+
> Fix [#1]()
|
|
12
|
+
## Checklists
|
|
13
|
+
|
|
14
|
+
### Development
|
|
15
|
+
|
|
16
|
+
- [ ] Lint rules pass locally
|
|
17
|
+
- [ ] The code changed/added as part of this pull request has been covered with tests
|
|
18
|
+
- [ ] All tests related to the changed code pass in development
|
|
19
|
+
|
|
20
|
+
### Code review
|
|
21
|
+
|
|
22
|
+
- [ ] This pull request has a descriptive title and information useful to a reviewer. There may be a screenshot or screencast attached
|
|
23
|
+
- [ ] "Ready for review" label attached to the PR and reviewers mentioned in a comment
|
|
24
|
+
- [ ] Changes have been reviewed by at least one other engineer
|
|
25
|
+
- [ ] Issue from task tracker has a link to this pull request
|
data/.rubocop.yml
CHANGED
|
@@ -51,7 +51,7 @@ Style/Documentation:
|
|
|
51
51
|
# As is, we currently add :nodoc: if anything at all.
|
|
52
52
|
Enabled: false
|
|
53
53
|
|
|
54
|
-
Naming/
|
|
54
|
+
Naming/UncommunicativeMethodParamName:
|
|
55
55
|
# It's possible to configure this cop to allow just about anything, but what's the point.
|
|
56
56
|
# The default min length of a param name is 3, but the the default whitelist includes things
|
|
57
57
|
# like `db` and `io`. So, short names really can be useful.
|
data/.travis.yml
CHANGED
|
@@ -5,7 +5,6 @@ services:
|
|
|
5
5
|
language: ruby
|
|
6
6
|
|
|
7
7
|
rvm:
|
|
8
|
-
- 1.9.3
|
|
9
8
|
- 2.0.0
|
|
10
9
|
- 2.1.0
|
|
11
10
|
- 2.2.2
|
|
@@ -73,12 +72,6 @@ matrix:
|
|
|
73
72
|
exclude:
|
|
74
73
|
# Don't run tests for non-jruby environments with the JDK.
|
|
75
74
|
# NOTE: openjdk7 is missing from these exclusions so that Travis will run at least 1 build for the given rvm.
|
|
76
|
-
- rvm: 1.9.3
|
|
77
|
-
jdk: openjdk8
|
|
78
|
-
- rvm: 1.9.3
|
|
79
|
-
jdk: oraclejdk8
|
|
80
|
-
- rvm: 1.9.3
|
|
81
|
-
jdk: oraclejdk9
|
|
82
75
|
- rvm: 2.0.0
|
|
83
76
|
jdk: openjdk8
|
|
84
77
|
- rvm: 2.0.0
|
|
@@ -149,15 +142,6 @@ matrix:
|
|
|
149
142
|
- rvm: 2.4.5
|
|
150
143
|
gemfile: gemfiles/rails60.gemfile
|
|
151
144
|
# Rails 5.x requires Ruby 2.2.2 or higher
|
|
152
|
-
- rvm: 1.9.3
|
|
153
|
-
gemfile: gemfiles/rails50.gemfile
|
|
154
|
-
- rvm: 1.9.3
|
|
155
|
-
gemfile: gemfiles/rails51.gemfile
|
|
156
|
-
- rvm: 1.9.3
|
|
157
|
-
gemfile: gemfiles/rails52.gemfile
|
|
158
|
-
- rvm: 1.9.3
|
|
159
|
-
gemfile: gemfiles/rails60.gemfile
|
|
160
|
-
# Rails 5.x requires Ruby 2.2.2 or higher
|
|
161
145
|
- rvm: 2.0.0
|
|
162
146
|
gemfile: gemfiles/rails50.gemfile
|
|
163
147
|
- rvm: 2.0.0
|
data/Gemfile
CHANGED
|
@@ -44,18 +44,11 @@ platforms :rbx do
|
|
|
44
44
|
gem 'rubysl', '~> 2.0' unless RUBY_VERSION.start_with?('1')
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
elsif RUBY_VERSION.start_with?('2')
|
|
53
|
-
gem 'capistrano', :require => false # rubocop:disable Bundler/DuplicatedGem
|
|
54
|
-
gem 'codacy-coverage'
|
|
55
|
-
gem 'shoryuken' # rubocop:disable Bundler/DuplicatedGem
|
|
56
|
-
gem 'simplecov'
|
|
57
|
-
gem 'sucker_punch', '~> 2.0' # rubocop:disable Bundler/DuplicatedGem
|
|
58
|
-
end
|
|
47
|
+
gem 'capistrano', :require => false
|
|
48
|
+
gem 'codacy-coverage'
|
|
49
|
+
gem 'shoryuken'
|
|
50
|
+
gem 'simplecov'
|
|
51
|
+
gem 'sucker_punch', '~> 2.0'
|
|
59
52
|
|
|
60
53
|
unless is_jruby
|
|
61
54
|
# JRuby doesn't support fork, which is required for this test helper.
|
data/README.md
CHANGED
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
[](https://dependabot.com/compatibility-score.html?dependency-name=rollbar&package-manager=bundler&version-scheme=semver&new-version=latest)
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
> WARNING: Ruby 2.6.0 introduced a new bug bug ([#15472 -
|
|
8
|
-
Invalid JSON data being sent from Net::HTTP in some cases with Ruby 2.6.0](https://bugs.ruby-lang.org/issues/15472)) that may result in the Rollbar API returning an error when an exception is reported. (See [rollbar-gem issue #797](https://github.com/rollbar/rollbar-gem/issues/797)).
|
|
9
|
-
|
|
10
|
-
> UPDATE: This bug is fixed in Ruby 2.6.1, and rollbar-gem has a safe workaround in version >= 2.19.0.
|
|
11
|
-
If you need to stay on Ruby 2.6.0 for any reason, make sure you have the latest rollbar-gem.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
7
|
[Rollbar](https://rollbar.com) is a real-time exception reporting service for Ruby and other languages. The Rollbar service will alert you of problems with your code and help you understand them in a ways never possible before. We love it and we hope you will too.
|
|
16
8
|
|
|
17
9
|
Rollbar-gem is the SDK for Ruby apps and includes support for apps using Rails, Sinatra, Rack, plain Ruby, and other frameworks.
|
|
@@ -27,10 +19,20 @@ For complete usage instructions and configuration reference, see our [Ruby SDK d
|
|
|
27
19
|
|
|
28
20
|
## Compatibility
|
|
29
21
|
|
|
22
|
+
Version >= 3.0.0 is compatible with Ruby >= 2.0.0.
|
|
23
|
+
|
|
30
24
|
Version >= 2.19.0 is compatible with Ruby >= 1.9.3.
|
|
31
25
|
|
|
32
26
|
Version < 2.19.0 is compatible with Ruby >= 1.8.7.
|
|
33
27
|
|
|
28
|
+
### Ruby 2.6.0
|
|
29
|
+
|
|
30
|
+
> WARNING: Ruby 2.6.0 introduced a new bug bug ([#15472 -
|
|
31
|
+
Invalid JSON data being sent from Net::HTTP in some cases with Ruby 2.6.0](https://bugs.ruby-lang.org/issues/15472)) that may result in the Rollbar API returning an error when an exception is reported. (See [rollbar-gem issue #797](https://github.com/rollbar/rollbar-gem/issues/797)).
|
|
32
|
+
|
|
33
|
+
> UPDATE: This bug is fixed in Ruby 2.6.1, and rollbar-gem has a safe workaround in version >= 2.19.0.
|
|
34
|
+
If you need to stay on Ruby 2.6.0 for any reason, make sure you have the latest rollbar-gem.
|
|
35
|
+
|
|
34
36
|
## Release History & Changelog
|
|
35
37
|
|
|
36
38
|
See our [Releases](https://github.com/rollbar/rollbar-gem/releases) page for a list of all releases, including changes.
|
data/data/rollbar.snippet.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(
|
|
1
|
+
!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.19.3/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||"object"==typeof a&&a.network)&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);
|
data/docs/configuration.md
CHANGED
|
@@ -108,6 +108,13 @@ Rollbar notifier.
|
|
|
108
108
|
|
|
109
109
|
The number of job failures before reporting the failure to Rollbar.
|
|
110
110
|
|
|
111
|
+
### async_skip_report_handler
|
|
112
|
+
|
|
113
|
+
**Default** `nil`
|
|
114
|
+
**Example** `-> (job) { job.cron? }`
|
|
115
|
+
|
|
116
|
+
A handler, should respond to `#call`, receives the job and returns a boolean. If true, reporting errors will be skipped. If provided, dj_threshold isn't checked.
|
|
117
|
+
|
|
111
118
|
### enabled
|
|
112
119
|
|
|
113
120
|
**Default** `true`
|
data/gemfiles/rails30.gemfile
CHANGED
|
@@ -34,17 +34,11 @@ platforms :rbx do
|
|
|
34
34
|
gem 'rubysl-test-unit'
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
gem 'capistrano', :require => false
|
|
43
|
-
gem 'sucker_punch', '~> 2.0'
|
|
44
|
-
gem 'shoryuken'
|
|
45
|
-
gem 'codacy-coverage'
|
|
46
|
-
gem 'simplecov'
|
|
47
|
-
end
|
|
37
|
+
gem 'capistrano', :require => false
|
|
38
|
+
gem 'sucker_punch', '~> 2.0'
|
|
39
|
+
gem 'shoryuken'
|
|
40
|
+
gem 'codacy-coverage'
|
|
41
|
+
gem 'simplecov'
|
|
48
42
|
|
|
49
43
|
gem 'sinatra'
|
|
50
44
|
gem 'delayed_job', :require => false
|
|
@@ -54,13 +48,7 @@ gem 'genspec', '>= 0.2.8'
|
|
|
54
48
|
gem 'girl_friday', '>= 0.11.1'
|
|
55
49
|
gem 'rspec-command'
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
gem 'public_suffix', '< 1.5'
|
|
59
|
-
gem 'mime-types', '< 3.0'
|
|
60
|
-
gem 'webmock', '< 2.3.0', :require => false
|
|
61
|
-
else
|
|
62
|
-
gem 'webmock', :require => false
|
|
63
|
-
end
|
|
51
|
+
gem 'webmock', :require => false
|
|
64
52
|
|
|
65
53
|
gem 'resque', '< 2.0.0'
|
|
66
54
|
gem 'aws-sdk-sqs'
|
data/gemfiles/rails31.gemfile
CHANGED
|
@@ -33,17 +33,11 @@ platforms :rbx do
|
|
|
33
33
|
gem 'rubysl-test-unit'
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
gem 'capistrano', :require => false
|
|
42
|
-
gem 'sucker_punch'
|
|
43
|
-
gem 'shoryuken'
|
|
44
|
-
gem 'codacy-coverage'
|
|
45
|
-
gem 'simplecov'
|
|
46
|
-
end
|
|
36
|
+
gem 'capistrano', :require => false
|
|
37
|
+
gem 'sucker_punch'
|
|
38
|
+
gem 'shoryuken'
|
|
39
|
+
gem 'codacy-coverage'
|
|
40
|
+
gem 'simplecov'
|
|
47
41
|
|
|
48
42
|
gem 'sinatra'
|
|
49
43
|
gem 'delayed_job', :require => false
|
|
@@ -53,13 +47,7 @@ gem 'girl_friday'
|
|
|
53
47
|
gem 'generator_spec'
|
|
54
48
|
gem 'rspec-command'
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
gem 'mime-types', '< 3.0'
|
|
58
|
-
gem 'public_suffix', '< 1.5'
|
|
59
|
-
gem 'webmock', '< 2.3.0', :require => false
|
|
60
|
-
else
|
|
61
|
-
gem 'webmock', :require => false
|
|
62
|
-
end
|
|
50
|
+
gem 'webmock', :require => false
|
|
63
51
|
|
|
64
52
|
gem 'resque', '< 2.0.0'
|
|
65
53
|
gem 'aws-sdk-sqs'
|
data/gemfiles/rails32.gemfile
CHANGED
|
@@ -35,17 +35,11 @@ platforms :rbx do
|
|
|
35
35
|
gem 'rubysl-test-unit'
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
gem 'capistrano', :require => false
|
|
44
|
-
gem 'sucker_punch', '~> 2.0'
|
|
45
|
-
gem 'shoryuken'
|
|
46
|
-
gem 'codacy-coverage'
|
|
47
|
-
gem 'simplecov'
|
|
48
|
-
end
|
|
38
|
+
gem 'capistrano', :require => false
|
|
39
|
+
gem 'sucker_punch', '~> 2.0'
|
|
40
|
+
gem 'shoryuken'
|
|
41
|
+
gem 'codacy-coverage'
|
|
42
|
+
gem 'simplecov'
|
|
49
43
|
|
|
50
44
|
gem 'delayed_job', :require => false
|
|
51
45
|
gem 'redis'
|
|
@@ -56,13 +50,7 @@ gem 'generator_spec'
|
|
|
56
50
|
gem 'girl_friday', '>= 0.11.1'
|
|
57
51
|
gem 'rspec-command'
|
|
58
52
|
|
|
59
|
-
|
|
60
|
-
gem 'mime-types', '< 3.0'
|
|
61
|
-
gem 'public_suffix', '< 1.5'
|
|
62
|
-
gem 'webmock', '< 2.3.0', :require => false
|
|
63
|
-
else
|
|
64
|
-
gem 'webmock', :require => false
|
|
65
|
-
end
|
|
53
|
+
gem 'webmock', :require => false
|
|
66
54
|
|
|
67
55
|
gem 'resque', '< 2.0.0'
|
|
68
56
|
gem 'aws-sdk-sqs'
|
data/gemfiles/rails40.gemfile
CHANGED
|
@@ -35,19 +35,12 @@ platforms :rbx do
|
|
|
35
35
|
gem 'rubysl-test-unit'
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
gem 'capistrano', :require => false
|
|
45
|
-
gem 'sucker_punch', '~> 2.0'
|
|
46
|
-
gem 'json', '~> 2.0'
|
|
47
|
-
gem 'shoryuken'
|
|
48
|
-
gem 'codacy-coverage'
|
|
49
|
-
gem 'simplecov'
|
|
50
|
-
end
|
|
38
|
+
gem 'capistrano', :require => false
|
|
39
|
+
gem 'sucker_punch', '~> 2.0'
|
|
40
|
+
gem 'json', '~> 2.0'
|
|
41
|
+
gem 'shoryuken'
|
|
42
|
+
gem 'codacy-coverage'
|
|
43
|
+
gem 'simplecov'
|
|
51
44
|
|
|
52
45
|
gem 'delayed_job', :require => false
|
|
53
46
|
gem 'redis'
|
|
@@ -59,13 +52,7 @@ gem 'generator_spec'
|
|
|
59
52
|
gem 'girl_friday', '>= 0.11.1'
|
|
60
53
|
gem 'rspec-command'
|
|
61
54
|
|
|
62
|
-
|
|
63
|
-
gem 'mime-types', '< 3.0'
|
|
64
|
-
gem 'public_suffix', '< 1.5'
|
|
65
|
-
gem 'webmock', '< 2.3.0', :require => false
|
|
66
|
-
else
|
|
67
|
-
gem 'webmock', :require => false
|
|
68
|
-
end
|
|
55
|
+
gem 'webmock', :require => false
|
|
69
56
|
|
|
70
57
|
gem 'aws-sdk-sqs'
|
|
71
58
|
|
data/gemfiles/rails41.gemfile
CHANGED
|
@@ -32,17 +32,11 @@ platforms :rbx do
|
|
|
32
32
|
gem 'rubysl', '~> 2.0' unless RUBY_VERSION.start_with?('1')
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
gem 'capistrano', :require => false
|
|
41
|
-
gem 'sucker_punch', '~> 2.0'
|
|
42
|
-
gem 'shoryuken'
|
|
43
|
-
gem 'codacy-coverage'
|
|
44
|
-
gem 'simplecov'
|
|
45
|
-
end
|
|
35
|
+
gem 'capistrano', :require => false
|
|
36
|
+
gem 'sucker_punch', '~> 2.0'
|
|
37
|
+
gem 'shoryuken'
|
|
38
|
+
gem 'codacy-coverage'
|
|
39
|
+
gem 'simplecov'
|
|
46
40
|
|
|
47
41
|
gem 'delayed_job', :require => false
|
|
48
42
|
gem 'redis'
|
|
@@ -54,13 +48,7 @@ gem 'generator_spec'
|
|
|
54
48
|
gem 'girl_friday', '>= 0.11.1'
|
|
55
49
|
gem 'rspec-command'
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
gem 'mime-types', '< 3.0'
|
|
59
|
-
gem 'public_suffix', '< 1.5'
|
|
60
|
-
gem 'webmock', '< 2.3.0', :require => false
|
|
61
|
-
else
|
|
62
|
-
gem 'webmock', :require => false
|
|
63
|
-
end
|
|
51
|
+
gem 'webmock', :require => false
|
|
64
52
|
|
|
65
53
|
gem 'resque'
|
|
66
54
|
gem 'aws-sdk-sqs'
|
data/gemfiles/rails42.gemfile
CHANGED
|
@@ -37,13 +37,8 @@ else
|
|
|
37
37
|
gem 'sidekiq', '>= 2.13.0'
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
gem 'shoryuken', '>= 4.0.0', '<= 4.0.2'
|
|
43
|
-
elsif RUBY_VERSION.start_with?('2')
|
|
44
|
-
gem 'capistrano', :require => false
|
|
45
|
-
gem 'shoryuken'
|
|
46
|
-
end
|
|
40
|
+
gem 'capistrano', :require => false
|
|
41
|
+
gem 'shoryuken'
|
|
47
42
|
|
|
48
43
|
gem 'database_cleaner', '~> 1.0.0'
|
|
49
44
|
gem 'delayed_job', :require => false
|
|
@@ -56,17 +51,10 @@ gem 'sinatra'
|
|
|
56
51
|
|
|
57
52
|
gem 'nokogiri', '~> 1.6.0' if Gem::Version.new(RUBY_VERSION) <= Gem::Version.new('2.0')
|
|
58
53
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
gem 'webmock', '< 2.3.0', :require => false
|
|
64
|
-
else
|
|
65
|
-
gem 'sucker_punch', '~> 2.0'
|
|
66
|
-
gem 'webmock', :require => false
|
|
67
|
-
gem 'codacy-coverage'
|
|
68
|
-
gem 'simplecov'
|
|
69
|
-
end
|
|
54
|
+
gem 'sucker_punch', '~> 2.0'
|
|
55
|
+
gem 'webmock', :require => false
|
|
56
|
+
gem 'codacy-coverage'
|
|
57
|
+
gem 'simplecov'
|
|
70
58
|
|
|
71
59
|
gem 'aws-sdk-sqs'
|
|
72
60
|
|
data/gemfiles/rails50.gemfile
CHANGED
|
@@ -34,15 +34,10 @@ platforms :rbx do
|
|
|
34
34
|
gem 'rubysl', '~> 2.0' unless RUBY_VERSION.start_with?('1')
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
gem 'capistrano', :require => false
|
|
42
|
-
gem 'sucker_punch', '~> 2.0'
|
|
43
|
-
gem 'codacy-coverage'
|
|
44
|
-
gem 'simplecov'
|
|
45
|
-
end
|
|
37
|
+
gem 'capistrano', :require => false
|
|
38
|
+
gem 'sucker_punch', '~> 2.0'
|
|
39
|
+
gem 'codacy-coverage'
|
|
40
|
+
gem 'simplecov'
|
|
46
41
|
|
|
47
42
|
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
|
48
43
|
gem 'rack', '2.1.2'
|
|
@@ -62,10 +57,6 @@ unless is_jruby
|
|
|
62
57
|
gem 'rspec-command'
|
|
63
58
|
end
|
|
64
59
|
|
|
65
|
-
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0')
|
|
66
|
-
gem 'mime-types', '< 3.0'
|
|
67
|
-
end
|
|
68
|
-
|
|
69
60
|
gem 'webmock', :require => false
|
|
70
61
|
|
|
71
62
|
gem 'aws-sdk-sqs'
|
data/gemfiles/rails51.gemfile
CHANGED
|
@@ -34,15 +34,10 @@ platforms :rbx do
|
|
|
34
34
|
gem 'rubysl', '~> 2.0' unless RUBY_VERSION.start_with?('1')
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
gem 'capistrano', :require => false
|
|
42
|
-
gem 'sucker_punch', '~> 2.0'
|
|
43
|
-
gem 'codacy-coverage'
|
|
44
|
-
gem 'simplecov'
|
|
45
|
-
end
|
|
37
|
+
gem 'capistrano', :require => false
|
|
38
|
+
gem 'sucker_punch', '~> 2.0'
|
|
39
|
+
gem 'codacy-coverage'
|
|
40
|
+
gem 'simplecov'
|
|
46
41
|
|
|
47
42
|
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
|
48
43
|
gem 'rack', '2.1.2'
|
|
@@ -63,10 +58,6 @@ unless is_jruby
|
|
|
63
58
|
gem 'rspec-command'
|
|
64
59
|
end
|
|
65
60
|
|
|
66
|
-
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0')
|
|
67
|
-
gem 'mime-types', '< 3.0'
|
|
68
|
-
end
|
|
69
|
-
|
|
70
61
|
gem 'webmock', :require => false
|
|
71
62
|
|
|
72
63
|
gem 'aws-sdk-sqs'
|
data/lib/rollbar/capistrano.rb
CHANGED
|
@@ -35,7 +35,7 @@ module Rollbar
|
|
|
35
35
|
_cset(:rollbar_user) { ENV['USER'] || ENV['USERNAME'] }
|
|
36
36
|
_cset(:rollbar_env) { fetch(:rails_env, 'production') }
|
|
37
37
|
_cset(:rollbar_token) { abort("Please specify the Rollbar access token, set :rollbar_token, 'your token'") }
|
|
38
|
-
_cset(:rollbar_revision) {
|
|
38
|
+
_cset(:rollbar_revision) { real_revision }
|
|
39
39
|
_cset(:rollbar_comment) { nil }
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -40,6 +40,9 @@ module Rollbar
|
|
|
40
40
|
capistrano_300_warning(logger)
|
|
41
41
|
logger.info opts[:desc] if opts[:desc]
|
|
42
42
|
yield
|
|
43
|
+
|
|
44
|
+
rescue StandardError => e
|
|
45
|
+
logger.error "Error reporting to Rollbar: #{e.inspect}"
|
|
43
46
|
end
|
|
44
47
|
|
|
45
48
|
def deploy_update(capistrano, logger, dry_run, opts = {})
|
|
@@ -61,7 +64,11 @@ module Rollbar
|
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
def capistrano_300_warning(logger)
|
|
64
|
-
|
|
67
|
+
return unless ::Capistrano.const_defined?('VERSION') && ::Capistrano::VERSION =~ /^3\.0/
|
|
68
|
+
|
|
69
|
+
logger.warn('You need to upgrade capistrano to >= 3.1 version in order'\
|
|
70
|
+
'to correctly report deploys to Rollbar. (On 3.0, the reported revision'\
|
|
71
|
+
'will be incorrect.)')
|
|
65
72
|
end
|
|
66
73
|
|
|
67
74
|
def report_deploy_started(capistrano, dry_run)
|
|
@@ -83,6 +90,7 @@ module Rollbar
|
|
|
83
90
|
def report_deploy_succeeded(capistrano, dry_run)
|
|
84
91
|
::Rollbar::Deploy.update(
|
|
85
92
|
{
|
|
93
|
+
:comment => capistrano.fetch(:rollbar_comment),
|
|
86
94
|
:proxy => :ENV,
|
|
87
95
|
:dry_run => dry_run
|
|
88
96
|
},
|
|
@@ -95,6 +103,7 @@ module Rollbar
|
|
|
95
103
|
def report_deploy_failed(capistrano, dry_run)
|
|
96
104
|
::Rollbar::Deploy.update(
|
|
97
105
|
{
|
|
106
|
+
:comment => capistrano.fetch(:rollbar_comment),
|
|
98
107
|
:proxy => :ENV,
|
|
99
108
|
:dry_run => dry_run
|
|
100
109
|
},
|
|
@@ -19,6 +19,7 @@ module Rollbar
|
|
|
19
19
|
attr_accessor :disable_core_monkey_patch
|
|
20
20
|
attr_accessor :enable_error_context
|
|
21
21
|
attr_accessor :dj_threshold
|
|
22
|
+
attr_accessor :async_skip_report_handler
|
|
22
23
|
attr_accessor :enabled
|
|
23
24
|
attr_accessor :endpoint
|
|
24
25
|
attr_accessor :environment
|
|
@@ -97,6 +98,7 @@ module Rollbar
|
|
|
97
98
|
@disable_rack_monkey_patch = false
|
|
98
99
|
@enable_error_context = true
|
|
99
100
|
@dj_threshold = 0
|
|
101
|
+
@async_skip_report_handler = nil
|
|
100
102
|
@enabled = nil # set to true when configure is called
|
|
101
103
|
@endpoint = DEFAULT_ENDPOINT
|
|
102
104
|
@environment = nil
|
data/lib/rollbar/item.rb
CHANGED
|
@@ -136,11 +136,18 @@ module Rollbar
|
|
|
136
136
|
uuid = stringified_payload['data']['uuid']
|
|
137
137
|
host = stringified_payload['data'].fetch('server', {})['host']
|
|
138
138
|
|
|
139
|
+
original_error = {
|
|
140
|
+
:message => message,
|
|
141
|
+
:exception => exception,
|
|
142
|
+
:configuration => configuration,
|
|
143
|
+
:uuid => uuid,
|
|
144
|
+
:host => host
|
|
145
|
+
}
|
|
146
|
+
|
|
139
147
|
notifier.send_failsafe(
|
|
140
148
|
too_large_payload_string(attempts),
|
|
141
149
|
nil,
|
|
142
|
-
|
|
143
|
-
host
|
|
150
|
+
original_error
|
|
144
151
|
)
|
|
145
152
|
logger.error("[Rollbar] Payload too large to be sent for UUID #{uuid}: #{Rollbar::JSON.dump(payload)}")
|
|
146
153
|
end
|
|
@@ -55,7 +55,7 @@ module Rollbar
|
|
|
55
55
|
current_exception = exception
|
|
56
56
|
|
|
57
57
|
while current_exception.respond_to?(:cause) && (cause = current_exception.cause) && cause.is_a?(Exception) && !visited.include?(cause)
|
|
58
|
-
traces
|
|
58
|
+
traces << trace_data(cause)
|
|
59
59
|
visited << cause
|
|
60
60
|
current_exception = cause
|
|
61
61
|
end
|
|
@@ -10,10 +10,6 @@ module Rollbar
|
|
|
10
10
|
mod.const_get(target, inherit)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def ruby_19?
|
|
14
|
-
version?('1.9')
|
|
15
|
-
end
|
|
16
|
-
|
|
17
13
|
def version?(version)
|
|
18
14
|
numbers = version.split('.')
|
|
19
15
|
|
|
@@ -21,8 +17,6 @@ module Rollbar
|
|
|
21
17
|
end
|
|
22
18
|
|
|
23
19
|
def timeout_exceptions
|
|
24
|
-
return [] if ruby_19?
|
|
25
|
-
|
|
26
20
|
[Net::ReadTimeout, Net::OpenTimeout]
|
|
27
21
|
end
|
|
28
22
|
end
|
|
@@ -80,8 +80,11 @@ module Rollbar
|
|
|
80
80
|
return app_result unless response_string
|
|
81
81
|
|
|
82
82
|
env[JS_IS_INJECTED_KEY] = true
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
|
|
84
|
+
status, headers, = app_result
|
|
85
|
+
headers['Content-Length'] = response_string.bytesize.to_s if headers.key?('Content-Length')
|
|
86
|
+
|
|
87
|
+
response = ::Rack::Response.new(response_string, status, headers)
|
|
85
88
|
|
|
86
89
|
finished = response.finish
|
|
87
90
|
|
data/lib/rollbar/notifier.rb
CHANGED
|
@@ -21,6 +21,7 @@ module Rollbar
|
|
|
21
21
|
|
|
22
22
|
MUTEX = Mutex.new
|
|
23
23
|
EXTENSION_REGEXP = /.rollbar\z/.freeze
|
|
24
|
+
FAILSAFE_STRING_LENGTH = 10_000
|
|
24
25
|
|
|
25
26
|
def initialize(parent_notifier = nil, payload_options = nil, scope = nil)
|
|
26
27
|
if parent_notifier
|
|
@@ -158,7 +159,13 @@ module Rollbar
|
|
|
158
159
|
def report_with_rescue(level, message, exception, extra, context)
|
|
159
160
|
report(level, message, exception, extra, context)
|
|
160
161
|
rescue StandardError, SystemStackError => e
|
|
161
|
-
|
|
162
|
+
original_error = {
|
|
163
|
+
:message => message,
|
|
164
|
+
:exception => exception,
|
|
165
|
+
:configuration => configuration
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
report_internal_error(e, original_error)
|
|
162
169
|
|
|
163
170
|
'error'
|
|
164
171
|
end
|
|
@@ -262,32 +269,32 @@ module Rollbar
|
|
|
262
269
|
end
|
|
263
270
|
end
|
|
264
271
|
|
|
265
|
-
def
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
log_error "[Rollbar] Sending failsafe response due to #{exception_reason}"
|
|
269
|
-
|
|
270
|
-
body = failsafe_body(exception_reason)
|
|
271
|
-
|
|
272
|
-
failsafe_data = {
|
|
272
|
+
def failsafe_initial_data(exception_reason)
|
|
273
|
+
{
|
|
273
274
|
:level => 'error',
|
|
274
275
|
:environment => configuration.environment.to_s,
|
|
275
276
|
:body => {
|
|
276
277
|
:message => {
|
|
277
|
-
:body =>
|
|
278
|
+
:body => failsafe_body(exception_reason)
|
|
278
279
|
}
|
|
279
280
|
},
|
|
280
281
|
:notifier => {
|
|
281
282
|
:name => 'rollbar-gem',
|
|
282
283
|
:version => VERSION
|
|
283
284
|
},
|
|
284
|
-
:custom => {
|
|
285
|
-
:orig_uuid => uuid,
|
|
286
|
-
:orig_host => host
|
|
287
|
-
},
|
|
288
285
|
:internal => true,
|
|
289
286
|
'failsafe' => true
|
|
290
287
|
}
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def send_failsafe(message, exception, original_error = nil)
|
|
291
|
+
exception_reason = failsafe_reason(message, exception)
|
|
292
|
+
|
|
293
|
+
log_error "[Rollbar] Sending failsafe response due to #{exception_reason}"
|
|
294
|
+
|
|
295
|
+
failsafe_data = failsafe_initial_data(exception_reason)
|
|
296
|
+
|
|
297
|
+
failsafe_add_original_error_data(failsafe_data[:notifier], original_error)
|
|
291
298
|
|
|
292
299
|
failsafe_payload = {
|
|
293
300
|
'data' => failsafe_data
|
|
@@ -298,7 +305,9 @@ module Rollbar
|
|
|
298
305
|
:notifier => self,
|
|
299
306
|
:configuration => configuration,
|
|
300
307
|
:logger => logger)
|
|
301
|
-
|
|
308
|
+
|
|
309
|
+
process_item(item)
|
|
310
|
+
log_and_return_item_data(item)
|
|
302
311
|
rescue StandardError => e
|
|
303
312
|
log_error "[Rollbar] Error sending failsafe : #{e}"
|
|
304
313
|
end
|
|
@@ -306,6 +315,57 @@ module Rollbar
|
|
|
306
315
|
failsafe_payload
|
|
307
316
|
end
|
|
308
317
|
|
|
318
|
+
def failsafe_add_original_error_data(payload_notifier, original_error)
|
|
319
|
+
return unless original_error
|
|
320
|
+
|
|
321
|
+
payload_notifier[:diagnostic] ||= {}
|
|
322
|
+
|
|
323
|
+
add_original_host(payload_notifier[:diagnostic], original_error)
|
|
324
|
+
add_original_uuid(payload_notifier[:diagnostic], original_error)
|
|
325
|
+
add_original_message(payload_notifier[:diagnostic], original_error)
|
|
326
|
+
add_original_error(payload_notifier[:diagnostic], original_error)
|
|
327
|
+
add_configured_options(payload_notifier, original_error)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def add_original_message(diagnostic, original_error)
|
|
331
|
+
diagnostic[:original_message] = original_error[:message].truncate(FAILSAFE_STRING_LENGTH) if original_error[:message]
|
|
332
|
+
|
|
333
|
+
rescue StandardError => e
|
|
334
|
+
diagnostic[:original_message] = "Failed: #{e.message}"
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def add_original_error(diagnostic, original_error)
|
|
338
|
+
if original_error[:exception]
|
|
339
|
+
backtrace = original_error[:exception].backtrace
|
|
340
|
+
message = original_error[:exception].message
|
|
341
|
+
diagnostic[:original_error] = {
|
|
342
|
+
:message => message && message.truncate(FAILSAFE_STRING_LENGTH),
|
|
343
|
+
:stack => backtrace && backtrace.join(', ').truncate(FAILSAFE_STRING_LENGTH)
|
|
344
|
+
}
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
rescue StandardError => e
|
|
348
|
+
diagnostic[:original_error] = "Failed: #{e.message}"
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def add_configured_options(payload_notifier, original_error)
|
|
352
|
+
if original_error[:configuration]
|
|
353
|
+
configured = original_error[:configuration].configured_options.configured
|
|
354
|
+
payload_notifier[:configured_options] = ::JSON.generate(configured).truncate(FAILSAFE_STRING_LENGTH)
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
rescue StandardError => e
|
|
358
|
+
payload_notifier[:configured_options] = "Failed: #{e.message}"
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
def add_original_host(diagnostic, original_error)
|
|
362
|
+
diagnostic[:original_host] = original_error[:host] if original_error[:host]
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def add_original_uuid(diagnostic, original_error)
|
|
366
|
+
diagnostic[:original_uuid] = original_error[:uuid] if original_error[:uuid]
|
|
367
|
+
end
|
|
368
|
+
|
|
309
369
|
## Logging
|
|
310
370
|
%w[debug info warn error].each do |level|
|
|
311
371
|
define_method(:"log_#{level}") do |message|
|
|
@@ -461,7 +521,7 @@ module Rollbar
|
|
|
461
521
|
# Reports an internal error in the Rollbar library. This will be reported within the configured
|
|
462
522
|
# Rollbar project. We'll first attempt to provide a report including the exception traceback.
|
|
463
523
|
# If that fails, we'll fall back to a more static failsafe response.
|
|
464
|
-
def report_internal_error(exception)
|
|
524
|
+
def report_internal_error(exception, original_error = nil)
|
|
465
525
|
log_error '[Rollbar] Reporting internal error encountered while sending data to Rollbar.'
|
|
466
526
|
|
|
467
527
|
configuration.execute_hook(:on_report_internal_error, exception)
|
|
@@ -469,7 +529,7 @@ module Rollbar
|
|
|
469
529
|
begin
|
|
470
530
|
item = build_item('error', nil, exception, { :internal => true }, nil)
|
|
471
531
|
rescue StandardError => e
|
|
472
|
-
send_failsafe('build_item in exception_data', e)
|
|
532
|
+
send_failsafe('build_item in exception_data', e, original_error)
|
|
473
533
|
log_error "[Rollbar] Exception: #{exception}"
|
|
474
534
|
return
|
|
475
535
|
end
|
|
@@ -477,7 +537,7 @@ module Rollbar
|
|
|
477
537
|
begin
|
|
478
538
|
process_item(item)
|
|
479
539
|
rescue StandardError => e
|
|
480
|
-
send_failsafe('error in process_item', e)
|
|
540
|
+
send_failsafe('error in process_item', e, original_error)
|
|
481
541
|
log_error "[Rollbar] Item: #{item}"
|
|
482
542
|
return
|
|
483
543
|
end
|
|
@@ -485,7 +545,7 @@ module Rollbar
|
|
|
485
545
|
begin
|
|
486
546
|
log_instance_link(item['data'])
|
|
487
547
|
rescue StandardError => e
|
|
488
|
-
send_failsafe('error logging instance link', e)
|
|
548
|
+
send_failsafe('error logging instance link', e, original_error)
|
|
489
549
|
log_error "[Rollbar] Item: #{item}"
|
|
490
550
|
return
|
|
491
551
|
end
|
|
@@ -638,8 +698,6 @@ module Rollbar
|
|
|
638
698
|
end
|
|
639
699
|
|
|
640
700
|
def handle_net_retries
|
|
641
|
-
return yield if skip_retries?
|
|
642
|
-
|
|
643
701
|
retries = configuration.net_retries - 1
|
|
644
702
|
|
|
645
703
|
begin
|
|
@@ -653,10 +711,6 @@ module Rollbar
|
|
|
653
711
|
end
|
|
654
712
|
end
|
|
655
713
|
|
|
656
|
-
def skip_retries?
|
|
657
|
-
Rollbar::LanguageSupport.ruby_19?
|
|
658
|
-
end
|
|
659
|
-
|
|
660
714
|
def handle_response(response)
|
|
661
715
|
if response.code == '200'
|
|
662
716
|
log_info '[Rollbar] Success'
|
data/lib/rollbar/rake_tasks.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
namespace :rollbar do
|
|
3
|
-
desc 'Verify your gem installation by sending a test
|
|
3
|
+
desc 'Verify your gem installation by sending a test message to Rollbar'
|
|
4
4
|
task :test => [:environment] do
|
|
5
5
|
rollbar_dir = Gem.loaded_specs['rollbar'].full_gem_path
|
|
6
6
|
require "#{rollbar_dir}/lib/rollbar/rollbar_test"
|
|
@@ -131,6 +131,7 @@ module Rollbar
|
|
|
131
131
|
host = host.split(',').first.strip unless host.empty?
|
|
132
132
|
|
|
133
133
|
path = env['ORIGINAL_FULLPATH'] || env['REQUEST_URI']
|
|
134
|
+
path ||= "#{env['SCRIPT_NAME']}#{env['PATH_INFO']}#{"?#{env['QUERY_STRING']}" unless env['QUERY_STRING'].to_s.empty?}"
|
|
134
135
|
unless path.nil? || path.empty?
|
|
135
136
|
path = '/' + path.to_s if path.to_s.slice(0, 1) != '/'
|
|
136
137
|
end
|
data/lib/rollbar/rollbar_test.rb
CHANGED
|
@@ -1,48 +1,16 @@
|
|
|
1
1
|
require 'rollbar'
|
|
2
|
-
begin
|
|
3
|
-
require 'rack/mock'
|
|
4
|
-
rescue LoadError
|
|
5
|
-
puts 'Cannot load rack/mock'
|
|
6
|
-
end
|
|
7
|
-
require 'logger'
|
|
8
2
|
|
|
9
|
-
# Module to inject into the Rails controllers or rack apps
|
|
10
3
|
module RollbarTest # :nodoc:
|
|
11
|
-
def test_rollbar
|
|
12
|
-
puts 'Raising RollbarTestingException to simulate app failure.'
|
|
13
|
-
|
|
14
|
-
raise RollbarTestingException.new, ::RollbarTest.success_message
|
|
15
|
-
end
|
|
16
|
-
|
|
17
4
|
def self.run
|
|
18
5
|
return unless confirmed_token?
|
|
19
6
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
puts 'Testing manual report...'
|
|
23
|
-
Rollbar.error('Test error from rollbar:test')
|
|
24
|
-
|
|
25
|
-
return unless defined?(Rack::MockRequest)
|
|
26
|
-
|
|
27
|
-
protocol, app = setup_app
|
|
28
|
-
|
|
29
|
-
puts 'Processing...'
|
|
30
|
-
env = Rack::MockRequest.env_for("#{protocol}://www.example.com/verify", 'REMOTE_ADDR' => '127.0.0.1')
|
|
31
|
-
status, = app.call(env)
|
|
32
|
-
|
|
33
|
-
puts error_message unless status.to_i == 500
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def self.configure_rails
|
|
37
|
-
Rails.logger = if defined?(ActiveSupport::TaggedLogging)
|
|
38
|
-
ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
|
|
39
|
-
else
|
|
40
|
-
Logger.new(STDOUT)
|
|
41
|
-
end
|
|
7
|
+
puts 'Test sending to Rollbar...'
|
|
8
|
+
result = Rollbar.info('Test message from rollbar:test')
|
|
42
9
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
10
|
+
if result == 'error'
|
|
11
|
+
puts error_message
|
|
12
|
+
else
|
|
13
|
+
puts success_message
|
|
46
14
|
end
|
|
47
15
|
end
|
|
48
16
|
|
|
@@ -54,69 +22,6 @@ module RollbarTest # :nodoc:
|
|
|
54
22
|
false
|
|
55
23
|
end
|
|
56
24
|
|
|
57
|
-
def self.authlogic_config
|
|
58
|
-
# from http://stackoverflow.com/questions/5270835/authlogic-activation-problems
|
|
59
|
-
return unless defined?(Authlogic)
|
|
60
|
-
|
|
61
|
-
Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def self.setup_app
|
|
65
|
-
puts 'Setting up the test app.'
|
|
66
|
-
|
|
67
|
-
if defined?(Rails)
|
|
68
|
-
app = rails_app
|
|
69
|
-
|
|
70
|
-
draw_rails_route(app)
|
|
71
|
-
|
|
72
|
-
authlogic_config
|
|
73
|
-
|
|
74
|
-
[rails_protocol(app), app]
|
|
75
|
-
else
|
|
76
|
-
['http', rack_app]
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def self.rails_app
|
|
81
|
-
# The setup below is needed for Rails 5.x, but not for Rails 4.x and below.
|
|
82
|
-
# (And fails on Rails 4.x in various ways depending on the exact version.)
|
|
83
|
-
return Rails.application if Rails.version < '5.0.0'
|
|
84
|
-
|
|
85
|
-
# Spring now runs by default in development on all new Rails installs. This causes
|
|
86
|
-
# the new `/verify` route to not get picked up if `config.cache_classes == false`
|
|
87
|
-
# which is also a default in development env.
|
|
88
|
-
#
|
|
89
|
-
# `config.cache_classes` needs to be set, but the only possible time is at app load,
|
|
90
|
-
# so here we clone the default app with an updated config.
|
|
91
|
-
#
|
|
92
|
-
config = Rails.application.config
|
|
93
|
-
config.cache_classes = true
|
|
94
|
-
|
|
95
|
-
# Make a copy of the app, so the config can be updated.
|
|
96
|
-
Rails.application.class.name.constantize.new(:config => config)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def self.draw_rails_route(app)
|
|
100
|
-
app.routes_reloader.execute_if_updated
|
|
101
|
-
app.routes.draw do
|
|
102
|
-
get 'verify' => 'rollbar_test#verify', :as => 'verify'
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def self.rails_protocol(app)
|
|
107
|
-
defined?(app.config.force_ssl && app.config.force_ssl) ? 'https' : 'http'
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def self.rack_app
|
|
111
|
-
Class.new do
|
|
112
|
-
include RollbarTest
|
|
113
|
-
|
|
114
|
-
def self.call(_env)
|
|
115
|
-
new.test_rollbar
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
25
|
def self.token_error_message
|
|
121
26
|
'Rollbar needs an access token configured. Check the README for instructions.'
|
|
122
27
|
end
|
|
@@ -129,19 +34,3 @@ module RollbarTest # :nodoc:
|
|
|
129
34
|
'Testing rollbar with "rake rollbar:test". If you can see this, it works.'
|
|
130
35
|
end
|
|
131
36
|
end
|
|
132
|
-
|
|
133
|
-
class RollbarTestingException < RuntimeError; end
|
|
134
|
-
|
|
135
|
-
if defined?(Rails)
|
|
136
|
-
class RollbarTestController < ActionController::Base # :nodoc:
|
|
137
|
-
include RollbarTest
|
|
138
|
-
|
|
139
|
-
def verify
|
|
140
|
-
test_rollbar
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def logger
|
|
144
|
-
nil
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
@@ -67,10 +67,7 @@ module Rollbar
|
|
|
67
67
|
|
|
68
68
|
params = decode_www_form(query)
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
# We want this to rebuild array params like foo[]=1&foo[]=2
|
|
73
|
-
URI.escape(CGI.unescape(encoded_query))
|
|
70
|
+
encode_www_form(filter_query_params(params, regex, randomize_scrub_length, scrub_all, whitelist))
|
|
74
71
|
end
|
|
75
72
|
|
|
76
73
|
def decode_www_form(query)
|
|
@@ -78,7 +75,15 @@ module Rollbar
|
|
|
78
75
|
end
|
|
79
76
|
|
|
80
77
|
def encode_www_form(params)
|
|
81
|
-
URI.encode_www_form(params)
|
|
78
|
+
restore_square_brackets(URI.encode_www_form(params))
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def restore_square_brackets(query)
|
|
82
|
+
# We want this to rebuild array params like foo[]=1&foo[]=2
|
|
83
|
+
#
|
|
84
|
+
# URI.encode_www_form follows the spec at https://url.spec.whatwg.org/#concept-urlencoded-serializer
|
|
85
|
+
# and percent encodes square brackets. Here we change them back.
|
|
86
|
+
query.gsub('%5B', '[').gsub('%5D', ']')
|
|
82
87
|
end
|
|
83
88
|
|
|
84
89
|
def filter_query_params(params, regex, randomize_scrub_length, scrub_all, whitelist)
|
data/lib/rollbar/version.rb
CHANGED
data/rollbar.gemspec
CHANGED
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
|
16
16
|
gem.files += ['spec/support/rollbar_api.rb'] # useful helper for app spec/tests.
|
|
17
17
|
gem.name = 'rollbar'
|
|
18
18
|
gem.require_paths = ['lib']
|
|
19
|
-
gem.required_ruby_version = '>=
|
|
19
|
+
gem.required_ruby_version = '>= 2.0.0'
|
|
20
20
|
gem.version = Rollbar::VERSION
|
|
21
21
|
|
|
22
22
|
if gem.respond_to?(:metadata)
|
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:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rollbar, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-08-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Easy and powerful exception tracking for Ruby
|
|
14
14
|
email:
|
|
@@ -19,6 +19,7 @@ extensions: []
|
|
|
19
19
|
extra_rdoc_files: []
|
|
20
20
|
files:
|
|
21
21
|
- ".codeclimate.yml"
|
|
22
|
+
- ".github/pull_request_template.md"
|
|
22
23
|
- ".gitignore"
|
|
23
24
|
- ".gitmodules"
|
|
24
25
|
- ".rubocop.yml"
|
|
@@ -152,15 +153,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
152
153
|
requirements:
|
|
153
154
|
- - ">="
|
|
154
155
|
- !ruby/object:Gem::Version
|
|
155
|
-
version:
|
|
156
|
+
version: 2.0.0
|
|
156
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
158
|
requirements:
|
|
158
159
|
- - ">="
|
|
159
160
|
- !ruby/object:Gem::Version
|
|
160
161
|
version: '0'
|
|
161
162
|
requirements: []
|
|
162
|
-
|
|
163
|
-
rubygems_version: 2.7.7
|
|
163
|
+
rubygems_version: 3.1.2
|
|
164
164
|
signing_key:
|
|
165
165
|
specification_version: 4
|
|
166
166
|
summary: Reports exceptions to Rollbar
|