Commit ba7cfdc2 authored by Dylan Griffith's avatar Dylan Griffith Committed by Kamil Trzciński

Track Kubernetes errors using Sentry

parent dff3ded5
...@@ -16,6 +16,7 @@ module Clusters ...@@ -16,6 +16,7 @@ module Clusters
end end
rescue Kubeclient::HttpError => e rescue Kubeclient::HttpError => e
Rails.logger.error("Kubernetes error: #{e.error_code} #{e.message}") 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? app.make_errored!("Kubernetes error: #{e.error_code}") unless app.errored?
end end
......
...@@ -14,9 +14,11 @@ module Clusters ...@@ -14,9 +14,11 @@ module Clusters
ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id) ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id)
rescue Kubeclient::HttpError => e rescue Kubeclient::HttpError => e
Rails.logger.error("Kubernetes error: #{e.error_code} #{e.message}") 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}") app.make_errored!("Kubernetes error: #{e.error_code}")
rescue StandardError => e rescue StandardError => e
Rails.logger.error "Can't start installation process: #{e.class.name} #{e.message}" 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.") app.make_errored!("Can't start installation process.")
end end
end end
......
...@@ -7,7 +7,7 @@ module Gitlab ...@@ -7,7 +7,7 @@ module Gitlab
end end
def self.context(current_user = nil) def self.context(current_user = nil)
return unless self.enabled? return unless enabled?
Raven.tags_context(locale: I18n.locale) Raven.tags_context(locale: I18n.locale)
...@@ -29,14 +29,22 @@ module Gitlab ...@@ -29,14 +29,22 @@ module Gitlab
# #
# Provide an issue URL for follow up. # Provide an issue URL for follow up.
def self.track_exception(exception, issue_url: nil, extra: {}) 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? if enabled?
extra[:issue_url] = issue_url if issue_url extra[:issue_url] = issue_url if issue_url
context # Make sure we've set everything we know in the context context # Make sure we've set everything we know in the context
Raven.capture_exception(exception, extra: extra) Raven.capture_exception(exception, extra: extra)
end end
raise exception if should_raise?
end end
def self.program_context def self.program_context
......
...@@ -52,4 +52,28 @@ describe Gitlab::Sentry do ...@@ -52,4 +52,28 @@ describe Gitlab::Sentry do
end end
end 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 end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment