class Honeykiq::ServerMiddleware

Attributes

libhoney[R]
tracing_mode[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 5
def initialize(options = {})
  @libhoney = options[:libhoney] || options[:honey_client]
  @tracing_mode = options[:tracing_mode]
end

Public Instance Methods

call(_worker, msg, queue_name) { || ... } click to toggle source
# File lib/honeykiq/server_middleware.rb, line 10
def call(_worker, msg, queue_name)
  job = Sidekiq::JobRecord.new(msg, queue_name)
  queue = Sidekiq::Queue.new(queue_name)

  span_builder.call(name: job.display_class, serialized_trace: msg["serialized_trace"]) do |event|
    call_with_event(event, job, queue) { yield }
  end
end
extra_fields(_job = nil) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 19
def extra_fields(_job = nil)
  {}
end

Private Instance Methods

call_extra_fields(job) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 85
def call_extra_fields(job)
  case method(:extra_fields).arity
  when 0 then extra_fields
  else extra_fields(job)
  end
end
call_with_event(event, job, queue) { || ... } click to toggle source
# File lib/honeykiq/server_middleware.rb, line 35
def call_with_event(event, job, queue)
  event.add(default_fields(job, queue))
  yield
  event.add_field(:'job.status', "finished")
rescue => error
  on_error(event, error)
  raise
ensure
  event.add(call_extra_fields(job))
end
default_fields(job, queue) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 46
def default_fields(job, queue)
  {
    type: :job,
    **job_fields(job),
    **queue_fields(queue),
    'meta.thread_id': Thread.current.object_id
  }
end
job_fields(job) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 55
def job_fields(job)
  {
    'job.class': job.display_class,
    'job.attempt_number': (job["retry_count"].to_i.nonzero? || 0) + 1,
    'job.id': job.jid,
    'job.arguments_bytes': job.args.to_json.bytesize,
    'job.latency_sec': job.latency,
    'job.batch_id': job["bid"]
  }.compact
end
libhoney?() click to toggle source
# File lib/honeykiq/server_middleware.rb, line 27
def libhoney?
  !!libhoney
end
on_error(event, error) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 73
def on_error(event, error)
  return unless event

  event.add_field(:'job.status', "failed")
  return unless libhoney?

  event.add(
    'error.class': error.class.name,
    'error.message': error.message
  )
end
queue_fields(queue) click to toggle source
# File lib/honeykiq/server_middleware.rb, line 66
def queue_fields(queue)
  {
    'queue.name': queue.name,
    'queue.size': queue.size
  }
end
span_builder() click to toggle source
# File lib/honeykiq/server_middleware.rb, line 31
def span_builder
  @span_builder ||= libhoney? ? LibhoneySpan.new(libhoney) : BeelineSpan.new(tracing_mode)
end