lib/mail_spy/manager.rb in mail_spy-0.0.12 vs lib/mail_spy/manager.rb in mail_spy-0.0.13
- old
+ new
@@ -71,29 +71,28 @@
# Batches through all the emails that were scheduled and have come due
# sends them out (step many at a time)
def send_outstanding_emails(step=100, num_threads=50)
raise "No Email service providers installed" unless MailSpy.esps.present?
- pool = MailSpy::ThreadPool.new(num_threads)
+ wq = WorkQueue.new(num_threads, step*2)
offset = 0
sent = 0
# Helper function for setting present values
def set_if_present(email, pony_hash, pony_key, email_key=nil)
email_key = pony_key if email_key.nil?
value = email.send("#{email_key}")
pony_hash[pony_key] = value if value.present?
end
-
while true
emails = MailSpy::Email.
limit(step).offset(offset).
where(:schedule_at.lte => DateTime.now, :sent => false, :failed => false).all
break if emails.blank?
emails.each do |email|
- pool.schedule do
+ wq.enqueue_b do
begin
MailSpy::CoreMailer.template(email).deliver
email.update_attribute(:sent, true)
sent += 1
rescue Exception => e
@@ -101,19 +100,14 @@
email.error_message = e.try(:message)
email.error_backtrace = e.try(:backtrace)
email.save!
end
end
-
- while(pool.job_queue_size > (2 * num_threads))
- sleep(1)
- end
-
end
offset += step
end
- pool.shutdown
+ wq.join
sent
end
# ------------------------------------------- TRACKING