Class: Ruboty::Handlers::Cloudfront

Inherits:
Base
  • Object
show all
Defined in:
lib/ruboty/handlers/cloudfront.rb

Instance Method Summary collapse

Instance Method Details

#list_distributuions(message) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 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) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 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