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