Files
openfoodnetwork/lib/tasks/data/truncate_data.rake
2020-04-29 16:49:43 +02:00

47 lines
1.5 KiB
Ruby

# frozen_string_literal: true
require 'highline'
require 'tasks/data/truncate_data'
# This task can be used to significantly reduce the size of a database
# This is used for example when loading live data into a staging server
# This way the staging server is not overloaded with too much data
#
# This is also aimed at implementing data archiving. We assume data older than
# 2 years can be safely removed and restored from a backup. This gives room for
# hubs to do their tax declaration.
#
# It's a must to perform a backup right before executing this. Then, to allow
# for a later data recovery we need to keep track of the exact moment this rake
# task was executed.
#
# Execute this in production only when the instance users are sleeping to avoid any trouble.
#
# Example:
#
# $ bundle exec rake "ofn:data:truncate[24]"
#
# This will remove data older than 2 years (24 months).
namespace :ofn do
namespace :data do
desc 'Truncate data'
task :truncate, [:months_to_keep] => :environment do |_task, args|
warn_with_confirmation
months_to_keep = args.months_to_keep.to_i
TruncateData.new(months_to_keep).call
end
def warn_with_confirmation
message = <<-MSG.strip_heredoc
\n
<% highlighted_message = "This will permanently change DB contents. Please, make a backup first." %>
<%= color(highlighted_message, :blink, :on_red) %>
Are you sure you want to proceed? (y/N)
MSG
exit unless HighLine.new.agree(message) { |question| question.default = "N" }
end
end
end