Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-01-30 17:43:59 +0300
committerDJ Mountney <david@twkie.net>2017-01-31 23:32:47 +0300
commit061a0703116747552282f2f1e6160f42116a9f34 (patch)
tree067bf35ac9634be26c85cc39ba48ff4ab5ed75f1
parent2ef2d97a8581ab5e13b0e61f3055f98895d6089b (diff)
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 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