class Labkit::Tracing::GRPC::ServerInterceptor

GRPCServerInterceptor is a server-side GRPC interceptor for instrumenting GRPC calls with distributed tracing in a GRPC Ruby server

Public Instance Methods

bidi_streamer(requests: nil, call: nil, method: nil) { || ... } click to toggle source
# File lib/labkit/tracing/grpc/server_interceptor.rb, line 36
def bidi_streamer(requests: nil, call: nil, method: nil)
  wrap_with_tracing(call, method, "bidi_stream") do
    yield
  end
end
client_streamer(call: nil, method: nil) { || ... } click to toggle source
# File lib/labkit/tracing/grpc/server_interceptor.rb, line 24
def client_streamer(call: nil, method: nil)
  wrap_with_tracing(call, method, "client_stream") do
    yield
  end
end
request_response(request: nil, call: nil, method: nil) { || ... } click to toggle source
# File lib/labkit/tracing/grpc/server_interceptor.rb, line 18
def request_response(request: nil, call: nil, method: nil)
  wrap_with_tracing(call, method, "unary") do
    yield
  end
end
server_streamer(request: nil, call: nil, method: nil) { || ... } click to toggle source
# File lib/labkit/tracing/grpc/server_interceptor.rb, line 30
def server_streamer(request: nil, call: nil, method: nil)
  wrap_with_tracing(call, method, "server_stream") do
    yield
  end
end

Private Instance Methods

wrap_with_tracing(call, method, grpc_type) { || ... } click to toggle source
# File lib/labkit/tracing/grpc/server_interceptor.rb, line 44
def wrap_with_tracing(call, method, grpc_type)
  context = TracingUtils.tracer.extract(OpenTracing::FORMAT_TEXT_MAP, call.metadata)
  method_name = "/#{rpc_split(method).join("/")}"
  tags = {
    "component" => "grpc",
    "span.kind" => "server",
    "grpc.method" => method_name,
    "grpc.type" => grpc_type,
  }

  TracingUtils.with_tracing(operation_name: "grpc:#{method_name}", child_of: context, tags: tags) do |_span|
    yield
  end
end