From cff1c3a20bfa5d8c8bd75c10a58c331ee9dabb8a Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Mon, 29 Jun 2015 13:28:59 -0700 Subject: [PATCH] pace out the email sending --- app/admin.rb | 6 ++++-- models/site.rb | 2 +- tests/admin_tests.rb | 10 +++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/admin.rb b/app/admin.rb index 4d54551b..050e188d 100644 --- a/app/admin.rb +++ b/app/admin.rb @@ -25,6 +25,7 @@ post '/admin/email' do day = 0 until sites.empty? + seconds = 0.0 queued_sites = [] Site::EMAIL_BLAST_MAXIMUM_PER_DAY.times { break if sites.empty? @@ -32,12 +33,13 @@ post '/admin/email' do } queued_sites.each do |site| - EmailWorker.perform_at(day.days.from_now, { - from: 'noreply@neocities.org', + EmailWorker.perform_at((day.days.from_now + seconds), { + from: 'Kyle from Neocities ', to: site.email, subject: params[:subject], body: params[:body] }) + seconds += 0.5 end day += 1 diff --git a/models/site.rb b/models/site.rb index b57b3e80..5955646d 100644 --- a/models/site.rb +++ b/models/site.rb @@ -154,7 +154,7 @@ class Site < Sequel::Model if ENV['RACK_ENV'] == 'test' EMAIL_BLAST_MAXIMUM_PER_DAY = 2 else - EMAIL_BLAST_MAXIMUM_PER_DAY = 2000 + EMAIL_BLAST_MAXIMUM_PER_DAY = 1000 end many_to_many :tags diff --git a/tests/admin_tests.rb b/tests/admin_tests.rb index f98c11ee..fff3ee02 100644 --- a/tests/admin_tests.rb +++ b/tests/admin_tests.rb @@ -41,16 +41,16 @@ describe 'email blasting' do relevant_jobs.each do |job| args = job['args'].first - args['from'].must_equal 'noreply@neocities.org' + args['from'].must_equal 'Kyle from Neocities ' args['subject'].must_equal 'Subject Test' args['body'].must_equal 'Body Test' end - immediate_emails = relevant_jobs.select {|j| j['at'].nil? || j['at'] == Time.now.to_f} - immediate_emails.length.must_equal Site::EMAIL_BLAST_MAXIMUM_PER_DAY + relevant_jobs.select {|j| j['at'].nil? || j['at'] == Time.now.to_f}.length.must_equal 1 + relevant_jobs.select {|j| j['at'] == (Time.now + 0.5).to_f}.length.must_equal 1 - tomorrows_emails = relevant_jobs.select {|j| j['at'] == (time+1.day.to_i).to_f} - tomorrows_emails.length.must_equal Site::EMAIL_BLAST_MAXIMUM_PER_DAY + relevant_jobs.select {|j| j['at'] == (time+1.day.to_i).to_f}.length.must_equal 1 + relevant_jobs.select {|j| j['at'] == (time+1.day.to_i+0.5).to_f}.length.must_equal 1 end end end