- Updates Daemon to execute workers via WP's action hook
- Bootstraps Scheduler class
This commit is contained in:
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace MailPoet\Config;
|
namespace MailPoet\Config;
|
||||||
|
use MailPoet\Cron\Workers\Scheduler;
|
||||||
|
use MailPoet\Cron\Workers\SendingQueue;
|
||||||
use \MailPoet\Models\Setting;
|
use \MailPoet\Models\Setting;
|
||||||
|
|
||||||
class Hooks {
|
class Hooks {
|
||||||
@ -11,6 +13,7 @@ class Hooks {
|
|||||||
$this->setupWPUsers();
|
$this->setupWPUsers();
|
||||||
$this->setupImageSize();
|
$this->setupImageSize();
|
||||||
$this->setupListing();
|
$this->setupListing();
|
||||||
|
$this->setupCronWorkers();
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupSubscribe() {
|
function setupSubscribe() {
|
||||||
@ -144,4 +147,15 @@ class Hooks {
|
|||||||
return $status;
|
return $status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
function setupCronWorkers() {
|
||||||
|
add_action('mailpoet_cron_worker', function($timer) {
|
||||||
|
$scheduler = new Scheduler($timer);
|
||||||
|
$scheduler->process();
|
||||||
|
}, 10, 1);
|
||||||
|
add_action('mailpoet_cron_worker', function($timer) {
|
||||||
|
$sending_queue = new SendingQueue($timer);
|
||||||
|
$sending_queue->process();
|
||||||
|
}, 10, 1);
|
||||||
|
}
|
||||||
|
}
|
@ -34,12 +34,13 @@ class Initializer {
|
|||||||
$this->setupLocalizer();
|
$this->setupLocalizer();
|
||||||
$this->setupMenu();
|
$this->setupMenu();
|
||||||
$this->setupPermissions();
|
$this->setupPermissions();
|
||||||
$this->setupPublicAPI();
|
|
||||||
$this->setupAnalytics();
|
$this->setupAnalytics();
|
||||||
$this->setupChangelog();
|
$this->setupChangelog();
|
||||||
$this->setupShortcodes();
|
$this->setupShortcodes();
|
||||||
$this->setupHooks();
|
$this->setupHooks();
|
||||||
$this->setupImages();
|
$this->setupImages();
|
||||||
|
$this->setupPublicAPI();
|
||||||
|
$this->runQueueSupervisor();
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
// if anything goes wrong during init
|
// if anything goes wrong during init
|
||||||
// automatically deactivate the plugin
|
// automatically deactivate the plugin
|
||||||
|
@ -68,4 +68,11 @@ class CronHelper {
|
|||||||
// throw an error if all connection attempts failed
|
// throw an error if all connection attempts failed
|
||||||
throw new \Exception(__('Site URL is unreachable.'));
|
throw new \Exception(__('Site URL is unreachable.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function checkExecutionTimer($timer) {
|
||||||
|
$elapsed_time = microtime(true) - $timer;
|
||||||
|
if($elapsed_time >= self::daemon_execution_limit) {
|
||||||
|
throw new \Exception(__('Maximum execution time reached.'));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,7 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace MailPoet\Cron;
|
namespace MailPoet\Cron;
|
||||||
|
|
||||||
|
use MailPoet\Cron\Workers\Scheduler;
|
||||||
use MailPoet\Cron\Workers\SendingQueue;
|
use MailPoet\Cron\Workers\SendingQueue;
|
||||||
|
use MailPoet\Models\Newsletter;
|
||||||
|
|
||||||
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
||||||
|
|
||||||
@ -35,8 +37,7 @@ class Daemon {
|
|||||||
}
|
}
|
||||||
$this->abortIfStopped($daemon);
|
$this->abortIfStopped($daemon);
|
||||||
try {
|
try {
|
||||||
$sending_queue = new SendingQueue($this->timer);
|
do_action('mailpoet_cron_worker', $this->timer);
|
||||||
$sending_queue->process();
|
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
}
|
}
|
||||||
$elapsed_time = microtime(true) - $this->timer;
|
$elapsed_time = microtime(true) - $this->timer;
|
||||||
|
27
lib/Cron/Workers/Scheduler.php
Normal file
27
lib/Cron/Workers/Scheduler.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
namespace MailPoet\Cron\Workers;
|
||||||
|
|
||||||
|
use MailPoet\Cron\CronHelper;
|
||||||
|
use MailPoet\Models\Setting;
|
||||||
|
use MailPoet\Util\Security;
|
||||||
|
|
||||||
|
if(!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
|
class Scheduler {
|
||||||
|
public $timer;
|
||||||
|
|
||||||
|
function __construct($timer = false) {
|
||||||
|
$this->timer = ($timer) ? $timer : microtime(true);
|
||||||
|
CronHelper::checkExecutionTimer($this->timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function process() {
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkExecutionTimer() {
|
||||||
|
$elapsed_time = microtime(true) - $this->timer;
|
||||||
|
if($elapsed_time >= CronHelper::daemon_execution_limit) {
|
||||||
|
throw new \Exception(__('Maximum execution time reached.'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@ use MailPoet\Models\Subscriber;
|
|||||||
use MailPoet\Newsletter\Renderer\Renderer;
|
use MailPoet\Newsletter\Renderer\Renderer;
|
||||||
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
|
use MailPoet\Util\Security;
|
||||||
|
|
||||||
if(!defined('ABSPATH')) exit;
|
if(!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
@ -27,6 +28,7 @@ class SendingQueue {
|
|||||||
'processBulkSubscribers' :
|
'processBulkSubscribers' :
|
||||||
'processIndividualSubscriber';
|
'processIndividualSubscriber';
|
||||||
$this->timer = ($timer) ? $timer : microtime(true);
|
$this->timer = ($timer) ? $timer : microtime(true);
|
||||||
|
CronHelper::checkExecutionTimer($this->timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
function process() {
|
function process() {
|
||||||
@ -102,7 +104,7 @@ class SendingQueue {
|
|||||||
}
|
}
|
||||||
$this->updateQueue($queue);
|
$this->updateQueue($queue);
|
||||||
$this->checkSendingLimit();
|
$this->checkSendingLimit();
|
||||||
$this->checkExecutionTimer();
|
CronHelper::checkExecutionTimer($this->timer);
|
||||||
return $queue->subscribers;
|
return $queue->subscribers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,7 +131,7 @@ class SendingQueue {
|
|||||||
$this->updateNewsletterStatistics($newsletter_statistics);
|
$this->updateNewsletterStatistics($newsletter_statistics);
|
||||||
}
|
}
|
||||||
$this->updateQueue($queue);
|
$this->updateQueue($queue);
|
||||||
$this->checkExecutionTimer();
|
CronHelper::checkExecutionTimer($this->timer);
|
||||||
}
|
}
|
||||||
return $queue->subscribers;
|
return $queue->subscribers;
|
||||||
}
|
}
|
||||||
@ -259,11 +261,4 @@ class SendingQueue {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkExecutionTimer() {
|
|
||||||
$elapsed_time = microtime(true) - $this->timer;
|
|
||||||
if($elapsed_time >= CronHelper::daemon_execution_limit) {
|
|
||||||
throw new \Exception(__('Maximum execution time reached.'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user