diff options
-rw-r--r-- | app/workers/project_service_worker.rb | 6 | ||||
-rw-r--r-- | changelogs/unreleased/issue_50528.yml | 5 | ||||
-rw-r--r-- | spec/workers/project_service_worker_spec.rb | 25 |
3 files changed, 35 insertions, 1 deletions
diff --git a/app/workers/project_service_worker.rb b/app/workers/project_service_worker.rb index a0bc9288cf0..25567cec08b 100644 --- a/app/workers/project_service_worker.rb +++ b/app/workers/project_service_worker.rb @@ -7,6 +7,10 @@ class ProjectServiceWorker def perform(hook_id, data) data = data.with_indifferent_access - Service.find(hook_id).execute(data) + service = Service.find(hook_id) + service.execute(data) + rescue => error + service_class = service&.class&.name || "Not Found" + logger.error class: self.class.name, service_class: service_class, message: error.message end end diff --git a/changelogs/unreleased/issue_50528.yml b/changelogs/unreleased/issue_50528.yml new file mode 100644 index 00000000000..82d33bfa255 --- /dev/null +++ b/changelogs/unreleased/issue_50528.yml @@ -0,0 +1,5 @@ +--- +title: Log project services errors when executing async +merge_request: +author: +type: other diff --git a/spec/workers/project_service_worker_spec.rb b/spec/workers/project_service_worker_spec.rb new file mode 100644 index 00000000000..56934f122e4 --- /dev/null +++ b/spec/workers/project_service_worker_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true +require 'spec_helper' + +describe ProjectServiceWorker, '#perform' do + let(:worker) { described_class.new } + let(:service) { JiraService.new } + + before do + allow(Service).to receive(:find).and_return(service) + end + + it 'executes service with given data' do + data = { test: 'test' } + expect(service).to receive(:execute).with(data) + + worker.perform(1, data) + end + + it 'logs error messages' do + allow(service).to receive(:execute).and_raise(StandardError, 'invalid URL') + expect(Sidekiq.logger).to receive(:error).with({ class: described_class.name, service_class: service.class.name, message: "invalid URL" }) + + worker.perform(1, {}) + end +end |