class Gruf::Prometheus::Server::Collector
Prometheus
instrumentor for gRPC servers
Constants
- RESPONSE_CODE_OK
Public Instance Methods
handled_latency_seconds(request:, result:)
click to toggle source
@param [Gruf::Controller::Request] request @param [Gruf::Interceptors::Timer::Result] result
# File lib/gruf/prometheus/server/collector.rb, line 52 def handled_latency_seconds(request:, result:) push( grpc_server_handled_latency_seconds: result.elapsed.to_f, custom_labels: custom_labels(request: request, result: result) ) end
handled_total(request:, result:)
click to toggle source
@param [Gruf::Controller::Request] request @param [Gruf::Interceptors::Timer::Result] result:party
# File lib/gruf/prometheus/server/collector.rb, line 41 def handled_total(request:, result:) push( grpc_server_handled_total: 1, custom_labels: custom_labels(request: request, result: result) ) end
started_total(request:)
click to toggle source
@param [Gruf::Controller::Request] request
# File lib/gruf/prometheus/server/collector.rb, line 30 def started_total(request:) push( grpc_server_started_total: 1, custom_labels: custom_labels(request: request) ) end
Private Instance Methods
custom_labels(request:, result: nil)
click to toggle source
@param [Gruf::Controller::Request] request @param [Gruf::Interceptors::Timer::Result|NilClass] result @return [Hash]
# File lib/gruf/prometheus/server/collector.rb, line 66 def custom_labels(request:, result: nil) labels = { grpc_service: format_grpc_service_name(request.service.name.to_s), grpc_method: format_grpc_method_name(request.method_key.to_s), grpc_type: determine_type(request) } if result labels[:grpc_code] = result.successful? ? RESPONSE_CODE_OK : result.message_class_name.split('::').last end labels end
determine_type(request)
click to toggle source
@param [Gruf::Controller::Request] request @return [String]
# File lib/gruf/prometheus/server/collector.rb, line 108 def determine_type(request) if request.client_streamer? Gruf::Prometheus::RequestTypes::CLIENT_STREAM elsif request.server_streamer? Gruf::Prometheus::RequestTypes::SERVER_STREAM elsif request.bidi_streamer? Gruf::Prometheus::RequestTypes::BIDI_STREAM else Gruf::Prometheus::RequestTypes::UNARY end end
format_grpc_method_name(name)
click to toggle source
Format the method name as `MethodName` (from method_name)
@param [String] name @return [String]
# File lib/gruf/prometheus/server/collector.rb, line 100 def format_grpc_method_name(name) name.split('_').map(&:capitalize).join end
format_grpc_service_name(name)
click to toggle source
Format the service name as `path.to.Service` (from Path::To::Service)
@param [String] name @return [String]
# File lib/gruf/prometheus/server/collector.rb, line 84 def format_grpc_service_name(name) parts = name.split('::') return '' unless parts.any? svc = parts.pop.to_s parts.map!(&:downcase) parts << svc parts.join('.') end