diff options
author | Ryan LaNeve <ryan.laneve@aciss.com> | 2013-01-24 15:15:24 -0500 |
---|---|---|
committer | Ryan LaNeve <ryan.laneve@aciss.com> | 2013-01-25 10:42:57 -0500 |
commit | 8a65229b3548a421ca6e7c41a819b40d50f7e162 (patch) | |
tree | b762df8aa5346c9b8b069d61e95b4c764445a24a /app | |
parent | 639b0a8715074a166eb9ef4252e4f2b5ae5e2c84 (diff) | |
download | gitlab-ce-8a65229b3548a421ca6e7c41a819b40d50f7e162.tar.gz |
Updates project to process web hooks async via sidekiq.
A new queue of "project_web_hook" is used to process web hooks asynchronously, allowing each to succeed/fail (and be retried) independently.
(Basically, project web hooks now process the same as system hooks.)
Diffstat (limited to 'app')
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/models/web_hook.rb | 4 | ||||
-rw-r--r-- | app/workers/project_web_hook_worker.rb | 9 |
3 files changed, 14 insertions, 1 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index e521dfc93da..cb6986ce43d 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -340,7 +340,7 @@ class Project < ActiveRecord::Base end def execute_hooks(data) - hooks.each { |hook| hook.execute(data) } + hooks.each { |hook| hook.async_execute(data) } end def execute_services(data) diff --git a/app/models/web_hook.rb b/app/models/web_hook.rb index df58fa93b7e..efa27f31982 100644 --- a/app/models/web_hook.rb +++ b/app/models/web_hook.rb @@ -34,4 +34,8 @@ class WebHook < ActiveRecord::Base basic_auth: {username: parsed_url.user, password: parsed_url.password}) end end + + def async_execute(data) + Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data) + end end diff --git a/app/workers/project_web_hook_worker.rb b/app/workers/project_web_hook_worker.rb new file mode 100644 index 00000000000..9f9b9b1df5f --- /dev/null +++ b/app/workers/project_web_hook_worker.rb @@ -0,0 +1,9 @@ +class ProjectWebHookWorker + include Sidekiq::Worker + + sidekiq_options queue: :project_web_hook + + def perform(hook_id, data) + WebHook.find(hook_id).execute data + end +end |