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