Commit 946ffc67 authored by Roger Meier's avatar Roger Meier

refactor: remove Sentry from application settings

parent 76889a99
...@@ -165,8 +165,6 @@ module ApplicationSettingsHelper ...@@ -165,8 +165,6 @@ module ApplicationSettingsHelper
:authorized_keys_enabled, :authorized_keys_enabled,
:auto_devops_enabled, :auto_devops_enabled,
:auto_devops_domain, :auto_devops_domain,
:clientside_sentry_dsn,
:clientside_sentry_enabled,
:container_registry_token_expire_delay, :container_registry_token_expire_delay,
:default_artifacts_expire_in, :default_artifacts_expire_in,
:default_branch_protection, :default_branch_protection,
...@@ -235,8 +233,6 @@ module ApplicationSettingsHelper ...@@ -235,8 +233,6 @@ module ApplicationSettingsHelper
:restricted_visibility_levels, :restricted_visibility_levels,
:rsa_key_restriction, :rsa_key_restriction,
:send_user_confirmation_email, :send_user_confirmation_email,
:sentry_dsn,
:sentry_enabled,
:session_expire_delay, :session_expire_delay,
:shared_runners_enabled, :shared_runners_enabled,
:shared_runners_text, :shared_runners_text,
......
...@@ -30,6 +30,10 @@ class ApplicationSetting < ApplicationRecord ...@@ -30,6 +30,10 @@ class ApplicationSetting < ApplicationRecord
ignore_column :circuitbreaker_check_interval ignore_column :circuitbreaker_check_interval
ignore_column :koding_url ignore_column :koding_url
ignore_column :koding_enabled ignore_column :koding_enabled
ignore_column :sentry_enabled
ignore_column :sentry_dsn
ignore_column :clientside_sentry_enabled
ignore_column :clientside_sentry_dsn
cache_markdown_field :sign_in_text cache_markdown_field :sign_in_text
cache_markdown_field :help_page_text cache_markdown_field :help_page_text
...@@ -75,14 +79,6 @@ class ApplicationSetting < ApplicationRecord ...@@ -75,14 +79,6 @@ class ApplicationSetting < ApplicationRecord
presence: true, presence: true,
if: :recaptcha_enabled if: :recaptcha_enabled
validates :sentry_dsn,
presence: true,
if: :sentry_enabled
validates :clientside_sentry_dsn,
presence: true,
if: :clientside_sentry_enabled
validates :akismet_api_key, validates :akismet_api_key,
presence: true, presence: true,
if: :akismet_enabled if: :akismet_enabled
...@@ -264,7 +260,6 @@ class ApplicationSetting < ApplicationRecord ...@@ -264,7 +260,6 @@ class ApplicationSetting < ApplicationRecord
encode: true encode: true
before_validation :ensure_uuid! before_validation :ensure_uuid!
before_validation :strip_sentry_values
before_save :ensure_runners_registration_token before_save :ensure_runners_registration_token
before_save :ensure_health_check_access_token before_save :ensure_health_check_access_token
......
...@@ -180,27 +180,6 @@ module ApplicationSettingImplementation ...@@ -180,27 +180,6 @@ module ApplicationSettingImplementation
super(levels&.map { |level| Gitlab::VisibilityLevel.level_value(level) }) super(levels&.map { |level| Gitlab::VisibilityLevel.level_value(level) })
end end
def strip_sentry_values
sentry_dsn.strip! if sentry_dsn.present?
clientside_sentry_dsn.strip! if clientside_sentry_dsn.present?
end
def sentry_enabled
Gitlab.config.sentry.enabled || read_attribute(:sentry_enabled)
end
def sentry_dsn
Gitlab.config.sentry.dsn || read_attribute(:sentry_dsn)
end
def clientside_sentry_enabled
Gitlab.config.sentry.enabled || read_attribute(:clientside_sentry_enabled)
end
def clientside_sentry_dsn
Gitlab.config.sentry.clientside_dsn || read_attribute(:clientside_sentry_dsn)
end
def performance_bar_allowed_group def performance_bar_allowed_group
Group.find_by_id(performance_bar_allowed_group_id) Group.find_by_id(performance_bar_allowed_group_id)
end end
......
= form_for @application_setting, url: reporting_admin_application_settings_path(anchor: 'js-logging-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%p
%strong
NOTE:
These settings will be removed from the UI in a GitLab 12.0 release and made available within gitlab.yml.
In addition, you will be able to define a Sentry Environment to differentiate between multiple deployments. For example, development, staging, and production.
%fieldset
.form-group
.form-check
= f.check_box :sentry_enabled, class: 'form-check-input'
= f.label :sentry_enabled, class: 'form-check-label' do
Enable Sentry
.form-text.text-muted
%p This setting requires a restart to take effect.
Sentry is an error reporting and logging tool which is currently not shipped with GitLab, get it here:
%a{ href: 'https://getsentry.com', target: '_blank', rel: 'noopener noreferrer' } https://getsentry.com
.form-group
= f.label :sentry_dsn, 'Sentry DSN', class: 'label-bold'
= f.text_field :sentry_dsn, class: 'form-control'
.form-group
.form-check
= f.check_box :clientside_sentry_enabled, class: 'form-check-input'
= f.label :clientside_sentry_enabled, class: 'form-check-label' do
Enable Clientside Sentry
.form-text.text-muted
Sentry can also be used for reporting and logging clientside exceptions.
%a{ href: 'https://sentry.io/for/javascript/', target: '_blank', rel: 'noopener noreferrer' } https://sentry.io/for/javascript/
.form-group
= f.label :clientside_sentry_dsn, 'Clientside Sentry DSN', class: 'label-bold'
= f.text_field :clientside_sentry_dsn, class: 'form-control'
= f.submit 'Save changes', class: "btn btn-success"
...@@ -23,14 +23,3 @@ ...@@ -23,14 +23,3 @@
= _('Set notification email for abuse reports.') = _('Set notification email for abuse reports.')
.settings-content .settings-content
= render 'abuse' = render 'abuse'
%section.settings.as-logging.no-animate#js-logging-settings{ class: ('expanded' if expanded_by_default?) }
.settings-header
%h4
= _('Error Reporting and Logging')
%button.btn.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Enable Sentry for error reporting and logging.')
.settings-content
= render 'logging'
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
= yield :library_javascripts = yield :library_javascripts
= javascript_include_tag locale_path unless I18n.locale == :en = javascript_include_tag locale_path unless I18n.locale == :en
= webpack_bundle_tag "raven" if Gitlab::CurrentSettings.clientside_sentry_enabled = webpack_bundle_tag "raven" if Gitlab.config.sentry.enabled
- if content_for?(:page_specific_javascripts) - if content_for?(:page_specific_javascripts)
= yield :page_specific_javascripts = yield :page_specific_javascripts
......
---
title: Remove Sentry from application settings
merge_request: 28447
author: Roger Meier
type: added
...@@ -3,18 +3,11 @@ ...@@ -3,18 +3,11 @@
require 'gitlab/current_settings' require 'gitlab/current_settings'
def configure_sentry def configure_sentry
# allow it to fail: it may do so when create_from_defaults is executed before migrations are actually done if Gitlab::Sentry.enabled?
begin
sentry_enabled = Gitlab::CurrentSettings.current_application_settings.sentry_enabled
rescue
sentry_enabled = false
end
if sentry_enabled
Raven.configure do |config| Raven.configure do |config|
config.dsn = Gitlab::CurrentSettings.current_application_settings.sentry_dsn config.dsn = Gitlab.config.sentry.dsn
config.release = Gitlab.revision config.release = Gitlab.revision
config.current_environment = Gitlab.config.sentry.environment.presence config.current_environment = Gitlab.config.sentry.environment
# Sanitize fields based on those sanitized from Rails. # Sanitize fields based on those sanitized from Rails.
config.sanitize_fields = Rails.application.config.filter_parameters.map(&:to_s) config.sanitize_fields = Rails.application.config.filter_parameters.map(&:to_s)
......
# frozen_string_literal: true
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class RemoveSentryFromApplicationSettings < ActiveRecord::Migration[5.0]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
SENTRY_ENABLED_COLUMNS = [
:sentry_enabled,
:clientside_sentry_enabled
].freeze
SENTRY_DSN_COLUMNS = [
:sentry_dsn,
:clientside_sentry_dsn
].freeze
def up
(SENTRY_ENABLED_COLUMNS + SENTRY_DSN_COLUMNS).each do |column|
remove_column(:application_settings, column) if column_exists?(:application_settings, column)
end
end
def down
SENTRY_ENABLED_COLUMNS.each do |column|
add_column_with_default(:application_settings, column, :boolean, default: false, allow_null: false) unless column_exists?(:application_settings, column)
end
SENTRY_DSN_COLUMNS.each do |column|
add_column(:application_settings, column, :string) unless column_exists?(:application_settings, column)
end
end
end
...@@ -142,8 +142,6 @@ are listed in the descriptions of the relevant settings. ...@@ -142,8 +142,6 @@ are listed in the descriptions of the relevant settings.
| `authorized_keys_enabled` | boolean | no | By default, we write to the `authorized_keys` file to support Git over SSH without additional configuration. GitLab can be optimized to authenticate SSH keys via the database file. Only disable this if you have configured your OpenSSH server to use the AuthorizedKeysCommand. | | `authorized_keys_enabled` | boolean | no | By default, we write to the `authorized_keys` file to support Git over SSH without additional configuration. GitLab can be optimized to authenticate SSH keys via the database file. Only disable this if you have configured your OpenSSH server to use the AuthorizedKeysCommand. |
| `auto_devops_domain` | string | no | Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages. | | `auto_devops_domain` | string | no | Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages. |
| `auto_devops_enabled` | boolean | no | Enable Auto DevOps for projects by default. It will automatically build, test, and deploy applications based on a predefined CI/CD configuration. | | `auto_devops_enabled` | boolean | no | Enable Auto DevOps for projects by default. It will automatically build, test, and deploy applications based on a predefined CI/CD configuration. |
| `clientside_sentry_dsn` | string | required by: `clientside_sentry_enabled` | Clientside Sentry Data Source Name. |
| `clientside_sentry_enabled` | boolean | no | (**If enabled, requires:** `clientside_sentry_dsn`) Enable Sentry error reporting for the client side. |
| `container_registry_token_expire_delay` | integer | no | Container Registry token duration in minutes. | | `container_registry_token_expire_delay` | integer | no | Container Registry token duration in minutes. |
| `default_artifacts_expire_in` | string | no | Set the default expiration time for each job's artifacts. | | `default_artifacts_expire_in` | string | no | Set the default expiration time for each job's artifacts. |
| `default_branch_protection` | integer | no | Determine if developers can push to master. Can take: `0` _(not protected, both developers and maintainers can push new commits, force push, or delete the branch)_, `1` _(partially protected, developers and maintainers can push new commits, but cannot force push or delete the branch)_ or `2` _(fully protected, developers cannot push new commits, but maintainers can; no-one can force push or delete the branch)_ as a parameter. Default is `2`. | | `default_branch_protection` | integer | no | Determine if developers can push to master. Can take: `0` _(not protected, both developers and maintainers can push new commits, force push, or delete the branch)_, `1` _(partially protected, developers and maintainers can push new commits, but cannot force push or delete the branch)_ or `2` _(fully protected, developers cannot push new commits, but maintainers can; no-one can force push or delete the branch)_ as a parameter. Default is `2`. |
...@@ -212,8 +210,6 @@ are listed in the descriptions of the relevant settings. ...@@ -212,8 +210,6 @@ are listed in the descriptions of the relevant settings.
| `restricted_visibility_levels` | array of strings | no | Selected levels cannot be used by non-admin users for groups, projects or snippets. Can take `private`, `internal` and `public` as a parameter. Default is `null` which means there is no restriction. | | `restricted_visibility_levels` | array of strings | no | Selected levels cannot be used by non-admin users for groups, projects or snippets. Can take `private`, `internal` and `public` as a parameter. Default is `null` which means there is no restriction. |
| `rsa_key_restriction` | integer | no | The minimum allowed bit length of an uploaded RSA key. Default is `0` (no restriction). `-1` disables RSA keys. | | `rsa_key_restriction` | integer | no | The minimum allowed bit length of an uploaded RSA key. Default is `0` (no restriction). `-1` disables RSA keys. |
| `send_user_confirmation_email` | boolean | no | Send confirmation email on sign-up. | | `send_user_confirmation_email` | boolean | no | Send confirmation email on sign-up. |
| `sentry_dsn` | string | required by: `sentry_enabled` | Sentry Data Source Name. |
| `sentry_enabled` | boolean | no | (**If enabled, requires:** `sentry_dsn`) Sentry is an error reporting and logging tool which is currently not shipped with GitLab, available at <https://sentry.io>. |
| `session_expire_delay` | integer | no | Session duration in minutes. GitLab restart is required to apply changes | | `session_expire_delay` | integer | no | Session duration in minutes. GitLab restart is required to apply changes |
| `shared_runners_enabled` | boolean | no | (**If enabled, requires:** `shared_runners_text`) Enable shared runners for new projects. | | `shared_runners_enabled` | boolean | no | (**If enabled, requires:** `shared_runners_text`) Enable shared runners for new projects. |
| `shared_runners_text` | string | required by: `shared_runners_enabled` | Shared runners text. | | `shared_runners_text` | string | required by: `shared_runners_enabled` | Shared runners text. |
......
...@@ -36,10 +36,6 @@ module API ...@@ -36,10 +36,6 @@ module API
given akismet_enabled: ->(val) { val } do given akismet_enabled: ->(val) { val } do
requires :akismet_api_key, type: String, desc: 'Generate API key at http://www.akismet.com' requires :akismet_api_key, type: String, desc: 'Generate API key at http://www.akismet.com'
end end
optional :clientside_sentry_enabled, type: Boolean, desc: 'Sentry can also be used for reporting and logging clientside exceptions. https://sentry.io/for/javascript/'
given clientside_sentry_enabled: ->(val) { val } do
requires :clientside_sentry_dsn, type: String, desc: 'Clientside Sentry Data Source Name'
end
optional :container_registry_token_expire_delay, type: Integer, desc: 'Authorization token duration (minutes)' optional :container_registry_token_expire_delay, type: Integer, desc: 'Authorization token duration (minutes)'
optional :default_artifacts_expire_in, type: String, desc: "Set the default expiration time for each job's artifacts" optional :default_artifacts_expire_in, type: String, desc: "Set the default expiration time for each job's artifacts"
optional :default_project_creation, type: Integer, values: ::Gitlab::Access.project_creation_values, desc: 'Determine if developers can create projects in the group' optional :default_project_creation, type: Integer, values: ::Gitlab::Access.project_creation_values, desc: 'Determine if developers can create projects in the group'
...@@ -114,10 +110,6 @@ module API ...@@ -114,10 +110,6 @@ module API
end end
optional :restricted_visibility_levels, type: Array[String], desc: 'Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users.' optional :restricted_visibility_levels, type: Array[String], desc: 'Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users.'
optional :send_user_confirmation_email, type: Boolean, desc: 'Send confirmation email on sign-up' optional :send_user_confirmation_email, type: Boolean, desc: 'Send confirmation email on sign-up'
optional :sentry_enabled, type: Boolean, desc: 'Sentry is an error reporting and logging tool which is currently not shipped with GitLab, get it here: https://getsentry.com'
given sentry_enabled: ->(val) { val } do
requires :sentry_dsn, type: String, desc: 'Sentry Data Source Name'
end
optional :session_expire_delay, type: Integer, desc: 'Session duration in minutes. GitLab restart is required to apply changes.' optional :session_expire_delay, type: Integer, desc: 'Session duration in minutes. GitLab restart is required to apply changes.'
optional :shared_runners_enabled, type: Boolean, desc: 'Enable shared runners for new projects' optional :shared_runners_enabled, type: Boolean, desc: 'Enable shared runners for new projects'
given shared_runners_enabled: ->(val) { val } do given shared_runners_enabled: ->(val) { val } do
......
...@@ -16,8 +16,8 @@ module Gitlab ...@@ -16,8 +16,8 @@ module Gitlab
gon.shortcuts_path = Gitlab::Routing.url_helpers.help_page_path('shortcuts') gon.shortcuts_path = Gitlab::Routing.url_helpers.help_page_path('shortcuts')
gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class
if Gitlab::CurrentSettings.clientside_sentry_enabled if Gitlab.config.sentry.enabled
gon.sentry_dsn = Gitlab::CurrentSettings.clientside_sentry_dsn gon.sentry_dsn = Gitlab.config.sentry.clientside_dsn
gon.sentry_environment = Gitlab.config.sentry.environment gon.sentry_environment = Gitlab.config.sentry.environment
end end
......
...@@ -4,7 +4,7 @@ module Gitlab ...@@ -4,7 +4,7 @@ module Gitlab
module Sentry module Sentry
def self.enabled? def self.enabled?
(Rails.env.production? || Rails.env.development?) && (Rails.env.production? || Rails.env.development?) &&
Gitlab::CurrentSettings.sentry_enabled? Gitlab.config.sentry.enabled
end end
def self.context(current_user = nil) def self.context(current_user = nil)
......
...@@ -3796,9 +3796,6 @@ msgstr "" ...@@ -3796,9 +3796,6 @@ msgstr ""
msgid "Enable HTML emails" msgid "Enable HTML emails"
msgstr "" msgstr ""
msgid "Enable Sentry for error reporting and logging."
msgstr ""
msgid "Enable access to the Performance Bar for a given group." msgid "Enable access to the Performance Bar for a given group."
msgstr "" msgstr ""
...@@ -4018,9 +4015,6 @@ msgstr "" ...@@ -4018,9 +4015,6 @@ msgstr ""
msgid "Error" msgid "Error"
msgstr "" msgstr ""
msgid "Error Reporting and Logging"
msgstr ""
msgid "Error Tracking" msgid "Error Tracking"
msgstr "" msgstr ""
......
...@@ -10,7 +10,7 @@ describe 'RavenJS' do ...@@ -10,7 +10,7 @@ describe 'RavenJS' do
end end
it 'loads raven if sentry is enabled' do it 'loads raven if sentry is enabled' do
stub_application_setting(clientside_sentry_dsn: 'https://key@domain.com/id', clientside_sentry_enabled: true) stub_sentry_settings
visit new_user_session_path visit new_user_session_path
......
...@@ -354,36 +354,6 @@ describe ApplicationSetting do ...@@ -354,36 +354,6 @@ describe ApplicationSetting do
end end
end end
describe 'setting Sentry DSNs' do
context 'server DSN' do
it 'strips leading and trailing whitespace' do
subject.update(sentry_dsn: ' http://test ')
expect(subject.sentry_dsn).to eq('http://test')
end
it 'handles nil values' do
subject.update(sentry_dsn: nil)
expect(subject.sentry_dsn).to be_nil
end
end
context 'client-side DSN' do
it 'strips leading and trailing whitespace' do
subject.update(clientside_sentry_dsn: ' http://test ')
expect(subject.clientside_sentry_dsn).to eq('http://test')
end
it 'handles nil values' do
subject.update(clientside_sentry_dsn: nil)
expect(subject.clientside_sentry_dsn).to be_nil
end
end
end
describe '#disabled_oauth_sign_in_sources=' do describe '#disabled_oauth_sign_in_sources=' do
before do before do
allow(Devise).to receive(:omniauth_providers).and_return([:github]) allow(Devise).to receive(:omniauth_providers).and_return([:github])
......
...@@ -226,10 +226,8 @@ describe API::Helpers do ...@@ -226,10 +226,8 @@ describe API::Helpers do
allow_any_instance_of(self.class).to receive(:rack_response) allow_any_instance_of(self.class).to receive(:rack_response)
allow(Gitlab::Sentry).to receive(:enabled?).and_return(true) allow(Gitlab::Sentry).to receive(:enabled?).and_return(true)
stub_application_setting( stub_sentry_settings
sentry_enabled: true,
sentry_dsn: "dummy://12345:67890@sentry.localdomain/sentry/42"
)
configure_sentry configure_sentry
Raven.client.configuration.encoding = 'json' Raven.client.configuration.encoding = 'json'
end end
......
...@@ -81,6 +81,12 @@ module StubConfiguration ...@@ -81,6 +81,12 @@ module StubConfiguration
allow(Gitlab.config.repositories).to receive(:storages).and_return(Settingslogic.new(messages)) allow(Gitlab.config.repositories).to receive(:storages).and_return(Settingslogic.new(messages))
end end
def stub_sentry_settings
allow(Gitlab.config.sentry).to receive(:enabled).and_return(true)
allow(Gitlab.config.sentry).to receive(:dsn).and_return('dummy://b44a0828b72421a6d8e99efd68d44fa8@example.com/42')
allow(Gitlab.config.sentry).to receive(:clientside_dsn).and_return('dummy://b44a0828b72421a6d8e99efd68d44fa8@example.com/43')
end
def stub_kerberos_setting(messages) def stub_kerberos_setting(messages)
allow(Gitlab.config.kerberos).to receive_messages(to_settings(messages)) allow(Gitlab.config.kerberos).to receive_messages(to_settings(messages))
end end
......
...@@ -249,43 +249,4 @@ RSpec.shared_examples 'application settings examples' do ...@@ -249,43 +249,4 @@ RSpec.shared_examples 'application settings examples' do
expect(setting.password_authentication_enabled_for_web?).to be_falsey expect(setting.password_authentication_enabled_for_web?).to be_falsey
end end
describe 'sentry settings' do
context 'when the sentry settings are not set in gitlab.yml' do
it 'fallbacks to the settings in the database' do
setting.sentry_enabled = true
setting.sentry_dsn = 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/40'
setting.clientside_sentry_enabled = true
setting.clientside_sentry_dsn = 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/41'
allow(Gitlab.config.sentry).to receive(:enabled).and_return(false)
allow(Gitlab.config.sentry).to receive(:dsn).and_return(nil)
allow(Gitlab.config.sentry).to receive(:clientside_dsn).and_return(nil)
expect(setting.sentry_enabled).to eq true
expect(setting.sentry_dsn).to eq 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/40'
expect(setting.clientside_sentry_enabled).to eq true
expect(setting.clientside_sentry_dsn). to eq 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/41'
end
end
context 'when the sentry settings are set in gitlab.yml' do
it 'does not fallback to the settings in the database' do
setting.sentry_enabled = false
setting.sentry_dsn = 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/40'
setting.clientside_sentry_enabled = false
setting.clientside_sentry_dsn = 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/41'
allow(Gitlab.config.sentry).to receive(:enabled).and_return(true)
allow(Gitlab.config.sentry).to receive(:dsn).and_return('https://b44a0828b72421a6d8e99efd68d44fa8@example.com/42')
allow(Gitlab.config.sentry).to receive(:clientside_dsn).and_return('https://b44a0828b72421a6d8e99efd68d44fa8@example.com/43')
expect(setting).not_to receive(:read_attribute)
expect(setting.sentry_enabled).to eq true
expect(setting.sentry_dsn).to eq 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/42'
expect(setting.clientside_sentry_enabled).to eq true
expect(setting.clientside_sentry_dsn). to eq 'https://b44a0828b72421a6d8e99efd68d44fa8@example.com/43'
end
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