class Atatus::GRPC::ClientInterceptor

@api private

Constants

SUBTYPE
TYPE

Public Instance Methods

request_response(request:, call:, method:, metadata:) { || ... } click to toggle source

rubocop:disable Lint/UnusedMethodArgument

# File lib/atatus/grpc.rb, line 29
def request_response(request:, call:, method:, metadata:)
  return yield unless (transaction = Atatus.current_transaction)
  if (trace_context = transaction.trace_context)
    trace_context.apply_headers { |k, v| metadata[k.downcase] = v }
  end

  Atatus.with_span(
    method, TYPE,
    subtype: SUBTYPE,
    context: span_context(call)
  ) do
    yield
  end
end

Private Instance Methods

span_context(call) click to toggle source

rubocop:enable Lint/UnusedMethodArgument

# File lib/atatus/grpc.rb, line 47
def span_context(call)
  peer = call.instance_variable_get(:@wrapped)&.peer
  return unless peer

  split_peer = URI.split(peer)
  destination = Atatus::Span::Context::Destination.new(
    type: TYPE,
    name: SUBTYPE,
    resource: peer,
    address: split_peer[0],
    port: split_peer[6]
  )
  Atatus::Span::Context.new(destination: destination)
end