class GrpcOpencensusInterceptor::ClientInterceptor

Public Class Methods

new(span_context: nil, sampler: nil) click to toggle source

@param [SpanContext] span_context The span context within which

to create spans. Optional: If omitted, spans are created in the
current thread-local span context.

@param [#call] sampler The sampler to use when creating spans.

Optional: If omitted, uses the sampler in the current config.
# File lib/grpc_opencensus_interceptor/client_interceptor.rb, line 8
def initialize(span_context: nil, sampler: nil)
  @span_context = span_context || OpenCensus::Trace
  @sampler      = sampler
  @serializer   = OpenCensus::Trace::Formatters::Binary.new
end

Public Instance Methods

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

Intercept a unary request response call

@param [Object] request @param [GRPC::ActiveCall] call @param [String] method @param [Hash] metadata

# File lib/grpc_opencensus_interceptor/client_interceptor.rb, line 22
def request_response(request:, call:, method:, metadata:)
  span_context = @span_context
  if span_context == OpenCensus::Trace && !span_context.span_context
    return yield
  end

  # NOTE: Use method as span name
  span_name = method

  span = span_context.start_span span_name, sampler: @sampler
  start_request span, method, metadata
  begin
    grpc_ex = GRPC::Ok.new
    yield
  rescue StandardError => e
    grpc_ex = Util.to_grpc_ex(e)
    raise e
  ensure
    finish_request span, grpc_ex
    span_context.end_span span
  end
end

Private Instance Methods

finish_request(span, exception) click to toggle source

@private Set span attributes from response

@param [OpenCensus::Trace::SpanBuilder] span @param [GRPC::BadStatus] exception

# File lib/grpc_opencensus_interceptor/client_interceptor.rb, line 75
def finish_request span, exception
  span.set_status exception.code
  span.put_attribute "http.status_code", Util.to_http_status(exception)

  # TODO(south37) Set attributes
  # span.put_message_event SpanBuilder::RECEIVED, 1, body_size
end
start_request(span, method, metadata) click to toggle source

@private Set span attributes

@param [OpenCensus::Trace::SpanBuilder] span @param [String] method @param [Hash] metadata

# File lib/grpc_opencensus_interceptor/client_interceptor.rb, line 56
def start_request span, method, metadata
  span.kind = OpenCensus::Trace::SpanBuilder::CLIENT
  span.put_attribute "http.method", "POST" # NOTE: Always use POST

  span.put_attribute "http.path", method

  # TODO(south37) Set attributes
  # span.put_message_event SpanBuilder::SENT, 1, body_size

  trace_context = @serializer.serialize span.context.trace_context
  metadata[Util::OPENCENSUS_TRACE_BIN_KEY] = trace_context
end