summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-16 00:08:32 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-16 00:08:32 +0000
commitb0f27742e78a4aa4208c271536b6b9d84c53b49e (patch)
treebe4664298b0a70efd233e23751aab518ad3e1f4e /lib
parent600ca978129e3ccab758f57d60786cefe66ad775 (diff)
downloadgitlab-ce-b0f27742e78a4aa4208c271536b6b9d84c53b49e.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/database_importers/instance_administrators/create_group.rb131
-rw-r--r--lib/gitlab/database_importers/self_monitoring/project/create_service.rb66
-rw-r--r--lib/sentry/client.rb3
3 files changed, 141 insertions, 59 deletions
diff --git a/lib/gitlab/database_importers/instance_administrators/create_group.rb b/lib/gitlab/database_importers/instance_administrators/create_group.rb
new file mode 100644
index 00000000000..5bf0e5a320d
--- /dev/null
+++ b/lib/gitlab/database_importers/instance_administrators/create_group.rb
@@ -0,0 +1,131 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module DatabaseImporters
+ module InstanceAdministrators
+ class CreateGroup < ::BaseService
+ include Stepable
+
+ VISIBILITY_LEVEL = Gitlab::VisibilityLevel::INTERNAL
+
+ steps :validate_application_settings,
+ :validate_admins,
+ :create_group,
+ :save_group_id,
+ :add_group_members,
+ :track_event
+
+ def initialize
+ super(nil)
+ end
+
+ def execute
+ execute_steps
+ end
+
+ private
+
+ def validate_application_settings(result)
+ return success(result) if application_settings
+
+ log_error('No application_settings found')
+ error(_('No application_settings found'))
+ end
+
+ def validate_admins(result)
+ unless instance_admins.any?
+ log_error('No active admin user found')
+ return error(_('No active admin user found'))
+ end
+
+ success(result)
+ end
+
+ def create_group(result)
+ if group_created?
+ log_info(_('Instance administrators group already exists'))
+ result[:group] = instance_administrators_group
+ return success(result)
+ end
+
+ result[:group] = ::Groups::CreateService.new(instance_admins.first, create_group_params).execute
+
+ if result[:group].persisted?
+ success(result)
+ else
+ log_error("Could not create instance administrators group. Errors: %{errors}" % { errors: result[:group].errors.full_messages })
+ error(_('Could not create group'))
+ end
+ end
+
+ def save_group_id(result)
+ return success(result) if group_created?
+
+ response = application_settings.update(
+ instance_administrators_group_id: result[:group].id
+ )
+
+ if response
+ success(result)
+ else
+ log_error("Could not save instance administrators group ID, errors: %{errors}" % { errors: application_settings.errors.full_messages })
+ error(_('Could not save group ID'))
+ end
+ end
+
+ def add_group_members(result)
+ group = result[:group]
+ members = group.add_users(members_to_add(group), Gitlab::Access::MAINTAINER)
+ errors = members.flat_map { |member| member.errors.full_messages }
+
+ if errors.any?
+ log_error('Could not add admins as members to self-monitoring project. Errors: %{errors}' % { errors: errors })
+ error(_('Could not add admins as members'))
+ else
+ success(result)
+ end
+ end
+
+ def track_event(result)
+ ::Gitlab::Tracking.event("instance_administrators_group", "group_created")
+
+ success(result)
+ end
+
+ def group_created?
+ instance_administrators_group.present?
+ end
+
+ def application_settings
+ @application_settings ||= ApplicationSetting.current_without_cache
+ end
+
+ def instance_administrators_group
+ application_settings.instance_administrators_group
+ end
+
+ def instance_admins
+ @instance_admins ||= User.admins.active
+ end
+
+ def members_to_add(group)
+ # Exclude admins who are already members of group because
+ # `group.add_users(users)` returns an error if the users parameter contains
+ # users who are already members of the group.
+ instance_admins - group.members.collect(&:user)
+ end
+
+ def create_group_params
+ {
+ name: 'GitLab Instance Administrators',
+ visibility_level: VISIBILITY_LEVEL,
+
+ # The 8 random characters at the end are so that the path does not
+ # clash with any existing group that the user might have created.
+ path: "gitlab-instance-administrators-#{SecureRandom.hex(4)}"
+ }
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb
index 92a2e504a11..d08afeef3b6 100644
--- a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb
+++ b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb
@@ -12,11 +12,9 @@ module Gitlab
PROJECT_NAME = 'GitLab Instance Administration'
steps :validate_application_settings,
- :validate_admins,
:create_group,
:create_project,
:save_project_id,
- :add_group_members,
:add_prometheus_manual_configuration,
:track_event
@@ -37,28 +35,14 @@ module Gitlab
error(_('No application_settings found'))
end
- def validate_admins(result)
- unless instance_admins.any?
- log_error('No active admin user found')
- return error(_('No active admin user found'))
- end
-
- success(result)
- end
-
def create_group(result)
- if project_created?
- log_info(_('Instance administrators group already exists'))
- result[:group] = self_monitoring_project.owner
- return success(result)
- end
-
- result[:group] = ::Groups::CreateService.new(group_owner, create_group_params).execute
+ create_group_response =
+ Gitlab::DatabaseImporters::InstanceAdministrators::CreateGroup.new.execute
- if result[:group].persisted?
- success(result)
+ if create_group_response[:status] == :success
+ success(result.merge(create_group_response))
else
- error(_('Could not create group'))
+ error(create_group_response[:message])
end
end
@@ -69,7 +53,9 @@ module Gitlab
return success(result)
end
- result[:project] = ::Projects::CreateService.new(group_owner, create_project_params(result[:group])).execute
+ owner = result[:group].owners.first
+
+ result[:project] = ::Projects::CreateService.new(owner, create_project_params(result[:group])).execute
if result[:project].persisted?
success(result)
@@ -94,19 +80,6 @@ module Gitlab
end
end
- def add_group_members(result)
- group = result[:group]
- members = group.add_users(members_to_add(group), Gitlab::Access::MAINTAINER)
- errors = members.flat_map { |member| member.errors.full_messages }
-
- if errors.any?
- log_error('Could not add admins as members to self-monitoring project. Errors: %{errors}' % { errors: errors })
- error(_('Could not add admins as members'))
- else
- success(result)
- end
- end
-
def add_prometheus_manual_configuration(result)
return success(result) unless prometheus_enabled?
return success(result) unless prometheus_listen_address.present?
@@ -140,29 +113,6 @@ module Gitlab
::Gitlab::Prometheus::Internal.listen_address
end
- def instance_admins
- @instance_admins ||= User.admins.active
- end
-
- def group_owner
- instance_admins.first
- end
-
- def members_to_add(group)
- # Exclude admins who are already members of group because
- # `group.add_users(users)` returns an error if the users parameter contains
- # users who are already members of the group.
- instance_admins - group.members.collect(&:user)
- end
-
- def create_group_params
- {
- name: 'GitLab Instance Administrators',
- path: "gitlab-instance-administrators-#{SecureRandom.hex(4)}",
- visibility_level: VISIBILITY_LEVEL
- }
- end
-
def docs_path
Rails.application.routes.url_helpers.help_page_path(
'administration/monitoring/gitlab_instance_administration_project/index'
diff --git a/lib/sentry/client.rb b/lib/sentry/client.rb
index 20c919a97ff..490f82c4678 100644
--- a/lib/sentry/client.rb
+++ b/lib/sentry/client.rb
@@ -33,6 +33,7 @@ module Sentry
def request_params
{
headers: {
+ 'Content-Type' => 'application/json',
'Authorization' => "Bearer #{@token}"
},
follow_redirects: false
@@ -47,7 +48,7 @@ module Sentry
def http_put(url, params = {})
http_request do
- Gitlab::HTTP.put(url, **request_params.merge(body: params))
+ Gitlab::HTTP.put(url, **request_params.merge(body: params.to_json))
end
end