diff --git a/lib/travis/api/app/endpoint/builds.rb b/lib/travis/api/app/endpoint/builds.rb index 37d4b317..51197af2 100644 --- a/lib/travis/api/app/endpoint/builds.rb +++ b/lib/travis/api/app/endpoint/builds.rb @@ -1,6 +1,6 @@ require 'travis/api/app' require 'travis/api/workers/build_cancellation' -require 'travis/api/workers/build_restart' +require 'travis/api/enqueue/services/enqueue_build' class Travis::Api::App class Endpoint @@ -54,12 +54,8 @@ class Travis::Api::App status 400 result = false else - - ::Sidekiq::Client.push( - 'queue' => 'hub', - 'class' => 'Travis::Hub::Sidekiq::Worker', - 'args' => ["build:restart", {id: params[:id], user_id: current_user.id}] - ) + payload = {id: params[:id], user_id: current_user.id} + Travis::Enqueue::Services::EnqueueBuild.push("build:restart", payload) status 202 result = true diff --git a/lib/travis/api/enqueue/services/enqueue_build.rb b/lib/travis/api/enqueue/services/enqueue_build.rb new file mode 100644 index 00000000..2601cb1b --- /dev/null +++ b/lib/travis/api/enqueue/services/enqueue_build.rb @@ -0,0 +1,18 @@ +module Travis + module Enqueue + module Services + + class EnqueueBuild + + def self.push(event, payload) + ::Sidekiq::Client.push( + 'queue' => 'hub', + 'class' => 'Travis::Hub::Sidekiq::Worker', + 'args' => [event, payload] + ) + end + end + + end + end +end diff --git a/lib/travis/api/workers/build_restart.rb b/lib/travis/api/workers/build_restart.rb index 2bf98c85..427bc24b 100644 --- a/lib/travis/api/workers/build_restart.rb +++ b/lib/travis/api/workers/build_restart.rb @@ -4,15 +4,14 @@ require 'multi_json' module Travis module Sidekiq class BuildRestart - include ::Sidekiq::Worker - sidekiq_options queue: :hub + class ProcessingError < StandardError; end - def perform(payload) - ::Sidekiq::Client.push( - 'queue' => 'hub', - 'class' => 'Travis::Hub::Sidekiq::Worker', - 'args' => ["build:restart", payload] - ) + include ::Sidekiq::Worker + sidekiq_options queue: :build_restarts + + def perform(data) + user = User.find(data['user_id']) + Travis.service(:reset_model, user, build_id: data['id']).run end end diff --git a/lib/travis/sidekiq.rb b/lib/travis/sidekiq.rb index 077e6055..e1f9b5d2 100644 --- a/lib/travis/sidekiq.rb +++ b/lib/travis/sidekiq.rb @@ -2,7 +2,6 @@ require 'sidekiq' require 'travis' require 'travis/api/workers/build_cancellation' -require 'travis/api/workers/build_restart' require 'travis/api/workers/job_cancellation' require 'travis/api/workers/job_restart' require 'travis/support/amqp' diff --git a/spec/integration/v2/builds_spec.rb b/spec/integration/v2/builds_spec.rb index e36aeeb2..517d2623 100644 --- a/spec/integration/v2/builds_spec.rb +++ b/spec/integration/v2/builds_spec.rb @@ -119,13 +119,13 @@ describe 'Builds' do end it 'restarts the build' do - Travis::Sidekiq::BuildRestart.expects(:perform_async).with(id: build.id.to_s, user_id: user.id) + Travis::Enqueue::Services::EnqueueBuild.expects(:push).with("build:restart", {id: build.id.to_s, user_id: user.id}) response = post "/builds/#{build.id}/restart", {}, headers response.status.should == 202 end it 'sends the correct response body' do - Travis::Sidekiq::BuildRestart.expects(:perform_async).with(id: build.id.to_s, user_id: user.id) + Travis::Enqueue::Services::EnqueueBuild.expects(:push).with("build:restart", {id: build.id.to_s, user_id: user.id}) response = post "/builds/#{build.id}/restart", {}, headers body = JSON.parse(response.body) body.should == {"result"=>true, "flash"=>[{"notice"=>"The build was successfully restarted."}]}