class Ruboty::Handlers::Cloudfront
Public Instance Methods
list_distributuions(message)
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 26 def list_distributuions(message) maximum_domain_length = prefixes.map(&:first).sort_by(&:size).last.size maximum_id_length = prefixes.map { |p| p[1] }.sort_by(&:size).last.size lines = prefixes.map do |prefix| [ prefix[0].ljust(maximum_domain_length), prefix[1].ljust(maximum_id_length), prefix[2] ].join(' ') end message.reply( "We have #{prefixes.count} distributions\n" + lines.join("\n"), code: true ) end
list_invalidations(message)
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 44 def list_invalidations(message) invalidations = [] prefixes.map { |p| p[1] }.uniq.each do |prefix| resp = cloudfront.list_invalidations(distribution_id: prefix) resp.invalidation_list.items.each do |invalidation| next unless invalidation.status != 'Completed' iresp = cloudfront.get_invalidation(distribution_id: prefix, id: invalidation.id) iresp.invalidation.invalidation_batch.paths.items.each do |path| invalidations << "#{path} : #{invalidation.status} / #{domains_by(prefix).join(', ')}" end end end message.reply( "We have #{invalidations.count} invalidations\n" + invalidations.join("\n"), code: true ) end
purge_url(message)
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 63 def purge_url(message) uri = URI.parse(message[:url]) dist = prefixes.bsearch { |p| p[0] == uri.host } unless dist message.reply('Distribution not found') return end cloudfront.create_invalidation(distribution_id: dist[1], invalidation_batch: { paths: { quantity: 1, items: [uri.path] }, caller_reference: SecureRandom.uuid }) message.reply("Started #{uri.path} invalidation of #{dist[1]} / #{dist[0]}") end
Private Instance Methods
cloudfront()
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 87 def cloudfront @cloudfront ||= Aws::CloudFront::Client.new(region: 'us-east-1') end
distributions()
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 91 def distributions cloudfront.list_distributions.distribution_list rescue Aws::Errors::ServiceError nil end
domains_by(id)
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 110 def domains_by(id) prefixes.select { |p| p[1] == id }.map(&:first) end
prefixes()
click to toggle source
# File lib/ruboty/handlers/cloudfront.rb, line 97 def prefixes return @prefixes if @prefixes @prefixes = [] distributions.items.each do |dist| @prefixes << [dist.domain_name, dist.id, dist.status] dist.aliases.items.each do |domain| @prefixes << [domain, dist.id, dist.status] end end @prefixes end