class Gruf::Prometheus::Collector

Prometheus instrumentor for gRPC servers

Public Instance Methods

collect(metrics = {}) click to toggle source
# File lib/gruf/prometheus/collector.rb, line 24
def collect(metrics = {})
  metrics[:type] = 'grpc'
  rpc_server = grpc_server
  return metrics unless rpc_server

  rpc_server.instance_variable_get(:@run_mutex).synchronize do
    collect_server_metrics(rpc_server, metrics)
  end
  metrics
end
collect_server_metrics(rpc_server, metrics) click to toggle source

@param [GRPC::RpcServer] rpc_server @param [Hash] metrics

# File lib/gruf/prometheus/collector.rb, line 39
def collect_server_metrics(rpc_server, metrics)
  pool = rpc_server.instance_variable_get(:@pool)
  metrics[:pool_jobs_waiting_total] = pool.jobs_waiting.to_i
  metrics[:pool_ready_workers_total] = pool.instance_variable_get(:@ready_workers).size
  metrics[:pool_workers_total] = pool.instance_variable_get(:@workers)&.size
  metrics[:pool_initial_size] = rpc_server.instance_variable_get(:@pool_size).to_i
  metrics[:poll_period] = rpc_server.instance_variable_get(:@poll_period).to_i
end
grpc_server() click to toggle source

@return [GRPC::RpcServer]

# File lib/gruf/prometheus/collector.rb, line 51
def grpc_server
  @options.fetch(:server, nil)&.server
end