class Gruf::Prometheus::Client::Interceptor

Server interceptor for measuring counter/timers for gRPC inbound requests

Public Instance Methods

call(request_context:, &block) click to toggle source

Intercept the call and send metrics

# File lib/gruf/prometheus/client/interceptor.rb, line 28
def call(request_context:, &block)
  result = ::Gruf::Interceptors::Timer.time(&block)

  send_metrics(request_context: request_context, result: result)

  raise result.message unless result.successful?

  result.message
end

Private Instance Methods

measure_latency?() click to toggle source

@return [Boolean]

# File lib/gruf/prometheus/client/interceptor.rb, line 63
def measure_latency?
  @measure_latency ||= @options.fetch(:measure_latency, ::Gruf::Prometheus.client_measure_latency)
end
prometheus_collector() click to toggle source

@return [::Gruf::Prometheus::Client::Collector]

# File lib/gruf/prometheus/client/interceptor.rb, line 56
def prometheus_collector
  @prometheus_collector ||= ::Gruf::Prometheus::Client::Collector.new(type: 'grpc_client')
end
send_metrics(request_context:, result:) click to toggle source

@param [Gruf::Outbound::RequestContext] request_context @param [Gruf::Interceptors::Timer::Result] result

# File lib/gruf/prometheus/client/interceptor.rb, line 44
def send_metrics(request_context:, result:)
  prometheus_collector.started_total(request_context: request_context)
  prometheus_collector.completed(request_context: request_context, result: result)
  prometheus_collector.completed_latency_seconds(request_context: request_context, result: result) if measure_latency?
rescue StandardError => e
  # we don't want this to affect actual RPC execution, so just log an error and move on
  Gruf.logger.error "Failed registering metric to prometheus type collector: #{e.message} - #{e.class.name}"
end