class Ruboty::Handlers::Fastly

Constants

VERSION

Public Instance Methods

list_services(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 21
def list_services(message)
  reversed_aliases = aliases.to_a.group_by(&:last).map { |sid, _|  [sid, _.map(&:first)] }.to_h

  list =  fastly.list_services.map do |service|
    "- `#{service.id}` #{service.name}#{reversed_aliases[service.id] ? " (alias: #{reversed_aliases[service.id].join(', ')})" : nil}"
  end
  message.reply list.join("\n")
rescue => e
  message.reply e.inspect
end
purge_all(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 70
def purge_all(message)
  service = service_for(message[:service_id])

  Thread.new(purge_cancellations) do |count|
    begin
      sleep 15
      next if count != purge_cancellations
      service.purge_all()
      message.reply "Purged all from Fastly `#{service.id}`"
    rescue => e
      message.reply e.inspect
    end
  end
  message.reply "Purging Fastly `#{service.id}` after next 15 seconds, cancel by saying: `fastly cancel`"
rescue => e
  message.reply e.inspect
end
purge_cancel(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 88
def purge_cancel(message)
  cancel_all_pending_purges
  message.reply "Cancelled the pending purge requests."
end
purge_key(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 57
def purge_key(message)
  soft = !!message[:soft]
  service = service_for(message[:service_id])
  keys = message[:keys].split(/\s+/)

  keys.each do |key|
    service.purge_by_key(key, soft)
    message.reply "#{soft ? 'Soft ' : nil}Purged Fastly `#{service.id}` by key: `#{key}`"
  end
rescue => e
  message.reply e.inspect
end
purge_url(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 49
def purge_url(message)
  soft = !!message[:soft]
  fastly.purge(message[:url], soft)
  message.reply "#{soft ? 'Soft ' : nil}Purged `#{message[:url]}`"
rescue => e
  message.reply e.inspect
end
remove_alias(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 39
def remove_alias(message)
  if aliases.delete(message[:name])
    message.reply "Removed alias #{message[:name]}"
  else
    message.reply "Alias #{message[:name]} doesn't exist"
  end
rescue => e
  message.reply e.inspect
end
set_alias(message) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 32
def set_alias(message)
  aliases[message[:name]] = message[:service_id]
  message.reply "Added an alias: #{message[:name]} > `#{message[:service_id]}`"
rescue => e
  message.reply e.inspect
end

Private Instance Methods

aliases() click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 103
def aliases
  robot.brain.data['fastly.aliases'] ||= {}
end
cancel_all_pending_purges() click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 111
def cancel_all_pending_purges
  @purge_cancellations = purge_cancellations + 1
end
fastly() click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 95
def fastly
  ::Fastly.new(api_key: ENV.fetch('FASTLY_API_KEY'))
end
purge_cancellations() click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 107
def purge_cancellations
  @purge_cancellations ||= 0
end
service_for(name) click to toggle source
# File lib/ruboty/handlers/fastly.rb, line 99
def service_for(name)
  ::Fastly::Service.new({ id: aliases[name] || name }, fastly)
end