diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2018-02-27 14:06:38 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2018-02-27 14:06:38 +0000 |
commit | 3bf448267b117e79f08ab2f4b769d24a705a5f0f (patch) | |
tree | 0ba9b06bb1341c7c2ac811c05e22c58c7f4a2375 | |
parent | 6c404813b9f47ee0b320cd9b913da0ca1dbd32bd (diff) | |
parent | e139d7af7923226bc39d3e42c200d5237c952e3c (diff) | |
download | gitlab-ce-3bf448267b117e79f08ab2f4b769d24a705a5f0f.tar.gz |
Merge branch '43620-lib-api-services-rb-retains-a-lot-of-memory-and-objects' into 'master'
Fix a performance/memory issue in lib/api/services.rb
Closes #43620
See merge request gitlab-org/gitlab-ce!17369
-rw-r--r-- | lib/api/services.rb | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/lib/api/services.rb b/lib/api/services.rb index 51e33e2c686..c5fb5db724f 100644 --- a/lib/api/services.rb +++ b/lib/api/services.rb @@ -1,6 +1,7 @@ +# frozen_string_literal: true module API class Services < Grape::API - chat_notification_settings = [ + CHAT_NOTIFICATION_SETTINGS = [ { required: true, name: :webhook, @@ -19,9 +20,9 @@ module API type: String, desc: 'The default chat channel' } - ] + ].freeze - chat_notification_flags = [ + CHAT_NOTIFICATION_FLAGS = [ { required: false, name: :notify_only_broken_pipelines, @@ -34,9 +35,9 @@ module API type: Boolean, desc: 'Send notifications only for the default branch' } - ] + ].freeze - chat_notification_channels = [ + CHAT_NOTIFICATION_CHANNELS = [ { required: false, name: :push_channel, @@ -85,9 +86,9 @@ module API type: String, desc: 'The name of the channel to receive wiki_page_events notifications' } - ] + ].freeze - chat_notification_events = [ + CHAT_NOTIFICATION_EVENTS = [ { required: false, name: :push_events, @@ -136,9 +137,9 @@ module API type: Boolean, desc: 'Enable notifications for wiki_page_events' } - ] + ].freeze - services = { + SERVICES = { 'asana' => [ { required: true, @@ -627,10 +628,10 @@ module API } ], 'slack' => [ - chat_notification_settings, - chat_notification_flags, - chat_notification_channels, - chat_notification_events + CHAT_NOTIFICATION_SETTINGS, + CHAT_NOTIFICATION_FLAGS, + CHAT_NOTIFICATION_CHANNELS, + CHAT_NOTIFICATION_EVENTS ].flatten, 'microsoft-teams' => [ { @@ -641,10 +642,10 @@ module API } ], 'mattermost' => [ - chat_notification_settings, - chat_notification_flags, - chat_notification_channels, - chat_notification_events + CHAT_NOTIFICATION_SETTINGS, + CHAT_NOTIFICATION_FLAGS, + CHAT_NOTIFICATION_CHANNELS, + CHAT_NOTIFICATION_EVENTS ].flatten, 'teamcity' => [ { @@ -672,9 +673,9 @@ module API desc: 'The password of the user' } ] - } + }.freeze - service_classes = [ + SERVICE_CLASSES = [ AsanaService, AssemblaService, BambooService, @@ -703,10 +704,10 @@ module API MattermostService, MicrosoftTeamsService, TeamcityService - ] + ].freeze if Rails.env.development? - services['mock-ci'] = [ + SERVICES['mock-ci'] = [ { required: true, name: :mock_service_url, @@ -714,17 +715,29 @@ module API desc: 'URL to the mock service' } ] - services['mock-deployment'] = [] - services['mock-monitoring'] = [] + SERVICES['mock-deployment'] = [] + SERVICES['mock-monitoring'] = [] - service_classes += [ + SERVICE_CLASSES += [ MockCiService, MockDeploymentService, MockMonitoringService ] end - trigger_services = { + SERVICE_CLASSES.each do |service| + event_names = service.try(:event_names) || next + event_names.each do |event_name| + SERVICES[service.to_param.tr("_", "-")] << { + required: false, + name: event_name.to_sym, + type: String, + desc: ServicesHelper.service_event_description(event_name) + } + end + end + + TRIGGER_SERVICES = { 'mattermost-slash-commands' => [ { name: :token, @@ -756,22 +769,9 @@ module API end end - services.each do |service_slug, settings| + SERVICES.each do |service_slug, settings| desc "Set #{service_slug} service for project" params do - service_classes.each do |service| - event_names = service.try(:event_names) || next - event_names.each do |event_name| - services[service.to_param.tr("_", "-")] << { - required: false, - name: event_name.to_sym, - type: String, - desc: ServicesHelper.service_event_description(event_name) - } - end - end - services.freeze - settings.each do |setting| if setting[:required] requires setting[:name], type: setting[:type], desc: setting[:desc] @@ -794,7 +794,7 @@ module API desc "Delete a service for project" params do - requires :service_slug, type: String, values: services.keys, desc: 'The name of the service' + requires :service_slug, type: String, values: SERVICES.keys, desc: 'The name of the service' end delete ":id/services/:service_slug" do service = user_project.find_or_initialize_service(params[:service_slug].underscore) @@ -814,7 +814,7 @@ module API success Entities::ProjectService end params do - requires :service_slug, type: String, values: services.keys, desc: 'The name of the service' + requires :service_slug, type: String, values: SERVICES.keys, desc: 'The name of the service' end get ":id/services/:service_slug" do service = user_project.find_or_initialize_service(params[:service_slug].underscore) @@ -822,7 +822,7 @@ module API end end - trigger_services.each do |service_slug, settings| + TRIGGER_SERVICES.each do |service_slug, settings| helpers do def slash_command_service(project, service_slug, params) project.services.active.where(template: false).find do |service| |