2019-05-02 18:17:27 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2014-02-21 19:41:01 -05:00
|
|
|
module Jobs
|
|
|
|
|
2019-10-02 00:01:53 -04:00
|
|
|
class BackupChunksMerger < ::Jobs::Base
|
2018-01-31 06:05:06 -05:00
|
|
|
sidekiq_options queue: 'critical', retry: false
|
2014-02-21 19:41:01 -05:00
|
|
|
|
|
|
|
def execute(args)
|
|
|
|
filename = args[:filename]
|
|
|
|
identifier = args[:identifier]
|
|
|
|
chunks = args[:chunks].to_i
|
|
|
|
|
2014-03-18 20:05:47 -04:00
|
|
|
raise Discourse::InvalidParameters.new(:filename) if filename.blank?
|
2014-02-21 19:41:01 -05:00
|
|
|
raise Discourse::InvalidParameters.new(:identifier) if identifier.blank?
|
2014-03-18 20:05:47 -04:00
|
|
|
raise Discourse::InvalidParameters.new(:chunks) if chunks <= 0
|
2014-02-21 19:41:01 -05:00
|
|
|
|
2018-10-14 21:43:31 -04:00
|
|
|
backup_path = "#{BackupRestore::LocalBackupStore.base_directory}/#{filename}"
|
2014-03-18 20:05:47 -04:00
|
|
|
tmp_backup_path = "#{backup_path}.tmp"
|
2014-05-27 16:14:37 -04:00
|
|
|
# path to tmp directory
|
2018-10-14 21:43:31 -04:00
|
|
|
tmp_directory = File.dirname(BackupRestore::LocalBackupStore.chunk_path(identifier, filename, 0))
|
2014-05-27 16:14:37 -04:00
|
|
|
|
|
|
|
# merge all chunks
|
2018-10-14 21:43:31 -04:00
|
|
|
HandleChunkUpload.merge_chunks(
|
|
|
|
chunks,
|
|
|
|
upload_path: backup_path,
|
|
|
|
tmp_upload_path: tmp_backup_path,
|
|
|
|
identifier: identifier,
|
|
|
|
filename: filename,
|
|
|
|
tmp_directory: tmp_directory
|
|
|
|
)
|
2018-01-31 06:05:06 -05:00
|
|
|
|
|
|
|
# push an updated list to the clients
|
2018-10-14 21:43:31 -04:00
|
|
|
store = BackupRestore::BackupStore.create
|
|
|
|
data = ActiveModel::ArraySerializer.new(store.files, each_serializer: BackupFileSerializer).as_json
|
2018-01-31 06:05:06 -05:00
|
|
|
MessageBus.publish("/admin/backups", data, user_ids: User.staff.pluck(:id))
|
2014-02-21 19:41:01 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|