diff --git a/app/models/domain.rb b/app/models/domain.rb index d6aa28718..5f3c6ed08 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -53,6 +53,7 @@ class Domain < ActiveRecord::Base end after_save :manage_automatic_statuses after_save :update_whois_body + after_save :update_whois_server validates :name_dirty, domain_name: true, uniqueness: true validates :period, numericality: { only_integer: true } @@ -118,6 +119,10 @@ class Domain < ActiveRecord::Base return period.to_i.months if unit == 'm' return period.to_i.years if unit == 'y' end + + def included + includes(:registrar, :nameservers, {tech_contacts: :registrar}, {admin_contacts: :registrar}) + end end def name=(value) @@ -228,12 +233,6 @@ class Domain < ActiveRecord::Base log end - def update_whois_server - wd = Whois::Domain.find_or_initialize_by(name: name) - wd.whois_body = whois_body - wd.save - end - # rubocop:disable Metrics/MethodLength def update_whois_body self.whois_body = <<-EOS @@ -260,14 +259,12 @@ class Domain < ActiveRecord::Base created: #{registrar.created_at.to_s(:db)} changed: #{registrar.updated_at.to_s(:db)} EOS - - update_whois_server end # rubocop:enable Metrics/MethodLength def contacts_body out = '' - admin_contacts.includes(:registrar).each do |c| + admin_contacts.each do |c| out << 'Admin contact:' out << "name: #{c.name}" out << "email: #{c.email}" @@ -275,7 +272,7 @@ class Domain < ActiveRecord::Base out << "created: #{c.created_at.to_s(:db)}" end - tech_contacts.includes(:registrar).each do |c| + tech_contacts.each do |c| out << 'Tech contact:' out << "name: #{c.name}" out << "email: #{c.email}" @@ -284,4 +281,10 @@ class Domain < ActiveRecord::Base end out end + + def update_whois_server + wd = Whois::Domain.find_or_initialize_by(name: name) + wd.whois_body = whois_body + wd.save + end end diff --git a/lib/tasks/whois.rake b/lib/tasks/whois.rake new file mode 100644 index 000000000..1ca5dcd44 --- /dev/null +++ b/lib/tasks/whois.rake @@ -0,0 +1,28 @@ +namespace :whois do + desc 'Regenerate Registry records and sync whois database' + task sync_all: :environment do + + end + + desc 'Regenerate whois records at Registry master database' + task generate: :environment do + start = Time.zone.now.to_f + print "-----> Update Registry whois records..." + Domain.included.find_each(batch_size: 100000).with_index do |d, index| + d.update_columns(whois_body: d.update_whois_body) + print '.' if index % 100 == 0 + end + puts "\n-----> all done in #{(Time.zone.now.to_f - start).round(2)} seconds" + end + + desc 'Sync whois database' + task sync: :environment do + start = Time.zone.now.to_f + print "-----> Sync whois database..." + Domain.select(:id, :name, :whois_body).find_each(batch_size: 100000).with_index do |d, index| + d.update_whois_server + print '.' if index % 100 == 0 + end + puts "\n-----> all done in #{(Time.zone.now.to_f - start).round(2)} seconds" + end +end