summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-01-30 14:43:59 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2017-01-30 14:43:59 +0000
commit7f27a35e1ee1eaf9b8846cc24d8b4d472008a648 (patch)
treec00d44d6bcf5a895e0d0acb5fcbb8397a7f5aef7
parent09567e93adf57421f3a7b86992b164e6a86e7542 (diff)
parent9bd424a3fd2829f92329f22365dd2f7105d67eb5 (diff)
downloadgitlab-ce-7f27a35e1ee1eaf9b8846cc24d8b4d472008a648.tar.gz
Merge branch 'zj-slow-service-fetch' into 'master'
Improve performance of triggered chat commands See merge request !8876
-rw-r--r--changelogs/unreleased/zj-slow-service-fetch.yml4
-rw-r--r--lib/api/services.rb13
2 files changed, 14 insertions, 3 deletions
diff --git a/changelogs/unreleased/zj-slow-service-fetch.yml b/changelogs/unreleased/zj-slow-service-fetch.yml
new file mode 100644
index 00000000000..8037361d2fc
--- /dev/null
+++ b/changelogs/unreleased/zj-slow-service-fetch.yml
@@ -0,0 +1,4 @@
+---
+title: Improve performance of slash commands
+merge_request: 8876
+author:
diff --git a/lib/api/services.rb b/lib/api/services.rb
index a0abec49438..1456fe4688b 100644
--- a/lib/api/services.rb
+++ b/lib/api/services.rb
@@ -661,6 +661,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
@@ -679,9 +687,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