Track Kubernetes errors using Sentry
This commit is contained in:
parent
dff3ded57f
commit
ba7cfdc2d7
|
@ -16,6 +16,7 @@ module Clusters
|
|||
end
|
||||
rescue Kubeclient::HttpError => e
|
||||
Rails.logger.error("Kubernetes error: #{e.error_code} #{e.message}")
|
||||
Gitlab::Sentry.track_acceptable_exception(e, extra: { scope: 'kubernetes', app_id: app.id })
|
||||
app.make_errored!("Kubernetes error: #{e.error_code}") unless app.errored?
|
||||
end
|
||||
|
||||
|
|
|
@ -14,9 +14,11 @@ module Clusters
|
|||
ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id)
|
||||
rescue Kubeclient::HttpError => e
|
||||
Rails.logger.error("Kubernetes error: #{e.error_code} #{e.message}")
|
||||
Gitlab::Sentry.track_acceptable_exception(e, extra: { scope: 'kubernetes', app_id: app.id })
|
||||
app.make_errored!("Kubernetes error: #{e.error_code}")
|
||||
rescue StandardError => e
|
||||
Rails.logger.error "Can't start installation process: #{e.class.name} #{e.message}"
|
||||
Gitlab::Sentry.track_acceptable_exception(e, extra: { scope: 'kubernetes', app_id: app.id })
|
||||
app.make_errored!("Can't start installation process.")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def self.context(current_user = nil)
|
||||
return unless self.enabled?
|
||||
return unless enabled?
|
||||
|
||||
Raven.tags_context(locale: I18n.locale)
|
||||
|
||||
|
@ -29,14 +29,22 @@ module Gitlab
|
|||
#
|
||||
# Provide an issue URL for follow up.
|
||||
def self.track_exception(exception, issue_url: nil, extra: {})
|
||||
track_acceptable_exception(exception, issue_url: issue_url, extra: extra)
|
||||
|
||||
raise exception if should_raise?
|
||||
end
|
||||
|
||||
# This should be used when you do not want to raise an exception in
|
||||
# development and test. If you need development and test to behave
|
||||
# just the same as production you can use this instead of
|
||||
# track_exception.
|
||||
def self.track_acceptable_exception(exception, issue_url: nil, extra: {})
|
||||
if enabled?
|
||||
extra[:issue_url] = issue_url if issue_url
|
||||
context # Make sure we've set everything we know in the context
|
||||
|
||||
Raven.capture_exception(exception, extra: extra)
|
||||
end
|
||||
|
||||
raise exception if should_raise?
|
||||
end
|
||||
|
||||
def self.program_context
|
||||
|
|
|
@ -52,4 +52,28 @@ describe Gitlab::Sentry do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context '.track_acceptable_exception' do
|
||||
let(:exception) { RuntimeError.new('boom') }
|
||||
|
||||
before do
|
||||
allow(described_class).to receive(:enabled?).and_return(true)
|
||||
end
|
||||
|
||||
it 'calls Raven.capture_exception' do
|
||||
expected_extras = {
|
||||
some_other_info: 'info',
|
||||
issue_url: 'http://gitlab.com/gitlab-org/gitlab-ce/issues/1'
|
||||
}
|
||||
|
||||
expect(Raven).to receive(:capture_exception)
|
||||
.with(exception, extra: a_hash_including(expected_extras))
|
||||
|
||||
described_class.track_acceptable_exception(
|
||||
exception,
|
||||
issue_url: 'http://gitlab.com/gitlab-org/gitlab-ce/issues/1',
|
||||
extra: { some_other_info: 'info' }
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue