Expand System Info report with sending queue status
[MAILPOET-6378]
This commit is contained in:
committed by
Aschepikov
parent
06532320b5
commit
0d1e141e2f
@@ -4,6 +4,7 @@ namespace MailPoet\SystemReport;
|
|||||||
|
|
||||||
use MailPoet\Cron\CronHelper;
|
use MailPoet\Cron\CronHelper;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
|
use MailPoet\Mailer\MailerLog;
|
||||||
use MailPoet\Router\Endpoints\CronDaemon;
|
use MailPoet\Router\Endpoints\CronDaemon;
|
||||||
use MailPoet\Services\Bridge;
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
@@ -76,6 +77,9 @@ class SystemReportCollector {
|
|||||||
$cronPingResponse = __("Can't ping cron URL", 'mailpoet') . ' (' . $e->getMessage() . ')';
|
$cronPingResponse = __("Can't ping cron URL", 'mailpoet') . ' (' . $e->getMessage() . ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$mailerLog = MailerLog::getMailerLog();
|
||||||
|
$mailerLog['sent'] = MailerLog::sentSince();
|
||||||
|
|
||||||
// the HelpScout Beacon API has a limit of 20 attribute-value pairs (https://developer.helpscout.com/beacon-2/web/javascript-api/#beacon-session-data)
|
// the HelpScout Beacon API has a limit of 20 attribute-value pairs (https://developer.helpscout.com/beacon-2/web/javascript-api/#beacon-session-data)
|
||||||
return [
|
return [
|
||||||
'PHP version' => PHP_VERSION,
|
'PHP version' => PHP_VERSION,
|
||||||
@@ -127,10 +131,23 @@ class SystemReportCollector {
|
|||||||
'Total number of subscribers' => $this->subscribersFeature->getSubscribersCount(),
|
'Total number of subscribers' => $this->subscribersFeature->getSubscribersCount(),
|
||||||
'Plugin installed at' => $this->settings->get('installed_at'),
|
'Plugin installed at' => $this->settings->get('installed_at'),
|
||||||
'Installed via WooCommerce onboarding wizard' => $this->wooCommerceHelper->wasMailPoetInstalledViaWooCommerceOnboardingWizard(),
|
'Installed via WooCommerce onboarding wizard' => $this->wooCommerceHelper->wasMailPoetInstalledViaWooCommerceOnboardingWizard(),
|
||||||
|
'Sending queue status' => $this->formatCompositeField([
|
||||||
|
'Status' => $mailerLog['status'] ?? 'Unknown',
|
||||||
|
'Started at' => isset($mailerLog['started']) ? date('Y-m-d H:i:s', $mailerLog['started']) : 'Unknown',
|
||||||
|
'Emails sent' => $mailerLog['sent'],
|
||||||
|
'Retry attempts' => $mailerLog['retry_attempt'] ?? 0,
|
||||||
|
'Last seen error' => isset($mailerLog['error'])
|
||||||
|
? $mailerLog['error']['error_message'] . ' (' . $mailerLog['error']['operation'] . ')'
|
||||||
|
: 'None',
|
||||||
|
]),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function formatCompositeField($fields) {
|
private function formatCompositeField($fields) {
|
||||||
|
if (empty($fields)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
return implode(' - ', array_map(function ($key, $value) {
|
return implode(' - ', array_map(function ($key, $value) {
|
||||||
return $key . ': ' . $value;
|
return $key . ': ' . $value;
|
||||||
}, array_keys($fields), array_values($fields)));
|
}, array_keys($fields), array_values($fields)));
|
||||||
|
@@ -4,6 +4,7 @@ namespace MailPoet\Test\SystemReport;
|
|||||||
|
|
||||||
use MailPoet\Cron\CronHelper;
|
use MailPoet\Cron\CronHelper;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
use MailPoet\Mailer\MailerLog;
|
||||||
use MailPoet\Services\Bridge;
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\SystemReport\SystemReportCollector;
|
use MailPoet\SystemReport\SystemReportCollector;
|
||||||
@@ -214,4 +215,26 @@ class SystemReportCollectorTest extends \MailPoetTest {
|
|||||||
verify($subjectField)->stringContainsString('Last run end: Unknown');
|
verify($subjectField)->stringContainsString('Last run end: Unknown');
|
||||||
verify($subjectField)->stringContainsString('Last seen error: None');
|
verify($subjectField)->stringContainsString('Last seen error: None');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItReturnsSendingQueueStatus() {
|
||||||
|
$mailerLog = MailerLog::createMailerLog();
|
||||||
|
MailerLog::resumeSending();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MailerLog::processError($operation = 'send', $error = 'email rejected');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
$systemInfoData = $this->diContainer->get(SystemReportCollector::class)->getData();
|
||||||
|
$subjectField = $systemInfoData['Sending queue status'];
|
||||||
|
verify($subjectField)->stringContainsString('Started at: ' . date('Y-m-d')); // ignoring time segment
|
||||||
|
verify($subjectField)->stringContainsString('Retry attempts: 1');
|
||||||
|
verify($subjectField)->stringContainsString("Last seen error: $error ($operation)"); // @phpstan-ignore-line
|
||||||
|
|
||||||
|
MailerLog::pauseSending($mailerLog);
|
||||||
|
$systemInfoData = $this->diContainer->get(SystemReportCollector::class)->getData();
|
||||||
|
$subjectField = $systemInfoData['Sending queue status'];
|
||||||
|
verify($subjectField)->stringContainsString('Status: ' . MailerLog::STATUS_PAUSED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user