class GRPCPrometheus::ServerMetrics

Attributes

server_handled_counter[R]
server_started_counter[R]

Public Class Methods

new() click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 10
def initialize
  @registry = ::Prometheus::Client.registry
  @server_started_counter = @registry.counter(
    :grpc_server_started_total,
    'Total number of RPCs started on the server.',
  )
  @server_handled_counter = @registry.counter(
    :grpc_server_handled_total,
    'Total number of RPCs completed on the server, regardless of success or failure.',
  )
end

Public Instance Methods

initialize_metrics(server) click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 26
def initialize_metrics(server)
  # FIXME
  server.instance_variable_get(:@rpc_descs).each do |full_method_name, method_info|
    matches = full_method_name.match(%r{^/([^/]+)/})
    service_name = matches[1]
    method_name = matches[2]
    pre_register_method(service_name, method_info)
  end
end
pre_register_method(service_name, method_info) click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 36
def pre_register_method(service_name, method_info)
  labels = {
    grpc_service: service_name,
    grpc_method: method_info.name.to_s,
    grpc_type: Util.type_from_method_info(method_info),
  }
  server_started_counter.increment(labels, 0)
  Util::ALL_CODES.each do |code, code_as_str|
    labels_with_code = labels.dup.merge({ grpc_code: code_as_str })
    server_handled_counter.increment(labels_with_code, 0)
  end
end
server_interceptor() click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 22
def server_interceptor
  ServerInterceptor.new(self)
end
start_metric_endpoint_in_background(bind: '0.0.0.0', port: 19191, metrics_path: '/metrics') click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 49
def start_metric_endpoint_in_background(bind: '0.0.0.0', port: 19191, metrics_path: '/metrics')
  config = {
    BindAddress: bind,
    Port: port,
    MaxClients: 5,
    Logger: ::WEBrick::Log.new(STDERR, ::WEBrick::Log::FATAL),
    AccessLog: [],
  }
  server = ::WEBrick::HTTPServer.new(config)
  server.mount(metrics_path, MonitorServlet, @registry)
  Thread.start do
    server.start
  end
end