bugsnag 6.11.1 → 6.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/CONTRIBUTING.md +6 -1
- data/Gemfile +18 -11
- data/README.md +3 -3
- data/UPGRADING.md +22 -0
- data/VERSION +1 -1
- data/features/fixtures/docker-compose.yml +37 -0
- data/features/fixtures/rails3/app/Gemfile +1 -1
- data/features/fixtures/rails4/app/Gemfile +1 -1
- data/features/fixtures/rails5/app/Gemfile +1 -1
- data/features/fixtures/rails6/.dockerignore +1 -0
- data/features/fixtures/rails6/Dockerfile +26 -0
- data/features/fixtures/rails6/app/.browserslistrc +1 -0
- data/features/fixtures/rails6/app/.gitignore +35 -0
- data/features/fixtures/rails6/app/.ruby-version +1 -0
- data/features/fixtures/rails6/app/Gemfile +57 -0
- data/features/fixtures/rails6/app/README.md +24 -0
- data/features/fixtures/rails6/app/Rakefile +6 -0
- data/features/fixtures/rails6/app/app/assets/config/manifest.js +2 -0
- data/features/fixtures/rails6/app/app/assets/images/.keep +0 -0
- data/features/fixtures/rails6/app/app/assets/stylesheets/application.css +15 -0
- data/features/fixtures/rails6/app/app/channels/application_cable/channel.rb +4 -0
- data/features/fixtures/rails6/app/app/channels/application_cable/connection.rb +4 -0
- data/features/fixtures/rails6/app/app/controllers/api_key_controller.rb +16 -0
- data/features/fixtures/rails6/app/app/controllers/app_type_controller.rb +16 -0
- data/features/fixtures/rails6/app/app/controllers/app_version_controller.rb +21 -0
- data/features/fixtures/rails6/app/app/controllers/application_controller.rb +7 -0
- data/features/fixtures/rails6/app/app/controllers/auto_notify_controller.rb +27 -0
- data/features/fixtures/rails6/app/app/controllers/before_notify_controller.rb +40 -0
- data/features/fixtures/rails6/app/app/controllers/breadcrumbs_controller.rb +24 -0
- data/features/fixtures/rails6/app/app/controllers/clearance_controller.rb +33 -0
- data/features/fixtures/rails6/app/app/controllers/concerns/.keep +0 -0
- data/features/fixtures/rails6/app/app/controllers/handled_controller.rb +22 -0
- data/features/fixtures/rails6/app/app/controllers/ignore_classes_controller.rb +19 -0
- data/features/fixtures/rails6/app/app/controllers/metadata_filters_controller.rb +12 -0
- data/features/fixtures/rails6/app/app/controllers/project_root_controller.rb +21 -0
- data/features/fixtures/rails6/app/app/controllers/release_stage_controller.rb +16 -0
- data/features/fixtures/rails6/app/app/controllers/send_code_controller.rb +16 -0
- data/features/fixtures/rails6/app/app/controllers/send_environment_controller.rb +8 -0
- data/features/fixtures/rails6/app/app/controllers/session_tracking_controller.rb +20 -0
- data/features/fixtures/rails6/app/app/controllers/unhandled_controller.rb +7 -0
- data/features/fixtures/rails6/app/app/helpers/application_helper.rb +2 -0
- data/features/fixtures/rails6/app/app/javascript/channels/consumer.js +6 -0
- data/features/fixtures/rails6/app/app/javascript/channels/index.js +5 -0
- data/features/fixtures/rails6/app/app/javascript/packs/application.js +9 -0
- data/features/fixtures/rails6/app/app/jobs/application_job.rb +7 -0
- data/features/fixtures/rails6/app/app/jobs/notify_job.rb +5 -0
- data/features/fixtures/rails6/app/app/mailers/application_mailer.rb +4 -0
- data/features/fixtures/rails6/app/app/models/application_record.rb +3 -0
- data/features/fixtures/rails6/app/app/models/concerns/.keep +0 -0
- data/features/fixtures/rails6/app/app/models/user.rb +3 -0
- data/features/fixtures/rails6/app/app/views/layouts/application.html.erb +15 -0
- data/features/fixtures/rails6/app/app/views/layouts/mailer.html.erb +13 -0
- data/features/fixtures/rails6/app/app/views/layouts/mailer.text.erb +1 -0
- data/features/fixtures/rails6/app/babel.config.js +70 -0
- data/features/fixtures/rails6/app/config.ru +5 -0
- data/features/fixtures/rails6/app/config/application.rb +19 -0
- data/features/fixtures/rails6/app/config/boot.rb +4 -0
- data/features/fixtures/rails6/app/config/cable.yml +13 -0
- data/features/fixtures/rails6/app/config/credentials.yml.enc +1 -0
- data/features/fixtures/rails6/app/config/database.yml +29 -0
- data/features/fixtures/rails6/app/config/environment.rb +5 -0
- data/features/fixtures/rails6/app/config/environments/development.rb +62 -0
- data/features/fixtures/rails6/app/config/environments/production.rb +112 -0
- data/features/fixtures/rails6/app/config/environments/rails_env.rb +55 -0
- data/features/fixtures/rails6/app/config/environments/test.rb +47 -0
- data/features/fixtures/rails6/app/config/initializers/application_controller_renderer.rb +8 -0
- data/features/fixtures/rails6/app/config/initializers/assets.rb +14 -0
- data/features/fixtures/rails6/app/config/initializers/backtrace_silencers.rb +7 -0
- data/features/fixtures/rails6/app/config/initializers/bugsnag.rb +20 -0
- data/features/fixtures/rails6/app/config/initializers/content_security_policy.rb +27 -0
- data/features/fixtures/rails6/app/config/initializers/cookies_serializer.rb +5 -0
- data/features/fixtures/rails6/app/config/initializers/filter_parameter_logging.rb +5 -0
- data/features/fixtures/rails6/app/config/initializers/inflections.rb +16 -0
- data/features/fixtures/rails6/app/config/initializers/mime_types.rb +4 -0
- data/features/fixtures/rails6/app/config/initializers/wrap_parameters.rb +14 -0
- data/features/fixtures/rails6/app/config/locales/en.yml +33 -0
- data/features/fixtures/rails6/app/config/puma.rb +35 -0
- data/features/fixtures/rails6/app/config/routes.rb +58 -0
- data/features/fixtures/rails6/app/config/secrets.yml +25 -0
- data/features/fixtures/rails6/app/config/spring.rb +6 -0
- data/features/fixtures/rails6/app/config/storage.yml +34 -0
- data/features/fixtures/rails6/app/config/webpack/development.js +5 -0
- data/features/fixtures/rails6/app/config/webpack/environment.js +3 -0
- data/features/fixtures/rails6/app/config/webpack/production.js +5 -0
- data/features/fixtures/rails6/app/config/webpack/rails_env.js +5 -0
- data/features/fixtures/rails6/app/config/webpack/test.js +5 -0
- data/features/fixtures/rails6/app/config/webpacker.yml +121 -0
- data/features/fixtures/rails6/app/db/migrate/20180426095545_create_users.rb +17 -0
- data/features/fixtures/rails6/app/db/schema.rb +29 -0
- data/features/fixtures/rails6/app/db/seeds.rb +7 -0
- data/features/fixtures/rails6/app/lib/assets/.keep +0 -0
- data/features/fixtures/rails6/app/lib/tasks/.keep +0 -0
- data/features/fixtures/rails6/app/log/.keep +0 -0
- data/features/fixtures/rails6/app/package.json +15 -0
- data/features/fixtures/rails6/app/postcss.config.js +12 -0
- data/features/fixtures/rails6/app/public/404.html +67 -0
- data/features/fixtures/rails6/app/public/422.html +67 -0
- data/features/fixtures/rails6/app/public/500.html +66 -0
- data/features/fixtures/rails6/app/public/apple-touch-icon-precomposed.png +0 -0
- data/features/fixtures/rails6/app/public/apple-touch-icon.png +0 -0
- data/features/fixtures/rails6/app/public/favicon.ico +0 -0
- data/features/fixtures/rails6/app/public/robots.txt +1 -0
- data/features/fixtures/rails6/app/storage/.keep +0 -0
- data/features/fixtures/rails6/app/test/application_system_test_case.rb +5 -0
- data/features/fixtures/rails6/app/test/channels/application_cable/connection_test.rb +11 -0
- data/features/fixtures/rails6/app/test/controllers/.keep +0 -0
- data/features/fixtures/rails6/app/test/fixtures/.keep +0 -0
- data/features/fixtures/rails6/app/test/fixtures/files/.keep +0 -0
- data/features/fixtures/rails6/app/test/helpers/.keep +0 -0
- data/features/fixtures/rails6/app/test/integration/.keep +0 -0
- data/features/fixtures/rails6/app/test/mailers/.keep +0 -0
- data/features/fixtures/rails6/app/test/models/.keep +0 -0
- data/features/fixtures/rails6/app/test/system/.keep +0 -0
- data/features/fixtures/rails6/app/test/test_helper.rb +13 -0
- data/features/fixtures/rails6/app/tmp/.keep +0 -0
- data/features/fixtures/rails6/app/yarn.lock +6082 -0
- data/features/rails_features/api_key.feature +3 -1
- data/features/rails_features/app_type.feature +3 -1
- data/features/rails_features/app_version.feature +4 -1
- data/features/rails_features/auto_capture_sessions.feature +5 -1
- data/features/rails_features/auto_notify.feature +5 -1
- data/features/rails_features/before_notify.feature +3 -0
- data/features/rails_features/breadcrumbs.feature +5 -0
- data/features/rails_features/handled.feature +3 -0
- data/features/rails_features/ignore_classes.feature +3 -1
- data/features/rails_features/meta_data_filters.feature +1 -0
- data/features/rails_features/project_root.feature +3 -0
- data/features/rails_features/release_stage.feature +4 -1
- data/features/rails_features/send_code.feature +2 -0
- data/features/rails_features/send_environment.feature +2 -1
- data/features/rails_features/unhandled.feature +2 -1
- data/features/rails_features/user_info.feature +3 -1
- data/lib/bugsnag/breadcrumbs/validator.rb +2 -2
- data/lib/bugsnag/configuration.rb +4 -0
- data/lib/bugsnag/integrations/que.rb +16 -11
- data/lib/bugsnag/integrations/rack.rb +4 -1
- data/lib/bugsnag/integrations/railtie.rb +1 -0
- data/lib/bugsnag/integrations/rake.rb +58 -26
- data/lib/bugsnag/integrations/resque.rb +6 -1
- data/lib/bugsnag/integrations/sidekiq.rb +1 -0
- data/lib/bugsnag/middleware/rails3_request.rb +0 -7
- data/lib/bugsnag/report.rb +4 -1
- data/lib/bugsnag/session_tracker.rb +2 -1
- data/spec/breadcrumbs/validator_spec.rb +1 -0
- data/spec/configuration_spec.rb +31 -0
- data/spec/fixtures/tasks/Rakefile +12 -0
- data/spec/integrations/logger_spec.rb +4 -8
- data/spec/integrations/que_spec.rb +35 -1
- data/spec/integrations/rack_spec.rb +23 -1
- data/spec/integrations/rake_spec.rb +11 -12
- data/spec/integrations/resque_spec.rb +8 -1
- data/spec/integrations/sidekiq_spec.rb +2 -0
- data/spec/report_spec.rb +13 -1
- data/spec/session_tracker_spec.rb +1 -0
- metadata +110 -3
@@ -43,7 +43,10 @@ module Bugsnag
|
|
43
43
|
:type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
|
44
44
|
:attributes => FRAMEWORK_ATTRIBUTES
|
45
45
|
}
|
46
|
-
|
46
|
+
|
47
|
+
context = "#{payload['class']}@#{queue}"
|
48
|
+
report.meta_data.merge!({:context => context, :payload => payload})
|
49
|
+
report.context = context
|
47
50
|
end
|
48
51
|
end
|
49
52
|
end
|
@@ -59,10 +62,12 @@ if Resque::Worker.new(:bugsnag_fork_check).fork_per_job?
|
|
59
62
|
Resque.after_fork do
|
60
63
|
Bugsnag.configuration.app_type = "resque"
|
61
64
|
Bugsnag.configuration.default_delivery_method = :synchronous
|
65
|
+
Bugsnag.configuration.runtime_versions["resque"] = ::Resque::VERSION
|
62
66
|
end
|
63
67
|
else
|
64
68
|
Resque.before_first_fork do
|
65
69
|
Bugsnag.configuration.app_type = "resque"
|
66
70
|
Bugsnag.configuration.default_delivery_method = :synchronous
|
71
|
+
Bugsnag.configuration.runtime_versions["resque"] = ::Resque::VERSION
|
67
72
|
end
|
68
73
|
end
|
@@ -15,6 +15,7 @@ module Bugsnag
|
|
15
15
|
Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Sidekiq)
|
16
16
|
Bugsnag.configuration.app_type = "sidekiq"
|
17
17
|
Bugsnag.configuration.default_delivery_method = :synchronous
|
18
|
+
Bugsnag.configuration.runtime_versions["sidekiq"] = ::Sidekiq::VERSION
|
18
19
|
end
|
19
20
|
|
20
21
|
def call(worker, msg, queue)
|
@@ -32,13 +32,6 @@ module Bugsnag::Middleware
|
|
32
32
|
})
|
33
33
|
|
34
34
|
report.user["id"] = client_ip
|
35
|
-
|
36
|
-
# Add the rails version
|
37
|
-
if report.configuration.send_environment
|
38
|
-
report.add_tab(:environment, {
|
39
|
-
:railsVersion => Rails::VERSION::STRING
|
40
|
-
})
|
41
|
-
end
|
42
35
|
end
|
43
36
|
|
44
37
|
@bugsnag.call(report)
|
data/lib/bugsnag/report.rb
CHANGED
@@ -29,6 +29,7 @@ module Bugsnag
|
|
29
29
|
attr_accessor :delivery_method
|
30
30
|
attr_accessor :exceptions
|
31
31
|
attr_accessor :hostname
|
32
|
+
attr_accessor :runtime_versions
|
32
33
|
attr_accessor :grouping_hash
|
33
34
|
attr_accessor :meta_data
|
34
35
|
attr_accessor :raw_exceptions
|
@@ -55,6 +56,7 @@ module Bugsnag
|
|
55
56
|
self.breadcrumbs = []
|
56
57
|
self.delivery_method = configuration.delivery_method
|
57
58
|
self.hostname = configuration.hostname
|
59
|
+
self.runtime_versions = configuration.runtime_versions.dup
|
58
60
|
self.meta_data = {}
|
59
61
|
self.release_stage = configuration.release_stage
|
60
62
|
self.severity = auto_notify ? "error" : "warning"
|
@@ -97,7 +99,8 @@ module Bugsnag
|
|
97
99
|
},
|
98
100
|
context: context,
|
99
101
|
device: {
|
100
|
-
hostname: hostname
|
102
|
+
hostname: hostname,
|
103
|
+
runtimeVersions: runtime_versions
|
101
104
|
},
|
102
105
|
exceptions: exceptions,
|
103
106
|
groupingHash: grouping_hash,
|
@@ -118,7 +118,8 @@ module Bugsnag
|
|
118
118
|
:version => Bugsnag::Report::NOTIFIER_VERSION
|
119
119
|
},
|
120
120
|
:device => {
|
121
|
-
:hostname => Bugsnag.configuration.hostname
|
121
|
+
:hostname => Bugsnag.configuration.hostname,
|
122
|
+
:runtimeVersions => Bugsnag.configuration.runtime_versions
|
122
123
|
},
|
123
124
|
:app => {
|
124
125
|
:version => Bugsnag.configuration.app_version,
|
data/spec/configuration_spec.rb
CHANGED
@@ -161,6 +161,37 @@ describe Bugsnag::Configuration do
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
164
|
+
describe "#hostname" do
|
165
|
+
it "has a default value" do
|
166
|
+
expect(subject.hostname.length).to be > 0
|
167
|
+
end
|
168
|
+
|
169
|
+
it "has a value set by Socket" do
|
170
|
+
expect(subject.hostname).to eq(Socket.gethostname)
|
171
|
+
end
|
172
|
+
|
173
|
+
it "has a value set by DYNO environment variable" do
|
174
|
+
ENV['DYNO'] = 'localhost'
|
175
|
+
expect(subject.hostname).to eq("localhost")
|
176
|
+
end
|
177
|
+
|
178
|
+
after do
|
179
|
+
ENV['DYNO'] = nil
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe "#runtime_versions" do
|
184
|
+
it "has a default value" do
|
185
|
+
expect(subject.runtime_versions.length).to be > 0
|
186
|
+
expect(subject.runtime_versions["ruby"]).to eq(RUBY_VERSION)
|
187
|
+
end
|
188
|
+
|
189
|
+
it "has a settable value" do
|
190
|
+
subject.runtime_versions["ruby"] = '9.9.9'
|
191
|
+
expect(subject.runtime_versions["ruby"]).to eq('9.9.9')
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
164
195
|
describe "logger" do
|
165
196
|
class TestLogger
|
166
197
|
attr_accessor :logs
|
@@ -1,3 +1,15 @@
|
|
1
|
+
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0')
|
2
|
+
# Mixing Module#prepend with alias_method can sometimes lead to infinite
|
3
|
+
# mutual recursion, so this is to test that it doesn't happen.
|
4
|
+
mod = Module.new do
|
5
|
+
def execute(args = nil)
|
6
|
+
puts 'In module prepended to Rake::Task'
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
Rake::Task.send(:prepend, mod)
|
11
|
+
end
|
12
|
+
|
1
13
|
require "bugsnag/integrations/rake"
|
2
14
|
|
3
15
|
namespace :test do
|
@@ -83,18 +83,14 @@ describe 'Configuration.logger' do
|
|
83
83
|
key_warning = /\[Bugsnag\] .* No valid API key has been set, notifications will not be sent/
|
84
84
|
|
85
85
|
def run_app(name)
|
86
|
-
|
86
|
+
output = ''
|
87
87
|
Dir.chdir(File.join(File.dirname(__FILE__), "../fixtures/apps/scripts")) do
|
88
88
|
Bundler.with_clean_env do
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
Process.waitpid(pid, 0)
|
89
|
+
IO.popen([@env, 'bundle', 'exec', 'ruby', "#{name}.rb", err: [:child, :out]]) do |io|
|
90
|
+
output << io.read
|
91
|
+
end
|
93
92
|
end
|
94
93
|
end
|
95
|
-
out_writer.close
|
96
|
-
output = ""
|
97
|
-
output << out_reader.gets until out_reader.eof?
|
98
94
|
output
|
99
95
|
end
|
100
96
|
|
@@ -6,6 +6,16 @@ describe 'Bugsnag::Que', :order => :defined do
|
|
6
6
|
unless defined?(::Que)
|
7
7
|
@mocked_que = true
|
8
8
|
class ::Que
|
9
|
+
Version = '9.9.9'
|
10
|
+
class << self
|
11
|
+
attr_accessor :error_notifier
|
12
|
+
end
|
13
|
+
end
|
14
|
+
module Kernel
|
15
|
+
alias_method :old_require, :require
|
16
|
+
def require(path)
|
17
|
+
old_require(path) unless /^que/.match(path)
|
18
|
+
end
|
9
19
|
end
|
10
20
|
end
|
11
21
|
end
|
@@ -25,7 +35,6 @@ describe 'Bugsnag::Que', :order => :defined do
|
|
25
35
|
expect(report).to receive(:add_tab).with(:job, {
|
26
36
|
:error_count => 1,
|
27
37
|
:job_class => 'ActiveJob::QueueAdapters::QueAdapter::JobWrapper',
|
28
|
-
:args => [{"queue_name" => "foo", "arguments" => "bar"}],
|
29
38
|
:job_id => "ID",
|
30
39
|
:wrapper_job_class => 'ActiveJob::QueueAdapters::QueAdapter::JobWrapper',
|
31
40
|
:wrapper_job_id => "ID",
|
@@ -45,6 +54,8 @@ describe 'Bugsnag::Que', :order => :defined do
|
|
45
54
|
allow(Bugsnag).to receive(:configuration).and_return(config)
|
46
55
|
expect(config).to receive(:app_type)
|
47
56
|
expect(config).to receive(:app_type=).with('que')
|
57
|
+
runtime = {}
|
58
|
+
expect(config).to receive(:runtime_versions).and_return(runtime)
|
48
59
|
allow(config).to receive(:clear_request_data)
|
49
60
|
expect(Que).to receive(:error_notifier=) do |handler|
|
50
61
|
handler.call(error, job)
|
@@ -52,9 +63,32 @@ describe 'Bugsnag::Que', :order => :defined do
|
|
52
63
|
|
53
64
|
#Kick off
|
54
65
|
load './lib/bugsnag/integrations/que.rb'
|
66
|
+
|
67
|
+
expect(runtime).to eq("que" => "9.9.9")
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'when the job is nil' do
|
71
|
+
it 'notifies Bugsnag' do
|
72
|
+
load './lib/bugsnag/integrations/que.rb'
|
73
|
+
error = RuntimeError.new('nil job')
|
74
|
+
report = Bugsnag::Report.new(error, Bugsnag::Configuration.new)
|
75
|
+
expect(Bugsnag).to receive(:notify).with(error, true).and_yield(report)
|
76
|
+
|
77
|
+
Que.error_notifier.call(error, nil)
|
78
|
+
|
79
|
+
expect(report.meta_data['custom'].fetch('job')).to eq(nil)
|
80
|
+
expect(report.severity).to eq('error')
|
81
|
+
expect(report.severity_reason).to eq({
|
82
|
+
:type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
|
83
|
+
:attributes => {:framework => 'Que'},
|
84
|
+
})
|
85
|
+
end
|
55
86
|
end
|
56
87
|
|
57
88
|
after do
|
58
89
|
Object.send(:remove_const, :Que) if @mocked_que
|
90
|
+
module Kernel
|
91
|
+
alias_method :require, :old_require
|
92
|
+
end
|
59
93
|
end
|
60
94
|
end
|
@@ -18,6 +18,19 @@ describe Bugsnag::Rack do
|
|
18
18
|
app = lambda { |env| raise exception }
|
19
19
|
rack_stack = Bugsnag::Rack.new(app)
|
20
20
|
|
21
|
+
before do
|
22
|
+
unless defined?(::Rack)
|
23
|
+
@mocked_rack = true
|
24
|
+
class Rack
|
25
|
+
def self.release
|
26
|
+
'9.9.9'
|
27
|
+
end
|
28
|
+
class Request
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
21
34
|
it "re-raises the exception" do
|
22
35
|
expect { rack_stack.call(rack_env) }.to raise_error(BugsnagTestException)
|
23
36
|
end
|
@@ -47,6 +60,13 @@ describe Bugsnag::Rack do
|
|
47
60
|
}
|
48
61
|
end
|
49
62
|
|
63
|
+
it "applies the rack version" do
|
64
|
+
app = lambda { |env| raise BugsnagTestException.new("It crashed") }
|
65
|
+
rack_stack = Bugsnag::Rack.new(app)
|
66
|
+
|
67
|
+
expect(Bugsnag.configuration.runtime_versions["rack"]).to eq '9.9.9'
|
68
|
+
end
|
69
|
+
|
50
70
|
it "does not deliver an exception if auto_notify is disabled" do
|
51
71
|
Bugsnag.configure do |config|
|
52
72
|
config.auto_notify = false
|
@@ -63,6 +83,9 @@ describe Bugsnag::Rack do
|
|
63
83
|
unless defined?(::Rack)
|
64
84
|
@mocked_rack = true
|
65
85
|
class Rack
|
86
|
+
def self.release
|
87
|
+
'9.9.9'
|
88
|
+
end
|
66
89
|
class Request
|
67
90
|
end
|
68
91
|
end
|
@@ -196,7 +219,6 @@ describe Bugsnag::Rack do
|
|
196
219
|
end
|
197
220
|
|
198
221
|
it "don't mess with middlewares list on each req" do
|
199
|
-
stub_const('Rack', nil)
|
200
222
|
app = lambda { |env| ['200', {}, ['']] }
|
201
223
|
|
202
224
|
Bugsnag::Rack.new(app)
|
@@ -55,18 +55,17 @@ describe "Bugsnag Rake integration" do
|
|
55
55
|
let(:request) { JSON.parse(queue.pop) }
|
56
56
|
|
57
57
|
it 'should run the rake middleware when rake tasks crash' do
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
Dir.chdir(task_fixtures_path) do
|
63
|
-
system("bundle exec rake test:crash > /dev/null 2>&1")
|
64
|
-
end
|
65
|
-
|
66
|
-
result = request()
|
67
|
-
expect(result["events"][0]["metaData"]["rake_task"]).not_to be_nil
|
68
|
-
expect(result["events"][0]["metaData"]["rake_task"]["name"]).to eq("test:crash")
|
58
|
+
ENV['BUGSNAG_TEST_SERVER_PORT'] = server.config[:Port].to_s
|
59
|
+
task_fixtures_path = File.join(File.dirname(__FILE__), '../fixtures', 'tasks')
|
60
|
+
Dir.chdir(task_fixtures_path) do
|
61
|
+
system("bundle exec rake test:crash > /dev/null 2>&1")
|
69
62
|
end
|
63
|
+
|
64
|
+
result = request()
|
65
|
+
expect(result["events"][0]["metaData"]["rake_task"]).not_to be_nil
|
66
|
+
expect(result["events"][0]["metaData"]["rake_task"]["name"]).to eq("test:crash")
|
67
|
+
expect(result["events"][0]["app"]["type"]).to eq("rake")
|
68
|
+
expect(result["events"][0]["device"]["runtimeVersions"]["rake"]).to match(/\A\d+\.\d+\.\d+/)
|
70
69
|
end
|
71
70
|
end
|
72
|
-
end
|
71
|
+
end
|
@@ -6,6 +6,7 @@ describe 'Bugsnag::Resque', :order => :defined do
|
|
6
6
|
unless defined?(::Resque)
|
7
7
|
@mocked_resque = true
|
8
8
|
class ::Resque
|
9
|
+
VERSION = '9.9.9'
|
9
10
|
class Worker
|
10
11
|
end
|
11
12
|
class Failure
|
@@ -44,10 +45,14 @@ describe 'Bugsnag::Resque', :order => :defined do
|
|
44
45
|
expect(fork_check).to receive(:fork_per_job?).and_return(true)
|
45
46
|
expect(::Resque).to receive(:after_fork).and_yield
|
46
47
|
expect(Bugsnag.configuration).to receive(:app_type=).with("resque")
|
48
|
+
runtime = {}
|
49
|
+
expect(Bugsnag.configuration).to receive(:runtime_versions).and_return(runtime)
|
47
50
|
expect(Bugsnag.configuration).to receive(:default_delivery_method=).with(:synchronous)
|
48
51
|
|
49
52
|
#Kick off
|
50
53
|
require './lib/bugsnag/integrations/resque'
|
54
|
+
|
55
|
+
expect(runtime).to eq("resque" => "9.9.9")
|
51
56
|
end
|
52
57
|
|
53
58
|
it "can configure" do
|
@@ -71,14 +76,16 @@ describe 'Bugsnag::Resque', :order => :defined do
|
|
71
76
|
:type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
|
72
77
|
:attributes => Bugsnag::Resque::FRAMEWORK_ATTRIBUTES
|
73
78
|
})
|
79
|
+
expected_context = "class@queue"
|
74
80
|
meta_data = double('meta_data')
|
75
81
|
expect(report).to receive(:meta_data).and_return(meta_data)
|
76
82
|
expect(meta_data).to receive(:merge!).with({
|
77
|
-
:context =>
|
83
|
+
:context => expected_context,
|
78
84
|
:payload => {
|
79
85
|
"class" => "class"
|
80
86
|
}
|
81
87
|
})
|
88
|
+
expect(report).to receive(:context=).with(expected_context)
|
82
89
|
expect(Bugsnag).to receive(:notify).with(exception, true).and_yield(report)
|
83
90
|
resque.save
|
84
91
|
end
|
@@ -29,6 +29,8 @@ describe Bugsnag::Sidekiq do
|
|
29
29
|
expect(event["metaData"]["sidekiq"]["msg"]["args"]).to eq([-0])
|
30
30
|
expect(event["metaData"]["sidekiq"]["msg"]["queue"]).to eq("default")
|
31
31
|
expect(event["severity"]).to eq("error")
|
32
|
+
expect(event["app"]["type"]).to eq("sidekiq")
|
33
|
+
expect(event["device"]["runtimeVersions"]["sidekiq"]).to eq('2.0.0')
|
32
34
|
}
|
33
35
|
end
|
34
36
|
end
|
data/spec/report_spec.rb
CHANGED
@@ -1252,7 +1252,7 @@ describe Bugsnag::Report do
|
|
1252
1252
|
|
1253
1253
|
if defined?(JRUBY_VERSION)
|
1254
1254
|
|
1255
|
-
it "
|
1255
|
+
it "works with java.lang.Throwables" do
|
1256
1256
|
begin
|
1257
1257
|
JRubyException.raise!
|
1258
1258
|
rescue
|
@@ -1267,4 +1267,16 @@ describe Bugsnag::Report do
|
|
1267
1267
|
}
|
1268
1268
|
end
|
1269
1269
|
end
|
1270
|
+
|
1271
|
+
it 'includes device data when notify is called' do
|
1272
|
+
Bugsnag.configuration.hostname = 'test-host'
|
1273
|
+
Bugsnag.configuration.runtime_versions["ruby"] = '9.9.9'
|
1274
|
+
Bugsnag.notify(BugsnagTestException.new("It crashed"))
|
1275
|
+
|
1276
|
+
expect(Bugsnag).to have_sent_notification{ |payload, headers|
|
1277
|
+
event = payload["events"][0]
|
1278
|
+
expect(event["device"]["hostname"]).to eq('test-host')
|
1279
|
+
expect(event["device"]["runtimeVersions"]["ruby"]).to eq('9.9.9')
|
1280
|
+
}
|
1281
|
+
end
|
1270
1282
|
end
|
@@ -129,6 +129,7 @@ describe Bugsnag::SessionTracker do
|
|
129
129
|
device = payload["device"]
|
130
130
|
expect(device.include?("hostname")).to be true
|
131
131
|
expect(device["hostname"]).to eq(Bugsnag.configuration.hostname)
|
132
|
+
expect(device["runtimeVersions"]["ruby"]).to eq(Bugsnag.configuration.runtime_versions["ruby"])
|
132
133
|
end
|
133
134
|
|
134
135
|
it 'uses middleware to attach session to notification' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bugsnag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -425,6 +425,113 @@ files:
|
|
425
425
|
- features/fixtures/rails5/app/test/models/.keep
|
426
426
|
- features/fixtures/rails5/app/test/test_helper.rb
|
427
427
|
- features/fixtures/rails5/app/tmp/.keep
|
428
|
+
- features/fixtures/rails6/.dockerignore
|
429
|
+
- features/fixtures/rails6/Dockerfile
|
430
|
+
- features/fixtures/rails6/app/.browserslistrc
|
431
|
+
- features/fixtures/rails6/app/.gitignore
|
432
|
+
- features/fixtures/rails6/app/.ruby-version
|
433
|
+
- features/fixtures/rails6/app/Gemfile
|
434
|
+
- features/fixtures/rails6/app/README.md
|
435
|
+
- features/fixtures/rails6/app/Rakefile
|
436
|
+
- features/fixtures/rails6/app/app/assets/config/manifest.js
|
437
|
+
- features/fixtures/rails6/app/app/assets/images/.keep
|
438
|
+
- features/fixtures/rails6/app/app/assets/stylesheets/application.css
|
439
|
+
- features/fixtures/rails6/app/app/channels/application_cable/channel.rb
|
440
|
+
- features/fixtures/rails6/app/app/channels/application_cable/connection.rb
|
441
|
+
- features/fixtures/rails6/app/app/controllers/api_key_controller.rb
|
442
|
+
- features/fixtures/rails6/app/app/controllers/app_type_controller.rb
|
443
|
+
- features/fixtures/rails6/app/app/controllers/app_version_controller.rb
|
444
|
+
- features/fixtures/rails6/app/app/controllers/application_controller.rb
|
445
|
+
- features/fixtures/rails6/app/app/controllers/auto_notify_controller.rb
|
446
|
+
- features/fixtures/rails6/app/app/controllers/before_notify_controller.rb
|
447
|
+
- features/fixtures/rails6/app/app/controllers/breadcrumbs_controller.rb
|
448
|
+
- features/fixtures/rails6/app/app/controllers/clearance_controller.rb
|
449
|
+
- features/fixtures/rails6/app/app/controllers/concerns/.keep
|
450
|
+
- features/fixtures/rails6/app/app/controllers/handled_controller.rb
|
451
|
+
- features/fixtures/rails6/app/app/controllers/ignore_classes_controller.rb
|
452
|
+
- features/fixtures/rails6/app/app/controllers/metadata_filters_controller.rb
|
453
|
+
- features/fixtures/rails6/app/app/controllers/project_root_controller.rb
|
454
|
+
- features/fixtures/rails6/app/app/controllers/release_stage_controller.rb
|
455
|
+
- features/fixtures/rails6/app/app/controllers/send_code_controller.rb
|
456
|
+
- features/fixtures/rails6/app/app/controllers/send_environment_controller.rb
|
457
|
+
- features/fixtures/rails6/app/app/controllers/session_tracking_controller.rb
|
458
|
+
- features/fixtures/rails6/app/app/controllers/unhandled_controller.rb
|
459
|
+
- features/fixtures/rails6/app/app/helpers/application_helper.rb
|
460
|
+
- features/fixtures/rails6/app/app/javascript/channels/consumer.js
|
461
|
+
- features/fixtures/rails6/app/app/javascript/channels/index.js
|
462
|
+
- features/fixtures/rails6/app/app/javascript/packs/application.js
|
463
|
+
- features/fixtures/rails6/app/app/jobs/application_job.rb
|
464
|
+
- features/fixtures/rails6/app/app/jobs/notify_job.rb
|
465
|
+
- features/fixtures/rails6/app/app/mailers/application_mailer.rb
|
466
|
+
- features/fixtures/rails6/app/app/models/application_record.rb
|
467
|
+
- features/fixtures/rails6/app/app/models/concerns/.keep
|
468
|
+
- features/fixtures/rails6/app/app/models/user.rb
|
469
|
+
- features/fixtures/rails6/app/app/views/layouts/application.html.erb
|
470
|
+
- features/fixtures/rails6/app/app/views/layouts/mailer.html.erb
|
471
|
+
- features/fixtures/rails6/app/app/views/layouts/mailer.text.erb
|
472
|
+
- features/fixtures/rails6/app/babel.config.js
|
473
|
+
- features/fixtures/rails6/app/config.ru
|
474
|
+
- features/fixtures/rails6/app/config/application.rb
|
475
|
+
- features/fixtures/rails6/app/config/boot.rb
|
476
|
+
- features/fixtures/rails6/app/config/cable.yml
|
477
|
+
- features/fixtures/rails6/app/config/credentials.yml.enc
|
478
|
+
- features/fixtures/rails6/app/config/database.yml
|
479
|
+
- features/fixtures/rails6/app/config/environment.rb
|
480
|
+
- features/fixtures/rails6/app/config/environments/development.rb
|
481
|
+
- features/fixtures/rails6/app/config/environments/production.rb
|
482
|
+
- features/fixtures/rails6/app/config/environments/rails_env.rb
|
483
|
+
- features/fixtures/rails6/app/config/environments/test.rb
|
484
|
+
- features/fixtures/rails6/app/config/initializers/application_controller_renderer.rb
|
485
|
+
- features/fixtures/rails6/app/config/initializers/assets.rb
|
486
|
+
- features/fixtures/rails6/app/config/initializers/backtrace_silencers.rb
|
487
|
+
- features/fixtures/rails6/app/config/initializers/bugsnag.rb
|
488
|
+
- features/fixtures/rails6/app/config/initializers/content_security_policy.rb
|
489
|
+
- features/fixtures/rails6/app/config/initializers/cookies_serializer.rb
|
490
|
+
- features/fixtures/rails6/app/config/initializers/filter_parameter_logging.rb
|
491
|
+
- features/fixtures/rails6/app/config/initializers/inflections.rb
|
492
|
+
- features/fixtures/rails6/app/config/initializers/mime_types.rb
|
493
|
+
- features/fixtures/rails6/app/config/initializers/wrap_parameters.rb
|
494
|
+
- features/fixtures/rails6/app/config/locales/en.yml
|
495
|
+
- features/fixtures/rails6/app/config/puma.rb
|
496
|
+
- features/fixtures/rails6/app/config/routes.rb
|
497
|
+
- features/fixtures/rails6/app/config/secrets.yml
|
498
|
+
- features/fixtures/rails6/app/config/spring.rb
|
499
|
+
- features/fixtures/rails6/app/config/storage.yml
|
500
|
+
- features/fixtures/rails6/app/config/webpack/development.js
|
501
|
+
- features/fixtures/rails6/app/config/webpack/environment.js
|
502
|
+
- features/fixtures/rails6/app/config/webpack/production.js
|
503
|
+
- features/fixtures/rails6/app/config/webpack/rails_env.js
|
504
|
+
- features/fixtures/rails6/app/config/webpack/test.js
|
505
|
+
- features/fixtures/rails6/app/config/webpacker.yml
|
506
|
+
- features/fixtures/rails6/app/db/migrate/20180426095545_create_users.rb
|
507
|
+
- features/fixtures/rails6/app/db/schema.rb
|
508
|
+
- features/fixtures/rails6/app/db/seeds.rb
|
509
|
+
- features/fixtures/rails6/app/lib/assets/.keep
|
510
|
+
- features/fixtures/rails6/app/lib/tasks/.keep
|
511
|
+
- features/fixtures/rails6/app/log/.keep
|
512
|
+
- features/fixtures/rails6/app/package.json
|
513
|
+
- features/fixtures/rails6/app/postcss.config.js
|
514
|
+
- features/fixtures/rails6/app/public/404.html
|
515
|
+
- features/fixtures/rails6/app/public/422.html
|
516
|
+
- features/fixtures/rails6/app/public/500.html
|
517
|
+
- features/fixtures/rails6/app/public/apple-touch-icon-precomposed.png
|
518
|
+
- features/fixtures/rails6/app/public/apple-touch-icon.png
|
519
|
+
- features/fixtures/rails6/app/public/favicon.ico
|
520
|
+
- features/fixtures/rails6/app/public/robots.txt
|
521
|
+
- features/fixtures/rails6/app/storage/.keep
|
522
|
+
- features/fixtures/rails6/app/test/application_system_test_case.rb
|
523
|
+
- features/fixtures/rails6/app/test/channels/application_cable/connection_test.rb
|
524
|
+
- features/fixtures/rails6/app/test/controllers/.keep
|
525
|
+
- features/fixtures/rails6/app/test/fixtures/.keep
|
526
|
+
- features/fixtures/rails6/app/test/fixtures/files/.keep
|
527
|
+
- features/fixtures/rails6/app/test/helpers/.keep
|
528
|
+
- features/fixtures/rails6/app/test/integration/.keep
|
529
|
+
- features/fixtures/rails6/app/test/mailers/.keep
|
530
|
+
- features/fixtures/rails6/app/test/models/.keep
|
531
|
+
- features/fixtures/rails6/app/test/system/.keep
|
532
|
+
- features/fixtures/rails6/app/test/test_helper.rb
|
533
|
+
- features/fixtures/rails6/app/tmp/.keep
|
534
|
+
- features/fixtures/rails6/app/yarn.lock
|
428
535
|
- features/fixtures/resque/.dockerignore
|
429
536
|
- features/fixtures/resque/Dockerfile
|
430
537
|
- features/fixtures/resque/Gemfile
|
@@ -600,7 +707,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
600
707
|
version: '0'
|
601
708
|
requirements: []
|
602
709
|
rubyforge_project:
|
603
|
-
rubygems_version: 2.7.6
|
710
|
+
rubygems_version: 2.7.6.2
|
604
711
|
signing_key:
|
605
712
|
specification_version: 4
|
606
713
|
summary: Ruby notifier for bugsnag.com
|