- Modifies cron router/UI to display proper status message when WP task

scheduler is configured and cron is not running
- Updates sending queue worker and related components to stop (delete)
  cron when all processing is done
This commit is contained in:
Vlad
2016-07-19 09:02:58 -04:00
parent 5ed0a5819c
commit a438f13bb0
6 changed files with 65 additions and 13 deletions

View File

@ -53,10 +53,13 @@ define(
}.bind(this)); }.bind(this));
}, },
render: function() { render: function() {
if(this.state.status === 'loading') {
return(<div>{MailPoet.I18n.t('loadingDaemonStatus')}</div>);
}
switch(this.state.status) { switch(this.state.status) {
case 'loading':
return(
<div>
{MailPoet.I18n.t('loadingDaemonStatus')}
</div>
);
case 'started': case 'started':
return( return(
<div> <div>
@ -85,6 +88,20 @@ define(
</div> </div>
); );
break; break;
case 'wordpress_task_scheduler_enabled':
return(
<div>
{MailPoet.I18n.t('wordpressTaskSchedulerEnabled')}
</div>
);
break;
case false:
return(
<div>
{MailPoet.I18n.t('daemonNotRunning')}
</div>
);
break;
} }
} }
}); });

View File

@ -1,6 +1,7 @@
<?php <?php
namespace MailPoet\API\Endpoints; namespace MailPoet\API\Endpoints;
use MailPoet\Config\TaskScheduler;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Supervisor; use MailPoet\Cron\Supervisor;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
@ -27,10 +28,14 @@ class Cron {
} }
function getStatus() { function getStatus() {
$daemon = Setting::where('name', 'cron_daemon') $task_scheduler = TaskScheduler::getCurrentMethod();
->findOne(); $daemon = Setting::getSetting(CronHelper::DAEMON_SETTING);
return ($daemon) ? if($daemon) {
unserialize($daemon->value) : return $daemon;
}
$status = ($task_scheduler === TaskScheduler::METHOD_WORDPRESS) ?
'wordpress_task_scheduler_enabled' :
false; false;
return array('status' => $status);
} }
} }

View File

@ -12,6 +12,7 @@ class CronHelper {
const DAEMON_EXECUTION_LIMIT = 20; const DAEMON_EXECUTION_LIMIT = 20;
const DAEMON_EXECUTION_TIMEOUT = 35; const DAEMON_EXECUTION_TIMEOUT = 35;
const DAEMON_REQUEST_TIMEOUT = 2; const DAEMON_REQUEST_TIMEOUT = 2;
const DAEMON_SETTING = 'cron_daemon';
static function createDaemon($token) { static function createDaemon($token) {
$daemon = array( $daemon = array(
@ -23,17 +24,27 @@ class CronHelper {
} }
static function getDaemon() { static function getDaemon() {
return Setting::getValue('cron_daemon'); return Setting::getValue(self::DAEMON_SETTING);
} }
static function saveDaemon($daemon) { static function saveDaemon($daemon) {
$daemon['updated_at'] = time(); $daemon['updated_at'] = time();
return Setting::setValue( return Setting::setValue(
'cron_daemon', self::DAEMON_SETTING,
$daemon $daemon
); );
} }
static function stopDaemon() {
$daemon = self::getDaemon();
$daemon['status'] = Daemon::STATUS_STOPPED;
return self::saveDaemon($daemon);
}
static function deleteDaemon() {
return Setting::deleteSetting(self::DAEMON_SETTING);
}
static function createToken() { static function createToken() {
return Security::generateRandomString(); return Security::generateRandomString();
} }

View File

@ -62,7 +62,7 @@ class Newsletter {
return $newsletter; return $newsletter;
} }
function render($newsletter) { function render(array $newsletter) {
$renderer = new Renderer($newsletter); $renderer = new Renderer($newsletter);
$newsletter['rendered_body'] = $renderer->render(); $newsletter['rendered_body'] = $renderer->render();
return $newsletter; return $newsletter;
@ -103,4 +103,12 @@ class Newsletter {
) )
); );
} }
}
function markNewsletterAsSent($queue_id) {
$newsletter = NewsletterModel::findOne($queue_id);
// if it's a standard newsletter, update its status
if($newsletter->type === NewsletterModel::TYPE_STANDARD) {
$newsletter->setStatus(NewsletterModel::STATUS_SENT);
}
}
}

View File

@ -160,4 +160,13 @@ class Setting extends Model {
return $setting->save(); return $setting->save();
} }
}
public static function getSetting($setting) {
return self::where('name', $setting)->findOne();
}
public static function deleteSetting($setting) {
$setting = self::where('name', $setting)->findOne();
return ($setting) ? $setting->delete() : false;
}
}

View File

@ -6,9 +6,11 @@
<% block translations %> <% block translations %>
<%= localize({ <%= localize({
'daemonNotRunning': __('Daemon is not running'),
'wordpressTaskSchedulerEnabled': __('Daemon is not running because WordPress task scheduler is enabled and there are no scheduled or in-progress jobs'),
'daemonControlError': __('Cron daemon error'), 'daemonControlError': __('Cron daemon error'),
'loadingDaemonStatus': __('Loading daemon status...'), 'loadingDaemonStatus': __('Loading daemon status...'),
'cronDaemonIsRunning': __('Cron daemon is running.'), 'cronDaemonIsRunning': __('Cron daemon is running'),
'stop': __('Stop'), 'stop': __('Stop'),
'start': __('Start'), 'start': __('Start'),
'cronDaemonState': __('Cron is %$1s') 'cronDaemonState': __('Cron is %$1s')