class GRPCPrometheus::ServerInterceptor

Public Class Methods

new(server_metrics) click to toggle source
# File lib/grpc_prometheus/server_interceptor.rb, line 3
def initialize(server_metrics)
  @server_metrics = server_metrics
end

Public Instance Methods

bidi_streamer(requests: nil, call: nil, method: nil) { || ... } click to toggle source
# File lib/grpc_prometheus/server_interceptor.rb, line 74
def bidi_streamer(requests: nil, call: nil, method: nil)
  reporter = ServerReporter.new(
    server_metrics: @server_metrics,
    method: method,
    grpc_type: GRPCType::BIDI_STREAM,
  )
  grpc_err = nil
  yield
rescue => err
  grpc_err = to_grpc_err(err)
  raise err
ensure
  if grpc_err
    reporter.handled(Util::ALL_CODES[grpc_err.code])
  else
    reporter.handled(Util::ALL_CODES[::GRPC::Core::StatusCodes::OK])
  end
end
client_streamer(call: nil, method: nil) { || ... } click to toggle source

These metrics for streaming messages can't be collected with the current gRPC implementation in Ruby

  • grpc_server_msg_received_total

  • grpc_server_msg_sent_total

Need to wait for this Pull Request to be released:

# File lib/grpc_prometheus/server_interceptor.rb, line 36
def client_streamer(call: nil, method: nil)
  reporter = ServerReporter.new(
    server_metrics: @server_metrics,
    method: method,
    grpc_type: GRPCType::CLIENT_STREAM,
  )
  grpc_err = nil
  yield
rescue => err
  grpc_err = to_grpc_err(err)
  raise err
ensure
  if grpc_err
    reporter.handled(Util::ALL_CODES[grpc_err.code])
  else
    reporter.handled(Util::ALL_CODES[::GRPC::Core::StatusCodes::OK])
  end
end
request_response(request: nil, call: nil, method: nil) { || ... } click to toggle source
# File lib/grpc_prometheus/server_interceptor.rb, line 7
def request_response(request: nil, call: nil, method: nil)
  reporter = ServerReporter.new(
    server_metrics: @server_metrics,
    method: method,
    grpc_type: GRPCType::UNARY,
  )
  grpc_err = nil
  yield
rescue => err
  grpc_err = to_grpc_err(err)
  raise err
ensure
  if grpc_err
    reporter.handled(Util::ALL_CODES[grpc_err.code])
  else
    reporter.handled(Util::ALL_CODES[::GRPC::Core::StatusCodes::OK])
  end
end
server_streamer(request: nil, call: nil, method: nil) { || ... } click to toggle source
# File lib/grpc_prometheus/server_interceptor.rb, line 55
def server_streamer(request: nil, call: nil, method: nil)
  reporter = ServerReporter.new(
    server_metrics: @server_metrics,
    method: method,
    grpc_type: GRPCType::SERVER_STREAM,
  )
  grpc_err = nil
  yield
rescue => err
  grpc_err = to_grpc_err(err)
  raise err
ensure
  if grpc_err
    reporter.handled(Util::ALL_CODES[grpc_err.code])
  else
    reporter.handled(Util::ALL_CODES[::GRPC::Core::StatusCodes::OK])
  end
end

Private Instance Methods

to_grpc_err(err) click to toggle source
# File lib/grpc_prometheus/server_interceptor.rb, line 95
def to_grpc_err(err)
  if err.is_a?(::GRPC::BadStatus)
    err
  else
    ::GRPC::BadStatus.new_status_exception(
      ::GRPC::Core::StatusCodes::UNKNOWN,
      err.message
    )
  end
end