class CloudwatchCleanup

Public Class Methods

run() click to toggle source
# File lib/modules/cloudwatch.rb, line 2
def self.run
  CloudwatchCleanup.new.cleaup_alarms
end

Public Instance Methods

cleaup_alarms() click to toggle source
# File lib/modules/cloudwatch.rb, line 6
def cleaup_alarms
  oa = orphaned_alarms.map(&:alarm_name)

  if oa.any?
    puts 'Deleting alarms: ' + oa.join(', ')
    cloudwatch.delete_alarms alarm_names: oa
    return
  end

  puts 'No alarms to clean up'
end

Private Instance Methods

cloudwatch() click to toggle source
# File lib/modules/cloudwatch.rb, line 53
def cloudwatch
  @cloudwatch ||= Aws::CloudWatch::Client.new
end
db_names() click to toggle source
# File lib/modules/cloudwatch.rb, line 41
def db_names
  @db_names ||= rds.describe_db_instances.db_instances.map(&:db_instance_identifier)
end
dimension_in_use?(dimension) click to toggle source
# File lib/modules/cloudwatch.rb, line 27
def dimension_in_use?(dimension)
  case dimension.name
  when 'InstanceId'
    instance_ids.include? dimension.value
  when 'QueueName'
    queue_names.include? dimension.value
  when 'DBInstanceIdentifier'
    db_names.include? dimension.value
  else
    puts "Unsupported dimension: #{dimension.name}"
    true
  end
end
insufficient_data_alarms() click to toggle source
# File lib/modules/cloudwatch.rb, line 49
def insufficient_data_alarms
  cloudwatch.describe_alarms(state_value: 'INSUFFICIENT_DATA').metric_alarms
end
orphaned_alarms() click to toggle source
# File lib/modules/cloudwatch.rb, line 20
def orphaned_alarms
  insufficient_data_alarms.select do |alarm|
    alarm.dimensions.any? &&
      !alarm.dimensions.find { |dimension| dimension_in_use? dimension }
  end
end
queue_names() click to toggle source
# File lib/modules/cloudwatch.rb, line 45
def queue_names
  @queue_names ||= sqs.list_queues.queue_urls.map { |q| URI(q).path.split('/')[2..-1].join('/') }
end
rds() click to toggle source
# File lib/modules/cloudwatch.rb, line 61
def rds
  @rds ||= Aws::RDS::Client.new
end
sqs() click to toggle source
# File lib/modules/cloudwatch.rb, line 57
def sqs
  @sqs ||= Aws::SQS::Client.new
end