class ElasticAPM::GRPC::ServerInterceptor

@api private

Constants

TYPE

Public Instance Methods

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

rubocop:disable Lint/UnusedMethodArgument

# File lib/elastic_apm/grpc.rb, line 66
def request_response(request:, call:, method:)
  transaction = start_transaction(call)
  yield
  transaction.done 'success'
rescue ::Exception => e
  ElasticAPM.report(e, handled: false)
  transaction&.done 'error'
  raise
ensure
  ElasticAPM.end_transaction
end

Private Instance Methods

start_transaction(call) click to toggle source

rubocop:enable Lint/UnusedMethodArgument

# File lib/elastic_apm/grpc.rb, line 81
def start_transaction(call)
  ElasticAPM.start_transaction(
    'grpc',
    'request',
    trace_context: trace_context(call)
  )
end
trace_context(call) click to toggle source
# File lib/elastic_apm/grpc.rb, line 89
def trace_context(call)
  TraceContext.parse(metadata: call.metadata)
rescue TraceContext::InvalidTraceparentHeader
  warn "Couldn't parse invalid trace context header: #{call.metadata}"
  nil
end