diff --git a/assets/js/src/help/cron_status.jsx b/assets/js/src/help/cron_status.jsx index fd50372123..bcdf87a2ef 100644 --- a/assets/js/src/help/cron_status.jsx +++ b/assets/js/src/help/cron_status.jsx @@ -56,6 +56,10 @@ const CronStatus = (props) => { key: MailPoet.I18n.t('lastSeenError'), value: lastError || MailPoet.I18n.t('none'), }, + { + key: MailPoet.I18n.t('lastSeenErrorDate'), + value: status.last_error_date ? MailPoet.Date.full(status.last_error_date * 1000) : MailPoet.I18n.t('unknown'), + }, ]} /> diff --git a/lib/Cron/CronHelper.php b/lib/Cron/CronHelper.php index b1b365dc84..d0f47d866c 100644 --- a/lib/Cron/CronHelper.php +++ b/lib/Cron/CronHelper.php @@ -26,6 +26,7 @@ class CronHelper { 'run_started_at' => null, 'run_completed_at' => null, 'last_error' => null, + 'last_error_date' => null, ]; self::saveDaemon($daemon); return $daemon; @@ -44,6 +45,7 @@ class CronHelper { $daemon = self::getDaemon(); if ($daemon) { $daemon['last_error'] = $error; + $daemon['last_error_date'] = time(); self::saveDaemon($daemon); } } diff --git a/tests/integration/Cron/CronHelperTest.php b/tests/integration/Cron/CronHelperTest.php index 581a0ec18e..4bd3c1b59b 100644 --- a/tests/integration/Cron/CronHelperTest.php +++ b/tests/integration/Cron/CronHelperTest.php @@ -50,6 +50,7 @@ class CronHelperTest extends \MailPoetTest { 'run_started_at' => null, 'run_completed_at' => null, 'last_error' => null, + 'last_error_date' => null, ] ); } @@ -68,6 +69,7 @@ class CronHelperTest extends \MailPoetTest { 'run_started_at' => null, 'run_completed_at' => null, 'last_error' => null, + 'last_error_date' => null, ] ); } @@ -192,9 +194,11 @@ class CronHelperTest extends \MailPoetTest { $daemon ); + $time = time(); CronHelper::saveDaemonLastError('error'); $daemon = CronHelper::getDaemon(); expect($daemon['last_error'])->equals('error'); + expect($daemon['last_error_date'])->greaterOrEquals($time); } @@ -325,6 +329,7 @@ class CronHelperTest extends \MailPoetTest { 'run_started_at' => null, 'run_completed_at' => null, 'last_error' => null, + 'last_error_date' => null, ]; } } diff --git a/views/help.html b/views/help.html index bfd1890c0c..e8e5546f16 100644 --- a/views/help.html +++ b/views/help.html @@ -44,6 +44,7 @@ 'lastRunStarted': _x('Last run started', 'A label in a status table e.g. Last run started: 2018-10-18 18:50'), 'lastRunCompleted': _x('Last run completed', 'A label in a status table e.g. Last run completed: 2018-10-18 18:50'), 'lastSeenError': _x('Last seen error', 'A label in a status table e.g. Last seen error: Process timeout'), + 'lastSeenErrorDate': _x('Last seen error date', 'A label in a status table e.g. Last seen error date: 2018-10-18 18:50'), 'unknown': _x('unknown', 'An unknown state is a status table e.g. Last run started: unknown'), 'accessible': _x('Accessible', 'A label in a status table e.g. Accessible: yes'), 'status': __('Status'),