class Cumulus::SQS::Manager

Public Class Methods

new() click to toggle source
Calls superclass method Cumulus::Common::Manager::new
# File lib/sqs/manager/Manager.rb, line 15
def initialize
  super()
  @create_asset = true
  @client = Aws::SQS::Client.new(Configuration.instance.client)
end

Public Instance Methods

added_diff(local) click to toggle source
# File lib/sqs/manager/Manager.rb, line 37
def added_diff(local)
  QueueDiff.added(local)
end
aws_resources() click to toggle source
# File lib/sqs/manager/Manager.rb, line 29
def aws_resources
  @aws_resources ||= Hash[SQS::queue_attributes.map { |name, attrs| [name, QueueConfig.new(name).populate!(attrs) ] }]
end
create(local) click to toggle source
# File lib/sqs/manager/Manager.rb, line 71
def create(local)
  url = @client.create_queue({
    queue_name: local.name,
    attributes: {
      "DelaySeconds" => "#{local.delay}",
      "MaximumMessageSize" => "#{local.max_message_size}",
      "MessageRetentionPeriod" => "#{local.message_retention}",
      "Policy" => if local.policy then JSON.generate(Loader.policy(local.policy)) end,
      "ReceiveMessageWaitTimeSeconds" => "#{local.receive_wait_time}",
      "VisibilityTimeout" => "#{local.visibility_timeout}",
      "RedrivePolicy" => if local.dead_letter then JSON.generate(local.dead_letter.to_aws) end
    }.reject { |k, v| v.nil? }
  }).queue_url
  puts Colors.blue("Queue #{local.name} was created with url #{url}")
end
diff_resource(local, aws) click to toggle source
# File lib/sqs/manager/Manager.rb, line 41
def diff_resource(local, aws)
  local.diff(aws)
end
local_resources() click to toggle source
# File lib/sqs/manager/Manager.rb, line 25
def local_resources
  @local_resources ||= Hash[Loader.queues.map { |local| [local.name, local] }]
end
migrate() click to toggle source

Public: Migrates the existing AWS config to Cumulus

# File lib/sqs/manager/Manager.rb, line 88
def migrate
  # Create the directories
  sqs_dir = "#{@migration_root}/sqs"
  policies_dir = "#{sqs_dir}/policies"
  queues_dir = "#{sqs_dir}/queues"

  if !Dir.exists?(@migration_root)
    Dir.mkdir(@migration_root)
  end
  if !Dir.exists?(sqs_dir)
    Dir.mkdir(sqs_dir)
  end
  if !Dir.exists?(policies_dir)
    Dir.mkdir(policies_dir)
  end
  if !Dir.exists?(queues_dir)
    Dir.mkdir(queues_dir)
  end

  puts Colors.blue("Migrating queues to #{queues_dir}")
  aws_resources.each do |name, config|
    puts Colors.blue("Migrating queue #{name}")

    # If there is a policy, then save it to the policies dir with the name of the queue
    queue_policy = SQS::queue_policy(name)
    if queue_policy
      policy_json = JSON.pretty_generate(queue_policy)
      policy_file = "#{policies_dir}/#{name}.json"
      puts "Migrating policy to #{policy_file}"
      File.open("#{policy_file}", "w") { |f| f.write(policy_json) }
    end

    json = JSON.pretty_generate(config.to_hash)
    File.open("#{queues_dir}/#{name}.json", "w") { |f| f.write(json) }
  end

end
resource_name() click to toggle source
# File lib/sqs/manager/Manager.rb, line 21
def resource_name
  "Queue"
end
unmanaged_diff(aws) click to toggle source
# File lib/sqs/manager/Manager.rb, line 33
def unmanaged_diff(aws)
  QueueDiff.unmanaged(aws)
end
update(local, diffs) click to toggle source
# File lib/sqs/manager/Manager.rb, line 52
def update(local, diffs)
  @client.set_queue_attributes({
    queue_url: SQS::queue_urls[local.name],
    attributes: {
      "DelaySeconds" => if diffs.any? { |d| d.type == QueueChange::DELAY } then local.delay end,
      "MaximumMessageSize" => if diffs.any? { |d| d.type == QueueChange::MESSAGE_SIZE } then local.max_message_size end,
      "MessageRetentionPeriod" => if diffs.any? { |d| d.type == QueueChange::MESSAGE_RETENTION } then local.message_retention end,
      "Policy" => if diffs.any? { |d| d.type == QueueChange::POLICY }
        if local.policy then JSON.generate(Loader.policy(local.policy)) else "" end
      end,
      "ReceiveMessageWaitTimeSeconds" => if diffs.any? { |d| d.type == QueueChange::RECEIVE_WAIT } then local.receive_wait_time end,
      "VisibilityTimeout" => if diffs.any? { |d| d.type == QueueChange::VISIBILITY } then local.visibility_timeout end,
      "RedrivePolicy" => if diffs.any? { |d| d.type == QueueChange::DEAD }
        if local.dead_letter then JSON.generate(local.dead_letter.to_aws) else "" end
      end
    }.reject { |k, v| v.nil? }
  })
end
urls() click to toggle source
# File lib/sqs/manager/Manager.rb, line 45
def urls
  local_resources.keys.sort.each do |name|
    url = SQS::queue_urls[name] || "does not exist"
    puts "#{name} => #{url}"
  end
end