class Gruf::Prometheus::Client::Collector
Prometheus
instrumentor for gRPC clients
Constants
- RESPONSE_CODE_OK
Public Instance Methods
completed(request_context:, result:)
click to toggle source
@param [Gruf::Controller::RequestContext] request_context @param [Gruf::Interceptors::Timer::Result] result
# File lib/gruf/prometheus/client/collector.rb, line 41 def completed(request_context:, result:) push( grpc_client_completed: 1, custom_labels: custom_labels(request_context: request_context, result: result) ) end
completed_latency_seconds(request_context:, result:)
click to toggle source
@param [Gruf::Outbound::RequestContext] request_context @param [Gruf::Interceptors::Timer::Result] result
# File lib/gruf/prometheus/client/collector.rb, line 52 def completed_latency_seconds(request_context:, result:) push( grpc_client_completed_latency_seconds: result.elapsed.to_f, custom_labels: custom_labels(request_context: request_context, result: result) ) end
started_total(request_context:)
click to toggle source
@param [Gruf::Outbound::RequestContext] request_context
# File lib/gruf/prometheus/client/collector.rb, line 30 def started_total(request_context:) push( grpc_client_started_total: 1, custom_labels: custom_labels(request_context: request_context) ) end
Private Instance Methods
custom_labels(request_context:, result: nil)
click to toggle source
@param [Gruf::Outbound::RequestContext] request_context @param [Gruf::Interceptors::Timer::Result|NilClass] result @return [Hash]
# File lib/gruf/prometheus/client/collector.rb, line 66 def custom_labels(request_context:, result: nil) labels = { grpc_service: format_service_name(request_context.method.to_s), grpc_method: request_context.method_name, grpc_type: determine_type(request_context) } if result labels[:grpc_code] = result.successful? ? RESPONSE_CODE_OK : result.message_class_name.split('::').last end labels end
determine_type(request_context)
click to toggle source
@param [Gruf::Outbound::RequestContext] request_context @return [String]
# File lib/gruf/prometheus/client/collector.rb, line 92 def determine_type(request_context) case request_context.type.to_sym when :client_streamer Gruf::Prometheus::RequestTypes::CLIENT_STREAM when :server_streamer Gruf::Prometheus::RequestTypes::SERVER_STREAM when :bidi_streamer Gruf::Prometheus::RequestTypes::BIDI_STREAM else Gruf::Prometheus::RequestTypes::UNARY end end
format_service_name(name)
click to toggle source
Format the service name as `path.to.Service` (from `/path.to.Service/MethodName`)
@param [String] name @return [String]
# File lib/gruf/prometheus/client/collector.rb, line 84 def format_service_name(name) name.split('/').reject(&:empty?).first end