rollbar 3.1.2 → 3.2.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/Gemfile +2 -1
- data/README.md +1 -1
- data/data/rollbar.snippet.js +1 -1
- data/gemfiles/rails30.gemfile +2 -1
- data/gemfiles/rails31.gemfile +2 -1
- data/gemfiles/rails32.gemfile +2 -1
- data/gemfiles/rails40.gemfile +1 -1
- data/gemfiles/rails41.gemfile +1 -1
- data/gemfiles/rails42.gemfile +1 -1
- data/gemfiles/rails50.gemfile +1 -0
- data/gemfiles/rails51.gemfile +1 -0
- data/gemfiles/rails52.gemfile +1 -0
- data/gemfiles/rails60.gemfile +2 -1
- data/gemfiles/rails61.gemfile +2 -1
- data/lib/rollbar/capistrano_tasks.rb +22 -4
- data/lib/rollbar/configuration.rb +2 -0
- data/lib/rollbar/middleware/js.rb +27 -12
- data/lib/rollbar/plugins/sidekiq.rb +1 -1
- data/lib/rollbar/plugins/sidekiq/plugin.rb +36 -19
- data/lib/rollbar/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 425ed5a051e9393cad69cf84b7d074daf3f2d07a57b28e64946f04254bb60cbe
|
|
4
|
+
data.tar.gz: bcf8046e12ccff28c5dab1e32c40cf5d5fee74a7b02602bc4a4735ff21306480
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 64480f75431290bd39ba433f6c692ec86c0a727c8f3d4a95998b129786c5d368463e18d0f62ba3b4425a0fd468d612e67be1df0655bd1f72cc3615efeec84ed6
|
|
7
|
+
data.tar.gz: 8dfc0039125069aea04cb466a8de1674ffa16d9325d5fc54c3daea5265d62a2dbb29d227f9d48599c6233152b90ff60f4e015a5dd8a805c31c51222c96fcf3bc
|
data/Gemfile
CHANGED
|
@@ -11,7 +11,7 @@ ENV['CURRENT_GEMFILE'] ||= __FILE__
|
|
|
11
11
|
|
|
12
12
|
is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby')
|
|
13
13
|
|
|
14
|
-
GEMFILE_RAILS_VERSION = '6.1.
|
|
14
|
+
GEMFILE_RAILS_VERSION = '~> 6.1.3'.freeze
|
|
15
15
|
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
16
16
|
gem 'appraisal'
|
|
17
17
|
gem 'jruby-openssl', :platform => :jruby
|
|
@@ -74,6 +74,7 @@ gem 'redis'
|
|
|
74
74
|
gem 'resque', '< 2.0.0'
|
|
75
75
|
gem 'rubocop', '~> 0.93.0', :require => false
|
|
76
76
|
gem 'rubocop-performance', :require => false
|
|
77
|
+
gem 'secure_headers', '~> 6.3.2', :require => false
|
|
77
78
|
gem 'sinatra'
|
|
78
79
|
gem 'webmock', :require => false
|
|
79
80
|
gemspec
|
data/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Rollbar-gem
|
|
2
|
-
|
|
2
|
+

