mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 17:37:17 +02:00
110395650-separated_class_for_cron_jobs
This commit is contained in:
parent
4095450fb8
commit
bd65eb6494
4 changed files with 143 additions and 123 deletions
|
@ -203,6 +203,31 @@ class Domain < ActiveRecord::Base
|
|||
statuses.include? DomainStatus::SERVER_TECH_CHANGE_PROHIBITED
|
||||
end
|
||||
|
||||
def self.clean_expired_pendings
|
||||
DomainCron.send(__method__)
|
||||
ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
|
||||
end
|
||||
|
||||
def self.start_expire_period
|
||||
DomainCron.send(__method__)
|
||||
ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
|
||||
end
|
||||
|
||||
def self.start_redemption_grace_period
|
||||
DomainCron.send(__method__)
|
||||
ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
|
||||
end
|
||||
|
||||
def self.start_delete_period
|
||||
DomainCron.send(__method__)
|
||||
ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
|
||||
end
|
||||
|
||||
def self.destroy_delete_candidates
|
||||
DomainCron.send(__method__)
|
||||
ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
|
||||
end
|
||||
|
||||
class << self
|
||||
def convert_period_to_time(period, unit)
|
||||
return (period.to_i / 365).years if unit == 'd'
|
||||
|
@ -221,109 +246,6 @@ class Domain < ActiveRecord::Base
|
|||
)
|
||||
end
|
||||
|
||||
# rubocop: disable Metrics/AbcSize
|
||||
# rubocop: disable Metrics/CyclomaticComplexity
|
||||
# rubocop: disable Metrics/PerceivedComplexity
|
||||
def clean_expired_pendings
|
||||
STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
|
||||
|
||||
expire_at = Setting.expire_pending_confirmation.hours.ago
|
||||
count = 0
|
||||
expired_pending_domains = Domain.where('registrant_verification_asked_at <= ?', expire_at)
|
||||
expired_pending_domains.each do |domain|
|
||||
unless domain.pending_update? || domain.pending_delete? || domain.pending_delete_confirmation?
|
||||
msg = "#{Time.zone.now.utc} - ISSUE: DOMAIN #{domain.id}: #{domain.name} IS IN EXPIRED PENDING LIST, " \
|
||||
"but no pendingDelete/pendingUpdate state present!\n"
|
||||
STDOUT << msg unless Rails.env.test?
|
||||
next
|
||||
end
|
||||
count += 1
|
||||
if domain.pending_update?
|
||||
domain.send_mail :pending_update_expired_notification_for_new_registrant
|
||||
end
|
||||
if domain.pending_delete? || domain.pending_delete_confirmation?
|
||||
DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
|
||||
end
|
||||
domain.clean_pendings!
|
||||
unless Rails.env.test?
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
|
||||
end
|
||||
end
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully cancelled #{count} domain pendings\n" unless Rails.env.test?
|
||||
count
|
||||
end
|
||||
# rubocop: enable Metrics/PerceivedComplexity
|
||||
# rubocop: enable Metrics/AbcSize
|
||||
# rubocop: enable Metrics/CyclomaticComplexity
|
||||
|
||||
# rubocop: disable Metrics/LineLength
|
||||
def start_expire_period
|
||||
STDOUT << "#{Time.zone.now.utc} - Expiring domains\n" unless Rails.env.test?
|
||||
|
||||
domains = Domain.where('valid_to <= ?', Time.zone.now)
|
||||
domains.each do |domain|
|
||||
next unless domain.expirable?
|
||||
domain.set_graceful_expired
|
||||
DomainMailer.expiration_reminder(domain.id).deliver
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully expired #{domains.count} domains\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
def start_redemption_grace_period
|
||||
STDOUT << "#{Time.zone.now.utc} - Setting server_hold to domains\n" unless Rails.env.test?
|
||||
|
||||
d = Domain.where('outzone_at <= ?', Time.zone.now)
|
||||
d.each do |domain|
|
||||
next unless domain.server_holdable?
|
||||
domain.statuses << DomainStatus::SERVER_HOLD
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.start_redemption_grace_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
def start_delete_period
|
||||
STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
|
||||
|
||||
d = Domain.where('delete_at <= ?', Time.zone.now)
|
||||
d.each do |domain|
|
||||
next unless domain.delete_candidateable?
|
||||
domain.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.start_delete_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save
|
||||
end
|
||||
|
||||
return if Rails.env.test?
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully set delete_candidate to #{d.count} domains\n"
|
||||
end
|
||||
|
||||
# rubocop:disable Rails/FindEach
|
||||
# rubocop:disable Metrics/AbcSize
|
||||
def destroy_delete_candidates
|
||||
STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test?
|
||||
|
||||
c = 0
|
||||
Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
|
||||
WhoisRecord.where(domain_id: x.id).destroy_all
|
||||
destroy_with_message x
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
|
||||
c += 1
|
||||
end
|
||||
|
||||
Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
|
||||
WhoisRecord.where(domain_id: x.id).destroy_all
|
||||
destroy_with_message x
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
c += 1
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test?
|
||||
end
|
||||
# rubocop: enable Metrics/AbcSize
|
||||
# rubocop:enable Rails/FindEach
|
||||
# rubocop: enable Metrics/LineLength
|
||||
|
|
98
app/models/domain_cron.rb
Normal file
98
app/models/domain_cron.rb
Normal file
|
@ -0,0 +1,98 @@
|
|||
class DomainCron
|
||||
|
||||
def self.clean_expired_pendings
|
||||
STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
|
||||
|
||||
expire_at = Setting.expire_pending_confirmation.hours.ago
|
||||
count = 0
|
||||
expired_pending_domains = Domain.where('registrant_verification_asked_at <= ?', expire_at)
|
||||
expired_pending_domains.each do |domain|
|
||||
unless domain.pending_update? || domain.pending_delete? || domain.pending_delete_confirmation?
|
||||
msg = "#{Time.zone.now.utc} - ISSUE: DOMAIN #{domain.id}: #{domain.name} IS IN EXPIRED PENDING LIST, " \
|
||||
"but no pendingDelete/pendingUpdate state present!\n"
|
||||
STDOUT << msg unless Rails.env.test?
|
||||
next
|
||||
end
|
||||
count += 1
|
||||
if domain.pending_update?
|
||||
domain.send_mail :pending_update_expired_notification_for_new_registrant
|
||||
end
|
||||
if domain.pending_delete? || domain.pending_delete_confirmation?
|
||||
DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
|
||||
end
|
||||
domain.clean_pendings!
|
||||
unless Rails.env.test?
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
|
||||
end
|
||||
end
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully cancelled #{count} domain pendings\n" unless Rails.env.test?
|
||||
count
|
||||
end
|
||||
|
||||
def self.start_expire_period
|
||||
STDOUT << "#{Time.zone.now.utc} - Expiring domains\n" unless Rails.env.test?
|
||||
|
||||
domains = Domain.where('valid_to <= ?', Time.zone.now)
|
||||
domains.each do |domain|
|
||||
next unless domain.expirable?
|
||||
domain.set_graceful_expired
|
||||
DomainMailer.expiration_reminder(domain.id).deliver
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully expired #{domains.count} domains\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
def self.start_redemption_grace_period
|
||||
STDOUT << "#{Time.zone.now.utc} - Setting server_hold to domains\n" unless Rails.env.test?
|
||||
|
||||
d = Domain.where('outzone_at <= ?', Time.zone.now)
|
||||
d.each do |domain|
|
||||
next unless domain.server_holdable?
|
||||
domain.statuses << DomainStatus::SERVER_HOLD
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.start_redemption_grace_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
def self.start_delete_period
|
||||
STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
|
||||
|
||||
d = Domain.where('delete_at <= ?', Time.zone.now)
|
||||
d.each do |domain|
|
||||
next unless domain.delete_candidateable?
|
||||
domain.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.start_delete_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save
|
||||
end
|
||||
|
||||
return if Rails.env.test?
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully set delete_candidate to #{d.count} domains\n"
|
||||
end
|
||||
|
||||
def self.destroy_delete_candidates
|
||||
STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test?
|
||||
|
||||
c = 0
|
||||
Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
|
||||
WhoisRecord.where(domain_id: x.id).destroy_all
|
||||
destroy_with_message x
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
|
||||
c += 1
|
||||
end
|
||||
|
||||
Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
|
||||
WhoisRecord.where(domain_id: x.id).destroy_all
|
||||
destroy_with_message x
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
c += 1
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
end
|
|
@ -31,7 +31,7 @@ if @cron_group == 'registry'
|
|||
# end
|
||||
|
||||
every :day, at: '12:20am' do
|
||||
runner 'Domain.clean_expired_pendings'
|
||||
runner 'DomainCron.clean_expired_pendings'
|
||||
end
|
||||
|
||||
every 3.hours do
|
||||
|
@ -39,19 +39,19 @@ if @cron_group == 'registry'
|
|||
end
|
||||
|
||||
every 42.minutes do
|
||||
runner 'Domain.destroy_delete_candidates'
|
||||
runner 'DomainCron.destroy_delete_candidates'
|
||||
end
|
||||
|
||||
every 45.minutes do
|
||||
runner 'Domain.start_expire_period'
|
||||
runner 'DomainCron.start_expire_period'
|
||||
end
|
||||
|
||||
every 50.minutes do
|
||||
runner 'Domain.start_delete_period'
|
||||
runner 'DomainCron.start_delete_period'
|
||||
end
|
||||
|
||||
every 52.minutes do
|
||||
runner 'Domain.start_redemption_grace_period'
|
||||
runner 'DomainCron.start_redemption_grace_period'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -140,20 +140,20 @@ describe Domain do
|
|||
domain.registrant_verification_asked_at = 30.days.ago
|
||||
domain.pending_delete!
|
||||
|
||||
Domain.clean_expired_pendings.should == 1
|
||||
DomainCron.clean_expired_pendings.should == 1
|
||||
domain.reload.pending_delete?.should == false
|
||||
domain.pending_json.should == {}
|
||||
end
|
||||
|
||||
it 'should expire domains' do
|
||||
Domain.start_expire_period
|
||||
DomainCron.start_expire_period
|
||||
@domain.statuses.include?(DomainStatus::EXPIRED).should == false
|
||||
|
||||
old_valid_to = Time.zone.now - 10.days
|
||||
@domain.valid_to = old_valid_to
|
||||
@domain.save
|
||||
|
||||
Domain.start_expire_period
|
||||
DomainCron.start_expire_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::EXPIRED).should == true
|
||||
@domain.outzone_at.should be_within(5).of(old_valid_to + Setting.expire_warning_period.days)
|
||||
|
@ -161,7 +161,7 @@ describe Domain do
|
|||
old_valid_to + Setting.expire_warning_period.days + Setting.redemption_grace_period.days
|
||||
)
|
||||
|
||||
Domain.start_expire_period
|
||||
DomainCron.start_expire_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::EXPIRED).should == true
|
||||
end
|
||||
|
@ -173,7 +173,7 @@ describe Domain do
|
|||
@domain.outzone_at, @domain.delete_at = nil, nil
|
||||
@domain.save
|
||||
|
||||
Domain.start_expire_period
|
||||
DomainCron.start_expire_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::EXPIRED).should == true
|
||||
@domain.outzone_at.should be_within(5).of(old_valid_to + Setting.expire_warning_period.days)
|
||||
|
@ -183,7 +183,7 @@ describe Domain do
|
|||
end
|
||||
|
||||
it 'should start redemption grace period' do
|
||||
Domain.start_redemption_grace_period
|
||||
DomainCron.start_redemption_grace_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
|
||||
|
||||
|
@ -191,20 +191,20 @@ describe Domain do
|
|||
@domain.statuses << DomainStatus::SERVER_MANUAL_INZONE # this prohibits server_hold
|
||||
@domain.save
|
||||
|
||||
Domain.start_redemption_grace_period
|
||||
DomainCron.start_redemption_grace_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
|
||||
|
||||
@domain.statuses = []
|
||||
@domain.save
|
||||
|
||||
Domain.start_redemption_grace_period
|
||||
DomainCron.start_redemption_grace_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == true
|
||||
end
|
||||
|
||||
it 'should start delete period' do
|
||||
Domain.start_delete_period
|
||||
DomainCron.start_delete_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::DELETE_CANDIDATE).should == false
|
||||
|
||||
|
@ -212,13 +212,13 @@ describe Domain do
|
|||
@domain.statuses << DomainStatus::SERVER_DELETE_PROHIBITED # this prohibits delete_candidate
|
||||
@domain.save
|
||||
|
||||
Domain.start_delete_period
|
||||
DomainCron.start_delete_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::DELETE_CANDIDATE).should == false
|
||||
|
||||
@domain.statuses = []
|
||||
@domain.save
|
||||
Domain.start_delete_period
|
||||
DomainCron.start_delete_period
|
||||
@domain.reload
|
||||
|
||||
@domain.statuses.include?(DomainStatus::DELETE_CANDIDATE).should == true
|
||||
|
@ -234,7 +234,7 @@ describe Domain do
|
|||
|
||||
Domain.count.should == 2
|
||||
|
||||
Domain.start_delete_period
|
||||
DomainCron.start_delete_period
|
||||
|
||||
Domain.destroy_delete_candidates
|
||||
Domain.count.should == 0
|
||||
|
@ -391,7 +391,7 @@ describe Domain do
|
|||
end
|
||||
|
||||
it 'should start redemption grace period' do
|
||||
Domain.start_redemption_grace_period
|
||||
DomainCron.start_redemption_grace_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
|
||||
|
||||
|
@ -399,14 +399,14 @@ describe Domain do
|
|||
@domain.statuses << DomainStatus::SERVER_MANUAL_INZONE # this prohibits server_hold
|
||||
@domain.save
|
||||
|
||||
Domain.start_redemption_grace_period
|
||||
DomainCron.start_redemption_grace_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
|
||||
|
||||
@domain.statuses = []
|
||||
@domain.save
|
||||
|
||||
Domain.start_redemption_grace_period
|
||||
DomainCron.start_redemption_grace_period
|
||||
@domain.reload
|
||||
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == true
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue