44 lines
1.3 KiB
Ruby
44 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
module Workers
|
|
class ExportUser < Base
|
|
sidekiq_options queue: :low
|
|
|
|
include Diaspora::Logging
|
|
|
|
def perform(user_id)
|
|
if currently_running_exports >= AppConfig.settings.export_concurrency.to_i
|
|
logger.info "Already the maximum number of parallel user exports running, " \
|
|
"scheduling export for User:#{user_id} in 5 minutes."
|
|
self.class.perform_in(5.minutes + rand(30), user_id)
|
|
else
|
|
export_user(user_id)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def export_user(user_id)
|
|
@user = User.find(user_id)
|
|
@user.perform_export!
|
|
|
|
if @user.reload.export.present?
|
|
ExportMailer.export_complete_for(@user).deliver_now
|
|
else
|
|
ExportMailer.export_failure_for(@user).deliver_now
|
|
end
|
|
end
|
|
|
|
def currently_running_exports
|
|
return 0 if AppConfig.environment.single_process_mode?
|
|
Sidekiq::Workers.new.count do |process_id, thread_id, work|
|
|
!(Process.pid.to_s == process_id.split(":")[1] && Thread.current.object_id.to_s(36) == thread_id) &&
|
|
work["payload"]["class"] == self.class.to_s
|
|
end
|
|
end
|
|
end
|
|
end
|