class Sqreen::Ecosystem::Messaging::Sqs

Public Instance Methods

setup() click to toggle source
# File lib/sqreen/ecosystem/messaging/sqs.rb, line 20
def setup
  advice_send = wrap_for_interest(ModuleApi::Tracing::ProducerData, &method(:after_send_advice))
  advice_receive = wrap_for_interest(ModuleApi::Tracing::ConsumerData, &method(:after_receive_advice))
  instrument 'Aws::SQS::Client#send_message',       after: advice_send
  instrument 'Aws::SQS::Client#send_message_batch', after: advice_send
  instrument 'Aws::SQS::Client#receive_message',    after: advice_receive
end

Private Instance Methods

after_receive_advice(call, _ball) click to toggle source

@param [Sqreen::Graft::CallbackCall] call

# File lib/sqreen/ecosystem/messaging/sqs.rb, line 42
def after_receive_advice(call, _ball)
  return if call.raised
  unless call.args.length > 0 && call.args[0].is_a?(Hash)
    logger.info "Unexpected arguments to receive_message"
    return
  end

  create_signal(call.args, ModuleApi::Tracing::ConsumerData)
end
after_send_advice(call, _ball) click to toggle source

@param [Sqreen::Graft::CallbackCall] call

# File lib/sqreen/ecosystem/messaging/sqs.rb, line 31
def after_send_advice(call, _ball)
  return if call.raised
  unless call.args.length > 0 && call.args[0].is_a?(Hash)
    logger.info "Unexpected arguments to send_message(_batch)"
    return
  end

  create_signal(call.args, ModuleApi::Tracing::ProducerData)
end
create_signal(args, clazz) click to toggle source
# File lib/sqreen/ecosystem/messaging/sqs.rb, line 52
def create_signal(args, clazz)
  hash = args[0]
  queue_url = hash[:queue_url] || hash['queue_url']
  return unless queue_url

  begin
    uri = URI.parse(queue_url)
  rescue URI::InvalidURIError
    logger.info { "Invalid URI: #{uri}" }
    return
  end

  clazz.new(
    message_type: :'aws-sqs',
    host: uri.host,
    topic: ($1 if uri.path =~ /\A\/queue\/(?:[^\/]+\/)?([^\/]+)\z/),
  )
end