class ElasticAPM::GRPC::ServerInterceptor

@api private

def request_response(request:, call:, method:)

rubocop:disable Lint/UnusedMethodArgument
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

def start_transaction(call)

def start_transaction(call)
  ElasticAPM.start_transaction(
    'grpc',
    'request',
    trace_context: trace_context(call)
  )
end

def trace_context(call)

def trace_context(call)
  TraceContext.parse(metadata: call.metadata)
rescue TraceContext::InvalidTraceparentHeader
  warn "Couldn't parse invalid trace context header: #{call.metadata}"
  nil
end