class OpenTracing::Instrumentation::Thrift::TracedProcessor

Trace thrift processor

Usage:

processor =
  OrderService::Processor.new(orders_handler)
traced_processor =
  OpenTracing::Instrumentation::Thrift::TracedProcessor.new(processor)

Attributes

config[R]
processor[R]

Public Class Methods

new(processor, config: TracedProcessorConfig.new) { |config| ... } click to toggle source

@parama processor [Thrift::Processor] traced processor @param config [TracedProcessorConfig] @yieldparam [TracedProcessorConfig]

# File lib/opentracing/instrumentation/thrift/traced_processor.rb, line 36
def initialize(processor, config: TracedProcessorConfig.new)
  @processor = processor
  yield config if block_given?
  @config = config.dup
end

Public Instance Methods

process(iproto, oproto) click to toggle source

@param iproto [Thrift::Protocol] input protocol @param oproto [Thrift::Protocol] output protocol

# File lib/opentracing/instrumentation/thrift/traced_processor.rb, line 44
def process(iproto, oproto)
  trace_process(iproto) do |cached_iproto|
    processor.process(
      wrap_protocol(cached_iproto),
      wrap_protocol(oproto),
    )
  end
end

Private Instance Methods

safe_close_scope(scope) click to toggle source
# File lib/opentracing/instrumentation/thrift/traced_processor.rb, line 95
def safe_close_scope(scope)
  scope&.close
rescue StandardError => e
  logger&.error(e)
end
safe_start_scope(protocol, name, type, seq_id, start_time) click to toggle source
# File lib/opentracing/instrumentation/thrift/traced_processor.rb, line 83
def safe_start_scope(protocol, name, type, seq_id, start_time)
  operation_name = operation_name_builder.build(name, type, seq_id)
  tags = tags_builder.build_tags(protocol, name, type)
  tracer.start_active_span(
    operation_name,
    start_time: start_time,
    tags: tags,
  )
rescue StandardError => e
  logger&.error(e)
end
trace_process(iproto) { |cached_iproto| ... } click to toggle source
# File lib/opentracing/instrumentation/thrift/traced_processor.rb, line 66
def trace_process(iproto)
  cached_iproto = ReadCachedProtocol.new(iproto)

  start_time = Time.now

  name, type, seq_id = cached_iproto.read_message_begin

  scope = safe_start_scope(iproto, name, type, seq_id, start_time)

  yield cached_iproto
rescue StandardError => e
  error_writer.write_error(scope.span, e) if scope&.span
  raise e
ensure
  safe_close_scope(scope)
end
wrap_protocol(protocol) click to toggle source
# File lib/opentracing/instrumentation/thrift/traced_processor.rb, line 101
def wrap_protocol(protocol)
  return protocol unless trace_protocol

  TracedProtocol.new(protocol) do |config|
    config.tracer = tracer
  end
end