- Updates cron/mailer/scheduler code to work with the new sending queue

task scheduler and mailer log
This commit is contained in:
Vlad
2016-07-20 19:12:31 -04:00
parent a5569a6a55
commit 9b9cb1455a
7 changed files with 71 additions and 91 deletions

View File

@ -5,7 +5,7 @@ use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Subscribers as SubscribersTask;
use MailPoet\Models\Newsletter as NewsletterModel;
use MailPoet\Cron\Workers\SendingQueue\Tasks\TaskScheduler as TaskSchedulerTask;
use MailPoet\Models\SendingQueue as SendingQueueModel;
use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel;
use MailPoet\Models\Subscriber as SubscriberModel;
@ -23,10 +23,12 @@ class SendingQueue {
$this->mailer_task = new MailerTask();
$this->newsletter_task = new NewsletterTask();
$this->timer = ($timer) ? $timer : microtime(true);
// abort if sending and/or execution limit are reached
$this->mailer_task->enforceSendingLimit();
CronHelper::enforceExecutionLimit($this->timer);
}
function process() {
$this->mailer_task->checkSendingLimit();
foreach(self::getRunningQueues() as $queue) {
// get and pre-process newsletter (render, replace shortcodes/links, etc.)
$newsletter = $this->newsletter_task->getAndPreProcess($queue->asArray());
@ -67,8 +69,14 @@ class SendingQueue {
$newsletter,
$found_subscribers
);
if($queue->status === SendingQueueModel::STATUS_COMPLETED) {
$this->newsletter_task->markNewsletterAsSent($queue->newsletter_id);
}
// abort if execution limit is reached
CronHelper::enforceExecutionLimit($this->timer);
}
}
TaskSchedulerTask::complete();
}
function processQueue($queue, $newsletter, $subscribers) {
@ -141,6 +149,7 @@ class SendingQueue {
$prepared_subscribers_ids,
$queue->subscribers
);
$queue = $this->updateQueue($queue);
} else {
// update processed/to process list
$queue->subscribers = SubscribersTask::updateProcessedList(
@ -152,22 +161,14 @@ class SendingQueue {
// keep track of sent items
$this->mailer_task->updateMailerLog();
$subscribers_to_process_count = count($queue->subscribers['to_process']);
$queue = $this->updateQueue($queue);
// check sending limit if there are still subscribers left to send
if(isset($subscribers_to_process_count)) {
$this->mailer_task->enforceSendingLimit();
}
}
$queue = $this->updateQueue($queue);
if($subscribers_to_process_count) {
$this->mailer_task->checkSendingLimit();
}
CronHelper::checkExecutionTimer($this->timer);
return $queue;
}
function getQueues() {
return SendingQueueModel::orderByDesc('priority')
->whereNull('deleted_at')
->whereNull('status')
->findMany();
}
static function getRunningQueues() {
return SendingQueueModel::orderByDesc('priority')
->whereNull('deleted_at')
@ -185,13 +186,6 @@ class SendingQueue {
if(!$queue->count_to_process) {
$queue->processed_at = current_time('mysql');
$queue->status = SendingQueueModel::STATUS_COMPLETED;
// if it's a standard or post notificaiton newsletter, update its status to sent
$newsletter = NewsletterModel::findOne($queue->newsletter_id);
if($newsletter->type === NewsletterModel::TYPE_STANDARD ||
$newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY
) {
$newsletter->setStatus(NewsletterModel::STATUS_SENT);
}
}
return $queue->save();
}