discourse/app/jobs/regular/backup_chunks_merger.rb

39 lines
1.0 KiB
Ruby
Raw Normal View History

2014-02-21 19:41:01 -05:00
module Jobs
class BackupChunksMerger < Jobs::Base
sidekiq_options retry: false
def execute(args)
filename = args[:filename]
identifier = args[:identifier]
chunks = args[:chunks].to_i
raise Discourse::InvalidParameters.new(:filename) if filename.blank?
raise Discourse::InvalidParameters.new(:identifier) if identifier.blank?
raise Discourse::InvalidParameters.new(:chunks) if chunks <= 0
backup = "#{Backup.base_directory}/#{filename}"
# delete destination
File.delete(backup) rescue nil
# merge all the chunks
File.open(backup, "a") do |backup|
(1..chunks).each do |chunk_number|
# path to chunk
path = Backup.chunk_path(identifier, filename, chunk_number)
# add chunk to backup
backup << File.open(path).read
# delete chunk
File.delete(path) rescue nil
end
end
# remove tmp directory
FileUtils.rm_rf(directory) rescue nil
end
end
end