Class: GRPCPrometheus::ServerInterceptor

Inherits:
GRPC::ServerInterceptor
  • Object
show all
Defined in:
lib/grpc_prometheus/server_interceptor.rb

Instance Method Summary collapse

Constructor Details

#initialize(server_metrics) ⇒ ServerInterceptor

Returns a new instance of ServerInterceptor.



3
4
5
# File 'lib/grpc_prometheus/server_interceptor.rb', line 3

def initialize(server_metrics)
  @server_metrics = server_metrics
end

Instance Method Details

#bidi_streamer(requests: nil, call: nil, method: nil) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# 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) ⇒ Object

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:



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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