|
|
3
3
|
[](http://badge.fury.io/rb/rollbar)
|
|
4
4
|
[](https://dependabot.com/compatibility-score.html?dependency-name=rollbar&package-manager=bundler&version-scheme=semver&new-version=latest)
|
|
5
5
|
|
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(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.
|
|
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.22.0/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/gemfiles/rails30.gemfile
CHANGED
|
@@ -7,7 +7,7 @@ is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && 'jruby' == RUBY_
|
|
|
7
7
|
gem 'sqlite3', '< 1.4.0', :platform => [:ruby, :mswin, :mingw]
|
|
8
8
|
gem 'jruby-openssl', :platform => :jruby
|
|
9
9
|
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
10
|
-
gem 'rails', '3.0.20'
|
|
10
|
+
gem 'rails', '~> 3.0.20'
|
|
11
11
|
gem 'hitimes', '< 1.2.2'
|
|
12
12
|
gem 'mixlib-shellout', '<= 2.0.0'
|
|
13
13
|
gem 'net-ssh', '<= 3.1.1'
|
|
@@ -30,6 +30,7 @@ platforms :rbx do
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
gem 'capistrano', :require => false
|
|
33
|
+
gem 'rexml', '<= 3.2.4'
|
|
33
34
|
gem 'sucker_punch', '~> 2.0'
|
|
34
35
|
gem 'shoryuken'
|
|
35
36
|
gem 'codacy-coverage'
|
data/gemfiles/rails31.gemfile
CHANGED
|
@@ -10,7 +10,7 @@ gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
|
10
10
|
gem 'mixlib-shellout', '<= 2.0.0'
|
|
11
11
|
gem 'net-ssh', '<= 3.1.1'
|
|
12
12
|
gem 'public_suffix', '<= 2.0.5'
|
|
13
|
-
gem 'rails', '3.1.12'
|
|
13
|
+
gem 'rails', '~> 3.1.12'
|
|
14
14
|
gem 'rspec-rails', '~> 3.4'
|
|
15
15
|
gem 'rake', '< 11'
|
|
16
16
|
|
|
@@ -29,6 +29,7 @@ platforms :rbx do
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
gem 'capistrano', :require => false
|
|
32
|
+
gem 'rexml', '<= 3.2.4'
|
|
32
33
|
gem 'sucker_punch'
|
|
33
34
|
gem 'shoryuken'
|
|
34
35
|
gem 'codacy-coverage'
|
data/gemfiles/rails32.gemfile
CHANGED
|
@@ -9,7 +9,7 @@ gem 'jruby-openssl', :platform => :jruby
|
|
|
9
9
|
gem 'mixlib-shellout', '<= 2.0.0'
|
|
10
10
|
gem 'net-ssh', '<= 3.1.1'
|
|
11
11
|
gem 'public_suffix', '<= 2.0.5'
|
|
12
|
-
gem 'rails', '3.2.22'
|
|
12
|
+
gem 'rails', '~> 3.2.22'
|
|
13
13
|
gem 'rake'
|
|
14
14
|
gem 'rspec-rails', '~> 3.4'
|
|
15
15
|
gem 'sqlite3', '< 1.4.0', :platform => [:ruby, :mswin, :mingw]
|
|
@@ -31,6 +31,7 @@ platforms :rbx do
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
gem 'capistrano', :require => false
|
|
34
|
+
gem 'rexml', '<= 3.2.4'
|
|
34
35
|
gem 'sucker_punch', '~> 2.0'
|
|
35
36
|
gem 'shoryuken'
|
|
36
37
|
gem 'codacy-coverage'
|
data/gemfiles/rails40.gemfile
CHANGED
|
@@ -9,7 +9,7 @@ gem 'jruby-openssl', :platform => :jruby
|
|
|
9
9
|
gem 'mixlib-shellout', '<= 2.0.0'
|
|
10
10
|
gem 'net-ssh', '<= 3.1.1'
|
|
11
11
|
gem 'public_suffix', '<= 2.0.5'
|
|
12
|
-
gem 'rails', '4.0.13'
|
|
12
|
+
gem 'rails', '~> 4.0.13'
|
|
13
13
|
gem 'rake'
|
|
14
14
|
gem 'rspec-rails', '~> 3.4'
|
|
15
15
|
gem 'sqlite3', '< 1.4.0', :platform => [:ruby, :mswin, :mingw]
|
data/gemfiles/rails41.gemfile
CHANGED
|
@@ -9,7 +9,7 @@ gem 'jruby-openssl', :platform => :jruby
|
|
|
9
9
|
gem 'mixlib-shellout', '<= 2.0.0'
|
|
10
10
|
gem 'net-ssh', '<= 3.1.1'
|
|
11
11
|
gem 'public_suffix', '<= 2.0.5'
|
|
12
|
-
gem 'rails', '4.1.
|
|
12
|
+
gem 'rails', '~> 4.1.16'
|
|
13
13
|
gem 'rake'
|
|
14
14
|
gem 'rspec-rails', '~> 3.4'
|
|
15
15
|
gem 'sqlite3', '< 1.4.0', :platform => [:ruby, :mswin, :mingw]
|
data/gemfiles/rails42.gemfile
CHANGED
|
@@ -9,7 +9,7 @@ gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
|
9
9
|
gem 'jruby-openssl', :platform => :jruby
|
|
10
10
|
gem 'net-ssh', '<= 3.1.1'
|
|
11
11
|
gem 'public_suffix', '<= 2.0.5'
|
|
12
|
-
gem 'rails', '4.2.
|
|
12
|
+
gem 'rails', '~> 4.2.11'
|
|
13
13
|
gem 'rake'
|
|
14
14
|
gem 'rspec-rails', '~> 3.4'
|
|
15
15
|
gem 'sqlite3', '< 1.4.0', :platform => [:ruby, :mswin, :mingw]
|
data/gemfiles/rails50.gemfile
CHANGED
data/gemfiles/rails51.gemfile
CHANGED
data/gemfiles/rails52.gemfile
CHANGED
data/gemfiles/rails60.gemfile
CHANGED
|
@@ -7,7 +7,7 @@ is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && 'jruby' == RUBY_
|
|
|
7
7
|
|
|
8
8
|
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
9
9
|
gem 'jruby-openssl', :platform => :jruby
|
|
10
|
-
gem 'rails', '6.0.2
|
|
10
|
+
gem 'rails', '~> 6.0.2'
|
|
11
11
|
gem 'sqlite3', '~> 1.4', :platform => [:ruby, :mswin, :mingw]
|
|
12
12
|
|
|
13
13
|
gem 'rspec-rails', '~> 4.0.2'
|
|
@@ -35,6 +35,7 @@ gem 'generator_spec'
|
|
|
35
35
|
gem 'girl_friday', '>= 0.11.1'
|
|
36
36
|
gem 'redis'
|
|
37
37
|
gem 'resque'
|
|
38
|
+
gem 'secure_headers', '~> 6.3.2', :require => false
|
|
38
39
|
gem 'simplecov'
|
|
39
40
|
|
|
40
41
|
unless is_jruby
|
data/gemfiles/rails61.gemfile
CHANGED
|
@@ -6,7 +6,7 @@ is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && 'jruby' == RUBY_
|
|
|
6
6
|
|
|
7
7
|
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
|
8
8
|
gem 'jruby-openssl', :platform => :jruby
|
|
9
|
-
gem 'rails', '6.1.
|
|
9
|
+
gem 'rails', '~> 6.1.3'
|
|
10
10
|
gem 'sqlite3', '~> 1.4', :platform => [:ruby, :mswin, :mingw]
|
|
11
11
|
|
|
12
12
|
gem 'rspec-rails', '~> 4.0.2'
|
|
@@ -34,6 +34,7 @@ gem 'generator_spec'
|
|
|
34
34
|
gem 'girl_friday', '>= 0.11.1'
|
|
35
35
|
gem 'redis'
|
|
36
36
|
gem 'resque'
|
|
37
|
+
gem 'secure_headers', '~> 6.3.2', :require => false
|
|
37
38
|
gem 'simplecov'
|
|
38
39
|
|
|
39
40
|
unless is_jruby
|
|
@@ -16,7 +16,9 @@ module Rollbar
|
|
|
16
16
|
if result[:success] && (deploy_id = result[:data] && result[:data][:deploy_id])
|
|
17
17
|
capistrano.set :rollbar_deploy_id, deploy_id
|
|
18
18
|
else
|
|
19
|
-
|
|
19
|
+
message = format_message('Unable to report deploy to Rollbar',
|
|
20
|
+
result[:message])
|
|
21
|
+
log_error(logger, message)
|
|
20
22
|
end
|
|
21
23
|
end
|
|
22
24
|
end
|
|
@@ -42,7 +44,7 @@ module Rollbar
|
|
|
42
44
|
yield
|
|
43
45
|
|
|
44
46
|
rescue StandardError => e
|
|
45
|
-
logger
|
|
47
|
+
log_error logger, "Error reporting to Rollbar: #{e.inspect}"
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
def deploy_update(capistrano, logger, dry_run, opts = {})
|
|
@@ -56,7 +58,9 @@ module Rollbar
|
|
|
56
58
|
if result[:success]
|
|
57
59
|
logger.info 'Updated deploy status in Rollbar'
|
|
58
60
|
else
|
|
59
|
-
|
|
61
|
+
message = format_message('Unable to update deploy status in Rollbar',
|
|
62
|
+
result[:message])
|
|
63
|
+
log_error(logger, message)
|
|
60
64
|
end
|
|
61
65
|
end
|
|
62
66
|
end
|
|
@@ -117,7 +121,7 @@ module Rollbar
|
|
|
117
121
|
if capistrano.fetch(:rollbar_deploy_id)
|
|
118
122
|
yield
|
|
119
123
|
else
|
|
120
|
-
logger
|
|
124
|
+
log_error logger, 'Failed to update the deploy in Rollbar. No deploy id available.'
|
|
121
125
|
end
|
|
122
126
|
end
|
|
123
127
|
|
|
@@ -134,6 +138,20 @@ module Rollbar
|
|
|
134
138
|
logger.debug result[:request_info]
|
|
135
139
|
logger.debug result[:response_info] if result[:response_info]
|
|
136
140
|
end
|
|
141
|
+
|
|
142
|
+
def format_message(*args)
|
|
143
|
+
args.compact.join(': ')
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def log_error(logger, message)
|
|
147
|
+
# Capistrano 2.x doesn't have the #error method,
|
|
148
|
+
# so we use #important if #error isn't present
|
|
149
|
+
if logger.respond_to?(:error)
|
|
150
|
+
logger.error message
|
|
151
|
+
elsif logger.respond_to?(:important)
|
|
152
|
+
logger.important message
|
|
153
|
+
end
|
|
154
|
+
end
|
|
137
155
|
end
|
|
138
156
|
end
|
|
139
157
|
end
|
|
@@ -55,6 +55,7 @@ module Rollbar
|
|
|
55
55
|
attr_accessor :uncaught_exception_level
|
|
56
56
|
attr_accessor :scrub_headers
|
|
57
57
|
attr_accessor :sidekiq_threshold
|
|
58
|
+
attr_accessor :sidekiq_use_scoped_block
|
|
58
59
|
attr_reader :transform
|
|
59
60
|
attr_accessor :verify_ssl_peer
|
|
60
61
|
attr_accessor :use_async
|
|
@@ -139,6 +140,7 @@ module Rollbar
|
|
|
139
140
|
@uncaught_exception_level = 'error'
|
|
140
141
|
@scrub_headers = ['Authorization']
|
|
141
142
|
@sidekiq_threshold = 0
|
|
143
|
+
@sidekiq_use_scoped_block = false
|
|
142
144
|
@safely = false
|
|
143
145
|
@transform = []
|
|
144
146
|
@use_async = false
|
|
@@ -157,8 +157,7 @@ module Rollbar
|
|
|
157
157
|
def script_tag(content, env)
|
|
158
158
|
if (nonce = rails5_nonce(env))
|
|
159
159
|
script_tag_content = "\n<script type=\"text/javascript\" nonce=\"#{nonce}\">#{content}</script>"
|
|
160
|
-
elsif secure_headers_nonce
|
|
161
|
-
nonce = ::SecureHeaders.content_security_policy_script_nonce(::Rack::Request.new(env))
|
|
160
|
+
elsif (nonce = secure_headers_nonce(env))
|
|
162
161
|
script_tag_content = "\n<script type=\"text/javascript\" nonce=\"#{nonce}\">#{content}</script>"
|
|
163
162
|
else
|
|
164
163
|
script_tag_content = "\n<script type=\"text/javascript\">#{content}</script>"
|
|
@@ -172,14 +171,18 @@ module Rollbar
|
|
|
172
171
|
string
|
|
173
172
|
end
|
|
174
173
|
|
|
175
|
-
# Rails 5.2 Secure Content Policy
|
|
174
|
+
# Rails 5.2+ Secure Content Policy
|
|
176
175
|
def rails5_nonce(env)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
# Rails will
|
|
180
|
-
#
|
|
181
|
-
#
|
|
182
|
-
|
|
176
|
+
req = ::ActionDispatch::Request.new(env)
|
|
177
|
+
|
|
178
|
+
# Rails will only return a nonce if the app has set a nonce generator.
|
|
179
|
+
# So if we get a valid nonce here, we know we should use it.
|
|
180
|
+
#
|
|
181
|
+
# Having both 'unsafe-inline' and a nonce is a valid and preferred
|
|
182
|
+
# browser compatibility configuration.
|
|
183
|
+
#
|
|
184
|
+
# If the script_src key is missing, Rails will not add the nonce to the headers,
|
|
185
|
+
# so we detect this and will not add it in this case.
|
|
183
186
|
req.respond_to?(:content_security_policy) &&
|
|
184
187
|
req.content_security_policy &&
|
|
185
188
|
req.content_security_policy.directives['script-src'] &&
|
|
@@ -187,13 +190,21 @@ module Rollbar
|
|
|
187
190
|
end
|
|
188
191
|
|
|
189
192
|
# Secure Headers gem
|
|
190
|
-
def secure_headers_nonce
|
|
191
|
-
|
|
193
|
+
def secure_headers_nonce(env)
|
|
194
|
+
req = ::Rack::Request.new(env)
|
|
195
|
+
|
|
196
|
+
return unless secure_headers(req).append_nonce?
|
|
197
|
+
|
|
198
|
+
::SecureHeaders.content_security_policy_script_nonce(req)
|
|
192
199
|
end
|
|
193
200
|
|
|
194
|
-
def secure_headers
|
|
201
|
+
def secure_headers(req)
|
|
195
202
|
return SecureHeadersFalse.new unless defined?(::SecureHeaders::Configuration)
|
|
196
203
|
|
|
204
|
+
# If the nonce key has been set, the app is using nonces for this request.
|
|
205
|
+
# If it hasn't, we shouldn't cause one to be added to script_src, so return now.
|
|
206
|
+
return SecureHeadersFalse.new unless secure_headers_nonce_key(req)
|
|
207
|
+
|
|
197
208
|
config = ::SecureHeaders::Configuration
|
|
198
209
|
|
|
199
210
|
secure_headers_cls = nil
|
|
@@ -211,6 +222,10 @@ module Rollbar
|
|
|
211
222
|
secure_headers_cls.new
|
|
212
223
|
end
|
|
213
224
|
|
|
225
|
+
def secure_headers_nonce_key(req)
|
|
226
|
+
defined?(::SecureHeaders::NONCE_KEY) && req.env[::SecureHeaders::NONCE_KEY]
|
|
227
|
+
end
|
|
228
|
+
|
|
214
229
|
class SecureHeadersResolver
|
|
215
230
|
def append_nonce?
|
|
216
231
|
csp_needs_nonce?(find_csp)
|
|
@@ -9,7 +9,7 @@ Rollbar.plugins.define('sidekiq >= 3') do
|
|
|
9
9
|
|
|
10
10
|
Sidekiq.configure_server do |config|
|
|
11
11
|
config.server_middleware do |chain|
|
|
12
|
-
chain.add Rollbar::Sidekiq::
|
|
12
|
+
chain.add Rollbar::Sidekiq::ResetScope
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
config.error_handlers << proc do |e, context|
|
|
@@ -4,21 +4,39 @@ module Rollbar
|
|
|
4
4
|
class Sidekiq
|
|
5
5
|
PARAM_BLACKLIST = %w[backtrace error_backtrace error_message error_class].freeze
|
|
6
6
|
|
|
7
|
-
class
|
|
8
|
-
def call(_worker,
|
|
9
|
-
Rollbar.reset_notifier!
|
|
7
|
+
class ResetScope
|
|
8
|
+
def call(_worker, msg, _queue)
|
|
9
|
+
Rollbar.reset_notifier! # clears scope
|
|
10
10
|
|
|
11
|
-
yield
|
|
11
|
+
return yield unless Rollbar.configuration.sidekiq_use_scoped_block
|
|
12
|
+
|
|
13
|
+
Rollbar.scoped(Rollbar::Sidekiq.job_scope(msg)) { yield }
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
def self.handle_exception(
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
def self.handle_exception(msg, e)
|
|
18
|
+
return if skip_report?(msg, e)
|
|
19
|
+
|
|
20
|
+
Rollbar.scope(job_scope(msg)).error(e, :use_exception_level_filters => true)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.skip_report?(msg, _e)
|
|
24
|
+
job_hash = job_hash_from_msg(msg)
|
|
25
|
+
|
|
26
|
+
return false if job_hash.nil?
|
|
27
|
+
|
|
28
|
+
# when rollbar middleware catches, sidekiq's retry_job processor hasn't set
|
|
29
|
+
# the retry_count for the current job yet, so adding 1 gives the actual retry count
|
|
30
|
+
actual_retry_count = job_hash.fetch('retry_count', -1) + 1
|
|
31
|
+
job_hash['retry'] && actual_retry_count < ::Rollbar.configuration.sidekiq_threshold
|
|
32
|
+
end
|
|
18
33
|
|
|
34
|
+
def self.job_scope(msg)
|
|
19
35
|
scope = {
|
|
20
36
|
:framework => "Sidekiq: #{::Sidekiq::VERSION}"
|
|
21
37
|
}
|
|
38
|
+
job_hash = job_hash_from_msg(msg)
|
|
39
|
+
|
|
22
40
|
unless job_hash.nil?
|
|
23
41
|
params = job_hash.reject { |k| PARAM_BLACKLIST.include?(k) }
|
|
24
42
|
scope[:request] = { :params => scrub_params(params) }
|
|
@@ -26,7 +44,7 @@ module Rollbar
|
|
|
26
44
|
scope[:queue] = params['queue']
|
|
27
45
|
end
|
|
28
46
|
|
|
29
|
-
|
|
47
|
+
scope
|
|
30
48
|
end
|
|
31
49
|
|
|
32
50
|
def self.scrub_params(params)
|
|
@@ -38,22 +56,21 @@ module Rollbar
|
|
|
38
56
|
Rollbar::Scrubbers::Params.call(options)
|
|
39
57
|
end
|
|
40
58
|
|
|
41
|
-
|
|
42
|
-
return false if job_hash.nil?
|
|
43
|
-
|
|
44
|
-
# when rollbar middleware catches, sidekiq's retry_job processor hasn't set
|
|
45
|
-
# the retry_count for the current job yet, so adding 1 gives the actual retry count
|
|
46
|
-
actual_retry_count = job_hash.fetch('retry_count', -1) + 1
|
|
47
|
-
job_hash['retry'] && actual_retry_count < ::Rollbar.configuration.sidekiq_threshold
|
|
48
|
-
end
|
|
49
|
-
|
|
59
|
+
# see https://github.com/mperham/sidekiq/wiki/Middleware#server-middleware
|
|
50
60
|
def call(_worker, msg, _queue)
|
|
51
|
-
Rollbar.reset_notifier!
|
|
61
|
+
Rollbar.reset_notifier! # clears scope
|
|
52
62
|
|
|
53
|
-
yield
|
|
63
|
+
return yield unless Rollbar.configuration.sidekiq_use_scoped_block
|
|
64
|
+
|
|
65
|
+
Rollbar.scoped(Rollbar::Sidekiq.job_scope(msg)) { yield }
|
|
54
66
|
rescue Exception => e
|
|
55
67
|
Rollbar::Sidekiq.handle_exception(msg, e)
|
|
56
68
|
raise
|
|
57
69
|
end
|
|
70
|
+
|
|
71
|
+
def self.job_hash_from_msg(msg)
|
|
72
|
+
msg && (msg[:job] || msg)
|
|
73
|
+
end
|
|
74
|
+
private_class_method :job_hash_from_msg
|
|
58
75
|
end
|
|
59
76
|
end
|
data/lib/rollbar/version.rb
CHANGED
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: 3.
|
|
4
|
+
version: 3.2.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: 2021-
|
|
11
|
+
date: 2021-05-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Easy and powerful exception tracking for Ruby
|
|
14
14
|
email:
|
|
@@ -161,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
161
161
|
- !ruby/object:Gem::Version
|
|
162
162
|
version: '0'
|
|
163
163
|
requirements: []
|
|
164
|
-
rubygems_version: 3.
|
|
164
|
+
rubygems_version: 3.1.4
|
|
165
165
|
signing_key:
|
|
166
166
|
specification_version: 4
|
|
167
167
|
summary: Reports exceptions to Rollbar
|