
# Delete outdated secrets from redis.
# Usage:
#
#     $ ruby support/delete_old_secrets [DELETE]
#
#

ENV['APP_ROOT'] = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..'))
$:.unshift(::File.join(ENV['APP_ROOT'], 'lib'))

require 'onetime'

outdated, notoutdated = [], []
secrets = OT::Secret.redis.keys('onetime:secret:*:object').collect { |key| OT::Secret.from_rediskey key }; nil
secrets.each do |secret|
  viewed_shared = secret.kind?(:shared) && (secret.state?(:viewed) || secret.state?(:shared))
  just_old = secret.older_than?(7.days)
  ((viewed_shared || just_old) ? outdated : notoutdated) << secret
end; nil

p [:total, secrets.size]
p [:notoutdated, notoutdated.size]
p [:outdated, outdated.size]
p [:memusage, OT::Secret.redis.info['used_memory_human']]

if ARGV.first == 'DELETE'
  count = outdated.select { |secret| secret.destroy! }
  puts '%d secrets deleted' % [count.size]
  puts 'Memory usage: %s' % [OT::Secret.redis.info['used_memory_human']]
else
  puts 'No changes made'
end
