mirror of
https://github.com/internetee/registry.git
synced 2025-08-01 23:42:04 +02:00
Improve domain discard
- Extract rake task domain:discard - Remove background job when keeping a domain #790
This commit is contained in:
parent
00a30fc019
commit
e776d09f9d
10 changed files with 104 additions and 46 deletions
|
@ -1,12 +1,43 @@
|
|||
module Concerns::Domain::Deletable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
def discard_domains
|
||||
domains = where('delete_at < ? AND ? != ALL(statuses) AND ? != ALL(statuses)',
|
||||
Time.zone.now,
|
||||
DomainStatus::SERVER_DELETE_PROHIBITED,
|
||||
DomainStatus::DELETE_CANDIDATE)
|
||||
|
||||
domains.map(&:discard)
|
||||
end
|
||||
end
|
||||
|
||||
def discard
|
||||
statuses << DomainStatus::DELETE_CANDIDATE
|
||||
# We don't validate deliberately since nobody is interested in fixing discarded domain
|
||||
save(validate: false)
|
||||
delete_later
|
||||
logger.info "Domain #{name} (ID: #{id}) is scheduled to be deleted"
|
||||
end
|
||||
|
||||
def keep
|
||||
statuses.delete(DomainStatus::DELETE_CANDIDATE)
|
||||
save
|
||||
do_not_delete_later
|
||||
end
|
||||
|
||||
def discarded?
|
||||
statuses.include?(DomainStatus::DELETE_CANDIDATE)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def delete_later
|
||||
run_at = rand(((24 * 60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now
|
||||
DomainDeleteJob.enqueue(id, run_at: run_at)
|
||||
end
|
||||
|
||||
def do_not_delete_later
|
||||
QueJob.find_by!("args->>0 = '#{id}'").delete
|
||||
end
|
||||
end
|
||||
|
|
|
@ -281,13 +281,6 @@ class Domain < ActiveRecord::Base
|
|||
true
|
||||
end
|
||||
|
||||
def delete_candidateable?
|
||||
return false if delete_at > Time.zone.now
|
||||
return false if statuses.include?(DomainStatus::DELETE_CANDIDATE)
|
||||
return false if statuses.include?(DomainStatus::SERVER_DELETE_PROHIBITED)
|
||||
true
|
||||
end
|
||||
|
||||
def renewable?
|
||||
if Setting.days_to_renew_domain_before_expire != 0
|
||||
# if you can renew domain at days_to_renew before domain expiration
|
||||
|
@ -683,10 +676,6 @@ class Domain < ActiveRecord::Base
|
|||
where("#{attribute_alias(:outzone_time)} < ?", Time.zone.now)
|
||||
end
|
||||
|
||||
def self.delete_candidates
|
||||
where('delete_at < ?', Time.zone.now)
|
||||
end
|
||||
|
||||
def self.uses_zone?(zone)
|
||||
exists?(["name ILIKE ?", "%.#{zone.origin}"])
|
||||
end
|
||||
|
|
|
@ -104,22 +104,6 @@ class DomainCron
|
|||
|
||||
c = 0
|
||||
|
||||
domains = Domain.delete_candidates
|
||||
|
||||
domains.each do |domain|
|
||||
next unless domain.delete_candidateable?
|
||||
|
||||
domain.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
|
||||
# If domain successfully saved, add it to delete schedule
|
||||
if domain.save(validate: false)
|
||||
::PaperTrail.whodunnit = "cron - #{__method__}"
|
||||
DomainDeleteJob.enqueue(domain.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: job added by deleteCandidate status ##{domain.id} (#{domain.name})\n" unless Rails.env.test?
|
||||
c += 1
|
||||
end
|
||||
end
|
||||
|
||||
Domain.where('force_delete_at <= ?', Time.zone.now.end_of_day.utc).each do |x|
|
||||
DomainDeleteJob.enqueue(x.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
|
||||
STDOUT << "#{Time.zone.now.utc} DomainCron.destroy_delete_candidates: job added by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
|
|
3
app/models/que_job.rb
Normal file
3
app/models/que_job.rb
Normal file
|
@ -0,0 +1,3 @@
|
|||
class QueJob < ActiveRecord::Base # To be able to remove existing jobs
|
||||
self.primary_key = 'job_id'
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue