Commit 270ed1e3 authored by Peter Leitzen's avatar Peter Leitzen

Add structured logging for sidekiq workers

parent a001ed04
...@@ -13,6 +13,17 @@ module ApplicationWorker ...@@ -13,6 +13,17 @@ module ApplicationWorker
included do included do
set_queue set_queue
def structured_payload(payload = {})
context = Labkit::Context.current.to_h.merge(
'class' => self.class,
'job_status' => 'running',
'queue' => self.class.queue,
'jid' => jid
)
payload.stringify_keys.merge(context)
end
end end
class_methods do class_methods do
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
require 'spec_helper' require 'spec_helper'
describe ApplicationWorker do describe ApplicationWorker do
let(:worker) do let_it_be(:worker) do
Class.new do Class.new do
def self.name def self.name
'Gitlab::Foo::Bar::DummyWorker' 'Gitlab::Foo::Bar::DummyWorker'
...@@ -13,12 +13,51 @@ describe ApplicationWorker do ...@@ -13,12 +13,51 @@ describe ApplicationWorker do
end end
end end
let(:instance) { worker.new }
describe 'Sidekiq options' do describe 'Sidekiq options' do
it 'sets the queue name based on the class name' do it 'sets the queue name based on the class name' do
expect(worker.sidekiq_options['queue']).to eq('foo_bar_dummy') expect(worker.sidekiq_options['queue']).to eq('foo_bar_dummy')
end end
end end
describe '#structured_payload' do
let(:payload) { {} }
subject(:result) { instance.structured_payload(payload) }
it 'adds worker related payload' do
instance.jid = 'a jid'
expect(result).to include(
'class' => worker.class,
'job_status' => 'running',
'queue' => worker.queue,
'jid' => instance.jid
)
end
it 'adds labkit context' do
user = build_stubbed(:user, username: 'jane-doe')
instance.with_context(user: user) do
expect(result).to include('meta.user' => user.username)
end
end
it 'adds custom payload converting stringified keys' do
payload[:message] = 'some message'
expect(result).to include('message' => payload[:message])
end
it 'does not override predefined context keys with custom payload' do
payload['class'] = 'custom value'
expect(result).to include('class' => worker.class)
end
end
describe '.queue_namespace' do describe '.queue_namespace' do
it 'sets the queue name based on the class name' do it 'sets the queue name based on the class name' do
worker.queue_namespace :some_namespace worker.queue_namespace :some_namespace
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment