Make static methods in cron workers non-static
[MAILPOET-2538]
This commit is contained in:
committed by
Jack Kitterhing
parent
ba41f4901e
commit
cd93940940
@ -42,7 +42,7 @@ class Beamer extends SimpleWorker {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate() {
|
function getNextRunDate() {
|
||||||
$wp = new WPFunctions;
|
$wp = new WPFunctions;
|
||||||
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||||
return $date->hour(11)->minute(00)->second(00)->addDay();
|
return $date->hour(11)->minute(00)->second(00)->addDay();
|
||||||
|
@ -33,14 +33,14 @@ class InactiveSubscribers extends SimpleWorker {
|
|||||||
function processTaskStrategy(ScheduledTask $task) {
|
function processTaskStrategy(ScheduledTask $task) {
|
||||||
$tracking_enabled = (bool)$this->settings->get('tracking.enabled');
|
$tracking_enabled = (bool)$this->settings->get('tracking.enabled');
|
||||||
if (!$tracking_enabled) {
|
if (!$tracking_enabled) {
|
||||||
self::schedule();
|
$this->schedule();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
$days_to_inactive = (int)$this->settings->get('deactivate_subscriber_after_inactive_days');
|
$days_to_inactive = (int)$this->settings->get('deactivate_subscriber_after_inactive_days');
|
||||||
// Activate all inactive subscribers in case the feature is turned off
|
// Activate all inactive subscribers in case the feature is turned off
|
||||||
if ($days_to_inactive === 0) {
|
if ($days_to_inactive === 0) {
|
||||||
$this->inactive_subscribers_controller->reactivateInactiveSubscribers();
|
$this->inactive_subscribers_controller->reactivateInactiveSubscribers();
|
||||||
self::schedule();
|
$this->schedule();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Handle activation/deactivation within interval
|
// Handle activation/deactivation within interval
|
||||||
@ -60,7 +60,7 @@ class InactiveSubscribers extends SimpleWorker {
|
|||||||
while ($this->inactive_subscribers_controller->markActiveSubscribers($days_to_inactive, self::BATCH_SIZE) === self::BATCH_SIZE) {
|
while ($this->inactive_subscribers_controller->markActiveSubscribers($days_to_inactive, self::BATCH_SIZE) === self::BATCH_SIZE) {
|
||||||
$this->cron_helper->enforceExecutionLimit($this->timer);
|
$this->cron_helper->enforceExecutionLimit($this->timer);
|
||||||
};
|
};
|
||||||
self::schedule();
|
$this->schedule();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,12 @@ class Migration extends SimpleWorker {
|
|||||||
|
|
||||||
function checkProcessingRequirements() {
|
function checkProcessingRequirements() {
|
||||||
// if migration was completed, don't run it again
|
// if migration was completed, don't run it again
|
||||||
$completed_tasks = self::getCompletedTasks();
|
$completed_tasks = $this->getCompletedTasks();
|
||||||
return empty($completed_tasks);
|
return empty($completed_tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareTask(ScheduledTask $task) {
|
function prepareTask(ScheduledTask $task) {
|
||||||
$unmigrated_columns = self::checkUnmigratedColumnsExist();
|
$unmigrated_columns = $this->checkUnmigratedColumnsExist();
|
||||||
$unmigrated_queues_count = 0;
|
$unmigrated_queues_count = 0;
|
||||||
$unmigrated_queue_subscribers = [];
|
$unmigrated_queue_subscribers = [];
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ class Migration extends SimpleWorker {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function checkUnmigratedColumnsExist() {
|
private function checkUnmigratedColumnsExist() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$existing_columns = $wpdb->get_col('DESC ' . SendingQueue::$_table);
|
$existing_columns = $wpdb->get_col('DESC ' . SendingQueue::$_table);
|
||||||
return in_array('type', $existing_columns);
|
return in_array('type', $existing_columns);
|
||||||
@ -243,7 +243,7 @@ class Migration extends SimpleWorker {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate($wp = null) {
|
function getNextRunDate($wp = null) {
|
||||||
if (is_null($wp)) {
|
if (is_null($wp)) {
|
||||||
$wp = new WPFunctions();
|
$wp = new WPFunctions();
|
||||||
}
|
}
|
||||||
|
@ -47,12 +47,12 @@ abstract class SimpleWorker {
|
|||||||
|
|
||||||
$this->init();
|
$this->init();
|
||||||
|
|
||||||
$scheduled_tasks = self::getDueTasks();
|
$scheduled_tasks = $this->getDueTasks();
|
||||||
$running_tasks = self::getRunningTasks();
|
$running_tasks = $this->getRunningTasks();
|
||||||
|
|
||||||
if (!$scheduled_tasks && !$running_tasks) {
|
if (!$scheduled_tasks && !$running_tasks) {
|
||||||
if (static::AUTOMATIC_SCHEDULING) {
|
if (static::AUTOMATIC_SCHEDULING) {
|
||||||
self::schedule();
|
$this->schedule();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -75,7 +75,7 @@ abstract class SimpleWorker {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function schedule() {
|
function schedule() {
|
||||||
$already_scheduled = ScheduledTask::where('type', static::TASK_TYPE)
|
$already_scheduled = ScheduledTask::where('type', static::TASK_TYPE)
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->where('status', ScheduledTask::STATUS_SCHEDULED)
|
->where('status', ScheduledTask::STATUS_SCHEDULED)
|
||||||
@ -87,7 +87,7 @@ abstract class SimpleWorker {
|
|||||||
$task->type = static::TASK_TYPE;
|
$task->type = static::TASK_TYPE;
|
||||||
$task->status = ScheduledTask::STATUS_SCHEDULED;
|
$task->status = ScheduledTask::STATUS_SCHEDULED;
|
||||||
$task->priority = ScheduledTask::PRIORITY_LOW;
|
$task->priority = ScheduledTask::PRIORITY_LOW;
|
||||||
$task->scheduled_at = static::getNextRunDate();
|
$task->scheduled_at = $this->getNextRunDate();
|
||||||
$task->save();
|
$task->save();
|
||||||
return $task;
|
return $task;
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ abstract class SimpleWorker {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate() {
|
function getNextRunDate() {
|
||||||
$wp = new WPFunctions();
|
$wp = new WPFunctions();
|
||||||
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||||
// Random day of the next week
|
// Random day of the next week
|
||||||
@ -192,15 +192,15 @@ abstract class SimpleWorker {
|
|||||||
return $date;
|
return $date;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getDueTasks() {
|
function getDueTasks() {
|
||||||
return ScheduledTask::findDueByType(static::TASK_TYPE, self::TASK_BATCH_SIZE);
|
return ScheduledTask::findDueByType(static::TASK_TYPE, self::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getRunningTasks() {
|
function getRunningTasks() {
|
||||||
return ScheduledTask::findRunningByType(static::TASK_TYPE, self::TASK_BATCH_SIZE);
|
return ScheduledTask::findRunningByType(static::TASK_TYPE, self::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getCompletedTasks() {
|
function getCompletedTasks() {
|
||||||
return ScheduledTask::findCompletedByType(static::TASK_TYPE, self::TASK_BATCH_SIZE);
|
return ScheduledTask::findCompletedByType(static::TASK_TYPE, self::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ class AutomatedEmails extends SimpleWorker {
|
|||||||
return $context;
|
return $context;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate() {
|
function getNextRunDate() {
|
||||||
$wp = new WPFunctions;
|
$wp = new WPFunctions;
|
||||||
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
$date = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||||
return $date->endOfMonth()->next(Carbon::MONDAY)->midDay();
|
return $date->endOfMonth()->next(Carbon::MONDAY)->midDay();
|
||||||
|
@ -22,12 +22,12 @@ class SubscriberLinkTokens extends SimpleWorker {
|
|||||||
sprintf('UPDATE %s SET link_token = SUBSTRING(MD5(CONCAT(?, email)), 1, ?) WHERE link_token IS NULL LIMIT ?', Subscriber::$_table),
|
sprintf('UPDATE %s SET link_token = SUBSTRING(MD5(CONCAT(?, email)), 1, ?) WHERE link_token IS NULL LIMIT ?', Subscriber::$_table),
|
||||||
[$auth_key, Subscriber::OBSOLETE_LINK_TOKEN_LENGTH, self::BATCH_SIZE]
|
[$auth_key, Subscriber::OBSOLETE_LINK_TOKEN_LENGTH, self::BATCH_SIZE]
|
||||||
);
|
);
|
||||||
self::schedule();
|
$this->schedule();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate() {
|
function getNextRunDate() {
|
||||||
$wp = new WPFunctions();
|
$wp = new WPFunctions();
|
||||||
return Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
return Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ class UnsubscribeTokens extends SimpleWorker {
|
|||||||
return count($instances);
|
return count($instances);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate() {
|
function getNextRunDate() {
|
||||||
$wp = new WPFunctions;
|
$wp = new WPFunctions;
|
||||||
return Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
return Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ class WooCommercePastOrders extends SimpleWorker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function checkProcessingRequirements() {
|
function checkProcessingRequirements() {
|
||||||
return $this->woocommerce_helper->isWooCommerceActive() && empty(self::getCompletedTasks()); // run only once
|
return $this->woocommerce_helper->isWooCommerceActive() && empty($this->getCompletedTasks()); // run only once
|
||||||
}
|
}
|
||||||
|
|
||||||
function processTaskStrategy(ScheduledTask $task) {
|
function processTaskStrategy(ScheduledTask $task) {
|
||||||
@ -71,7 +71,7 @@ class WooCommercePastOrders extends SimpleWorker {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getNextRunDate() {
|
function getNextRunDate() {
|
||||||
return Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); // schedule immediately
|
return Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); // schedule immediately
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,7 @@ class MigrationTest extends \MailPoetTest {
|
|||||||
function _before() {
|
function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
// Alter table to test migration
|
// Alter table to test migration
|
||||||
if (!Migration::checkUnmigratedColumnsExist()) {
|
$this->downgradeTable();
|
||||||
$this->downgradeTable();
|
|
||||||
$this->altered = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->subscriber_to_process = Subscriber::createOrUpdate([
|
$this->subscriber_to_process = Subscriber::createOrUpdate([
|
||||||
'status' => Subscriber::STATUS_SUBSCRIBED,
|
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||||
@ -122,7 +119,7 @@ class MigrationTest extends \MailPoetTest {
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$next_run_date = Migration::getNextRunDate($wp);
|
$next_run_date = $this->worker->getNextRunDate($wp);
|
||||||
expect($next_run_date->timestamp)->equals($timestamp);
|
expect($next_run_date->timestamp)->equals($timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,9 +197,7 @@ class MigrationTest extends \MailPoetTest {
|
|||||||
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
|
|
||||||
// Restore table after testing
|
// Restore table after testing
|
||||||
if (!empty($this->altered)) {
|
$this->restoreTable();
|
||||||
$this->restoreTable();
|
$this->altered = false;
|
||||||
$this->altered = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,49 +52,55 @@ class SimpleWorkerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
function testItSchedulesTask() {
|
function testItSchedulesTask() {
|
||||||
expect(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany())->isEmpty();
|
expect(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany())->isEmpty();
|
||||||
MockSimpleWorker::schedule();
|
(new MockSimpleWorker())->schedule();
|
||||||
expect(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany())->notEmpty();
|
expect(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany())->notEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItDoesNotScheduleTaskTwice() {
|
function testItDoesNotScheduleTaskTwice() {
|
||||||
|
$worker = new MockSimpleWorker();
|
||||||
expect(count(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany()))->equals(0);
|
expect(count(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany()))->equals(0);
|
||||||
MockSimpleWorker::schedule();
|
$worker->schedule();
|
||||||
expect(count(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany()))->equals(1);
|
expect(count(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany()))->equals(1);
|
||||||
MockSimpleWorker::schedule();
|
$worker->schedule();
|
||||||
expect(count(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany()))->equals(1);
|
expect(count(ScheduledTask::where('type', MockSimpleWorker::TASK_TYPE)->findMany()))->equals(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGetScheduledTasks() {
|
function testItCanGetScheduledTasks() {
|
||||||
expect(MockSimpleWorker::getDueTasks())->isEmpty();
|
$worker = new MockSimpleWorker();
|
||||||
|
expect($worker->getDueTasks())->isEmpty();
|
||||||
$this->createScheduledTask();
|
$this->createScheduledTask();
|
||||||
expect(MockSimpleWorker::getDueTasks())->notEmpty();
|
expect($worker->getDueTasks())->notEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGetABatchOfScheduledTasks() {
|
function testItCanGetABatchOfScheduledTasks() {
|
||||||
|
$worker = new MockSimpleWorker();
|
||||||
for ($i = 0; $i < MockSimpleWorker::TASK_BATCH_SIZE + 5; $i += 1) {
|
for ($i = 0; $i < MockSimpleWorker::TASK_BATCH_SIZE + 5; $i += 1) {
|
||||||
$this->createScheduledTask();
|
$this->createScheduledTask();
|
||||||
}
|
}
|
||||||
expect(count(MockSimpleWorker::getDueTasks()))->equals(MockSimpleWorker::TASK_BATCH_SIZE);
|
expect(count($worker->getDueTasks()))->equals(MockSimpleWorker::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGetRunningTasks() {
|
function testItCanGetRunningTasks() {
|
||||||
expect(MockSimpleWorker::getRunningTasks())->isEmpty();
|
$worker = new MockSimpleWorker();
|
||||||
|
expect($worker->getRunningTasks())->isEmpty();
|
||||||
$this->createRunningTask();
|
$this->createRunningTask();
|
||||||
expect(MockSimpleWorker::getRunningTasks())->notEmpty();
|
expect($worker->getRunningTasks())->notEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGetBatchOfRunningTasks() {
|
function testItCanGetBatchOfRunningTasks() {
|
||||||
|
$worker = new MockSimpleWorker();
|
||||||
for ($i = 0; $i < MockSimpleWorker::TASK_BATCH_SIZE + 5; $i += 1) {
|
for ($i = 0; $i < MockSimpleWorker::TASK_BATCH_SIZE + 5; $i += 1) {
|
||||||
$this->createRunningTask();
|
$this->createRunningTask();
|
||||||
}
|
}
|
||||||
expect(count(MockSimpleWorker::getRunningTasks()))->equals(MockSimpleWorker::TASK_BATCH_SIZE);
|
expect(count($worker->getRunningTasks()))->equals(MockSimpleWorker::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGetBatchOfCompletedTasks() {
|
function testItCanGetBatchOfCompletedTasks() {
|
||||||
|
$worker = new MockSimpleWorker();
|
||||||
for ($i = 0; $i < MockSimpleWorker::TASK_BATCH_SIZE + 5; $i += 1) {
|
for ($i = 0; $i < MockSimpleWorker::TASK_BATCH_SIZE + 5; $i += 1) {
|
||||||
$this->createCompletedTask();
|
$this->createCompletedTask();
|
||||||
}
|
}
|
||||||
expect(count(MockSimpleWorker::getCompletedTasks()))->equals(MockSimpleWorker::TASK_BATCH_SIZE);
|
expect(count($worker->getCompletedTasks()))->equals(MockSimpleWorker::TASK_BATCH_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItFailsToProcessWithoutTasks() {
|
function testItFailsToProcessWithoutTasks() {
|
||||||
@ -264,7 +270,7 @@ class SimpleWorkerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
function testItCalculatesNextRunDateWithinNextWeekBoundaries() {
|
function testItCalculatesNextRunDateWithinNextWeekBoundaries() {
|
||||||
$current_date = Carbon::createFromTimestamp(current_time('timestamp'));
|
$current_date = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||||
$next_run_date = MockSimpleWorker::getNextRunDate();
|
$next_run_date = (new MockSimpleWorker())->getNextRunDate();
|
||||||
$difference = $next_run_date->diffInDays($current_date);
|
$difference = $next_run_date->diffInDays($current_date);
|
||||||
// Subtract days left in the current week
|
// Subtract days left in the current week
|
||||||
$difference -= (Carbon::DAYS_PER_WEEK - $current_date->format('N'));
|
$difference -= (Carbon::DAYS_PER_WEEK - $current_date->format('N'));
|
||||||
|
Reference in New Issue
Block a user