Reschedule bounce task
[MAILPOET-2100]
This commit is contained in:
@ -122,6 +122,7 @@ class Scheduler {
|
|||||||
'post notification set status to sending',
|
'post notification set status to sending',
|
||||||
['newsletter_id' => $newsletter->id, 'task_id' => $queue->task_id]
|
['newsletter_id' => $newsletter->id, 'task_id' => $queue->task_id]
|
||||||
);
|
);
|
||||||
|
$this->reScheduleBounceTask();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +159,7 @@ class Scheduler {
|
|||||||
$task->save();
|
$task->save();
|
||||||
// update newsletter status
|
// update newsletter status
|
||||||
$newsletter->setStatus(Newsletter::STATUS_SENDING);
|
$newsletter->setStatus(Newsletter::STATUS_SENDING);
|
||||||
|
$this->reScheduleBounceTask();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,6 +235,18 @@ class Scheduler {
|
|||||||
ScheduledTask::touchAllByIds($ids);
|
ScheduledTask::touchAllByIds($ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function reScheduleBounceTask() {
|
||||||
|
$bounce_tasks = Bounce::getScheduledTasks($future = true);
|
||||||
|
if (count($bounce_tasks)) {
|
||||||
|
$bounce_task = reset($bounce_tasks);
|
||||||
|
if (Carbon::createFromTimestamp(current_time('timestamp'))->addHour(42)->lessThan($bounce_task->scheduled_at)) {
|
||||||
|
$random_offset = rand(-6 * 60 * 60, 6 * 60 * 60);
|
||||||
|
$bounce_task->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'))->addSecond((36 * 60 * 60) + $random_offset);
|
||||||
|
$bounce_task->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static function getScheduledQueues() {
|
static function getScheduledQueues() {
|
||||||
return SendingTask::getScheduledQueues(self::TASK_BATCH_SIZE);
|
return SendingTask::getScheduledQueues(self::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
|
@ -125,6 +125,10 @@ abstract class SimpleWorker {
|
|||||||
return $date;
|
return $date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bool $future
|
||||||
|
* @return ScheduledTask[]
|
||||||
|
*/
|
||||||
static function getScheduledTasks($future = false) {
|
static function getScheduledTasks($future = false) {
|
||||||
$dateWhere = ($future) ? 'whereGt' : 'whereLte';
|
$dateWhere = ($future) ? 'whereGt' : 'whereLte';
|
||||||
$wp = new WPFunctions();
|
$wp = new WPFunctions();
|
||||||
|
@ -552,6 +552,38 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItReSchedulesBounceTask() {
|
||||||
|
$task = ScheduledTask::createOrUpdate([
|
||||||
|
'type' => 'bounce',
|
||||||
|
'status' => ScheduledTask::STATUS_SCHEDULED,
|
||||||
|
'scheduled_at' => Carbon::createFromTimestamp(current_time('timestamp'))->addMonths(1),
|
||||||
|
]);
|
||||||
|
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||||
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
|
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||||
|
$scheduler = new Scheduler($finder);
|
||||||
|
|
||||||
|
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||||
|
$refetched_task = ScheduledTask::where('id', $task->id)->findOne();
|
||||||
|
expect($refetched_task->scheduled_at)->lessThan(Carbon::createFromTimestamp(current_time('timestamp'))->addHours(42));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItDoesNotReSchedulesBounceTaskWhenSoon() {
|
||||||
|
$task = ScheduledTask::createOrUpdate([
|
||||||
|
'type' => 'bounce',
|
||||||
|
'status' => ScheduledTask::STATUS_SCHEDULED,
|
||||||
|
'scheduled_at' => Carbon::createFromTimestamp(current_time('timestamp'))->addMinute(5),
|
||||||
|
]);
|
||||||
|
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||||
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
|
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||||
|
$scheduler = new Scheduler($finder);
|
||||||
|
|
||||||
|
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||||
|
$refetched_task = ScheduledTask::where('id', $task->id)->findOne();
|
||||||
|
expect($refetched_task->scheduled_at)->lessThan(Carbon::createFromTimestamp(current_time('timestamp'))->addHours(1));
|
||||||
|
}
|
||||||
|
|
||||||
function testItProcessesScheduledJobsWhenNewsletterIsScheduled() {
|
function testItProcessesScheduledJobsWhenNewsletterIsScheduled() {
|
||||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_SCHEDULED);
|
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_SCHEDULED);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
|
Reference in New Issue
Block a user