class AwsLogCleaner::LogGroupCleaner

Constants

API_GATEWAY_LOG_PREFIX

Public Class Methods

new( cloud_watch_logs, api_retriever, log_group_filterer, like, clean_orphans ) click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 7
def initialize(
  cloud_watch_logs,
  api_retriever,
  log_group_filterer,
  like,
  clean_orphans
)
  @cloud_watch_logs = cloud_watch_logs
  @api_retriever = api_retriever
  @log_group_filterer = log_group_filterer
  @like = like.downcase unless like.nil?
  @clean_orphans = clean_orphans
end

Public Instance Methods

delete() click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 25
def delete
  log_groups = log_groups_to_delete
  @cloud_watch_logs.delete_log_groups(log_groups)
  result(log_groups)
end
plan() click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 21
def plan
  result(log_groups_to_delete)
end

Private Instance Methods

extract_api_id(log_group_name) click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 67
def extract_api_id(log_group_name)
  match = log_group_name.match(%r{#{API_GATEWAY_LOG_PREFIX}(\w+)/\w+})
  match.captures[0] unless match.nil?
end
log_group_names_containing(text) click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 40
def log_group_names_containing(text)
  log_groups = @log_group_filterer.filter_by_name_includes(text)

  apis = @api_retriever.retrieve(text)
  apis.each do |api|
    log_groups.concat(
      @log_group_filterer.filter_by_name_includes(
        "#{API_GATEWAY_LOG_PREFIX}#{api.id}"
      )
    )
  end

  log_groups.map(&:log_group_name)
end
log_group_names_orphan() click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 55
def log_group_names_orphan
  groups = @cloud_watch_logs.list_all_log_groups
  groups = groups.select { |log_group| orphan?(log_group) }
  groups.map(&:log_group_name)
end
log_groups_to_delete() click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 33
def log_groups_to_delete
  log_groups = []
  log_groups.concat(log_group_names_containing(@like)) if @like
  log_groups.concat(log_group_names_orphan) if @clean_orphans
  log_groups.uniq
end
orphan?(log_group) click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 61
def orphan?(log_group)
  apis = @api_retriever.retrieve_all
  api_id = extract_api_id(log_group.log_group_name)
  api_id.nil? ? false : apis.none? { |api| api.id == api_id }
end
result(log_groups) click to toggle source
# File lib/aws_log_cleaner/log_group_cleaner.rb, line 72
def result(log_groups)
  to_delete = []
  log_groups.each do |name|
    to_delete.push("(-) #{name}")
  end
  to_delete
end