module NewRelic::Agent::Instrumentation::Bunny::Queue

Public Instance Methods

pop_with_tracing() { || ... } click to toggle source
# File lib/new_relic/agent/instrumentation/bunny/instrumentation.rb, line 67
def pop_with_tracing
  NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME)

  bunny_error, delivery_info, message_properties, _payload = nil, nil, nil, nil
  begin
    t0 = Process.clock_gettime(Process::CLOCK_REALTIME)
    msg = yield
    delivery_info, message_properties, _payload = msg
  rescue StandardError => error
    bunny_error = error
  end

  begin
    exch_name, exch_type = if delivery_info
      [exchange_name(delivery_info.exchange),
        exchange_type(delivery_info, channel)]
    else
      [exchange_name(NewRelic::EMPTY_STR),
        exchange_type({}, channel)]
    end

    segment = NewRelic::Agent::Messaging.start_amqp_consume_segment(
      library: LIBRARY,
      destination_name: exch_name,
      delivery_info: (delivery_info || {}),
      message_properties: (message_properties || {headers: {}}),
      exchange_type: exch_type,
      queue_name: name,
      start_time: t0
    )
  rescue => e
    NewRelic::Agent.logger.error('Error starting message broker segment in Bunny::Queue#pop', e)
  else
    if bunny_error
      segment.notice_error(bunny_error)
      raise bunny_error
    end
  ensure
    ::NewRelic::Agent::Transaction::Segment.finish(segment)
  end

  msg
end
purge_with_tracing() { || ... } click to toggle source
# File lib/new_relic/agent/instrumentation/bunny/instrumentation.rb, line 111
def purge_with_tracing
  NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME)

  begin
    type = server_named? ? :temporary_queue : :queue
    segment = NewRelic::Agent::Tracer.start_message_broker_segment(
      action: :purge,
      library: LIBRARY,
      destination_type: type,
      destination_name: name
    )
  rescue => e
    NewRelic::Agent.logger.error('Error starting message broker segment in Bunny::Queue#purge', e)
    yield
  else
    NewRelic::Agent::Tracer.capture_segment_error(segment) do
      yield
    end
  ensure
    ::NewRelic::Agent::Transaction::Segment.finish(segment)
  end
end