class SqsListQueues::Runner

Public Class Methods

new(config) click to toggle source
# File lib/sqs-list-queues/runner.rb, line 9
def initialize(config)
  @config = config

  @config.sqs_client ||= begin
                           effective_options = SqsListQueues::Client.core_v2_options.merge(config.client_options)
                           Aws::SQS::Client.new(effective_options)
                         end
end

Public Instance Methods

get_pattern_prefixes() click to toggle source
# File lib/sqs-list-queues/runner.rb, line 44
def get_pattern_prefixes
  if @config.patterns.nil?
    []
  else
    @config.patterns.map do |pattern|
      pattern.match(/^([0-9A-Za-z_-]*)/)[1]
    end
  end
end
name_matches_patterns?(queue_name) click to toggle source
# File lib/sqs-list-queues/runner.rb, line 91
def name_matches_patterns?(queue_name)
  return true if @config.patterns.nil?

  @config.patterns.any? do |pattern|
    queue_name.match("^" + pattern)
  end
end
pattern_to_string_prefix(pattern) click to toggle source
# File lib/sqs-list-queues/runner.rb, line 54
def pattern_to_string_prefix(pattern)
  m = pattern.match /^/
end
promise() click to toggle source
# File lib/sqs-list-queues/runner.rb, line 18
def promise
  promise_queue_urls.then do |queue_urls|
    Rosarium::Promise.all(queue_urls.map {|queue_url| promise_queue queue_url}.reject &:nil?)
  end
end
promise_queue(queue_url) click to toggle source
# File lib/sqs-list-queues/runner.rb, line 58
def promise_queue(queue_url)
  queue_name = File.basename queue_url
  return nil unless name_matches_patterns?(queue_name)

  Rosarium::Promise.execute do
    r = {
      name: queue_name,
      url: queue_url,
    }

    required_attributes = []

    if @config.show_arn
      required_attributes << 'QueueArn'
    end

    if @config.show_counts
      required_attributes << 'ApproximateNumberOfMessages'
      required_attributes << 'ApproximateNumberOfMessagesNotVisible'
      required_attributes << 'ApproximateNumberOfMessagesDelayed'
    end

    unless required_attributes.empty?
      r[:attributes] = @config.sqs_client.get_queue_attributes(
        queue_url: queue_url,
        attribute_names: required_attributes,
      ).attributes
    end

    r
  end
end
promise_queue_urls() click to toggle source
# File lib/sqs-list-queues/runner.rb, line 24
def promise_queue_urls
  prefixes = get_pattern_prefixes

  if prefixes.empty? or prefixes.any? {|prefix| prefix == ""}
    Rosarium::Promise.execute do
      SqsListQueues::Lister.new(@config.sqs_client).get_full_list
    end
  else
    Rosarium::Promise.all(
      prefixes.map do |prefix|
        Rosarium::Promise.execute do
          SqsListQueues::Lister.new(@config.sqs_client).get_full_list(prefix)
        end
      end
    ).then do |v|
      v.flatten.uniq
    end
  end
end
run() click to toggle source
# File lib/sqs-list-queues/runner.rb, line 99
def run
  promise.then do |queues|
    queues.each do |queue|
      if @config.json_format
        puts JSON.generate(queue)
      else
        if @config.show_counts
          msg = queue[:attributes]["ApproximateNumberOfMessages"]
          invis = queue[:attributes]["ApproximateNumberOfMessagesNotVisible"]
          delayed = queue[:attributes]["ApproximateNumberOfMessagesDelayed"]
          print "#{msg}\t#{invis}\t#{delayed}\t"
        end

        if @config.show_arn
          puts queue[:attributes]["QueueArn"]
        elsif @config.show_url
          puts queue[:url]
        else
          puts queue[:name]
        end
      end
    end
  end.value!

  return 0
end