summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-01-30 14:43:59 +0000
committerDJ Mountney <david@twkie.net>2017-01-31 12:32:47 -0800
commit061a0703116747552282f2f1e6160f42116a9f34 (patch)
tree067bf35ac9634be26c85cc39ba48ff4ab5ed75f1 /lib
parent2ef2d97a8581ab5e13b0e61f3055f98895d6089b (diff)
downloadgitlab-ce-061a0703116747552282f2f1e6160f42116a9f34.tar.gz
Merge branch 'zj-slow-service-fetch' into 'master'
Improve performance of triggered chat commands See merge request !8876
Diffstat (limited to 'lib')
-rw-r--r--lib/api/services.rb13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/api/services.rb b/lib/api/services.rb
index 3a9dfbb237c..aaf4b4c0fbb 100644
--- a/lib/api/services.rb
+++ b/lib/api/services.rb
@@ -619,6 +619,14 @@ module API
end
trigger_services.each do |service_slug, settings|
+ helpers do
+ def chat_command_service(project, service_slug, params)
+ project.services.active.where(template: false).find do |service|
+ service.try(:token) == params[:token] && service.to_param == service_slug.underscore
+ end
+ end
+ end
+
params do
requires :id, type: String, desc: 'The ID of a project'
end
@@ -637,9 +645,8 @@ module API
# This is not accurate, but done to prevent leakage of the project names
not_found!('Service') unless project
- service = project.find_or_initialize_service(service_slug.underscore)
-
- result = service.try(:active?) && service.try(:trigger, params)
+ service = chat_command_service(project, service_slug, params)
+ result = service.try(:trigger, params)
if result
status result[:status] || 200