Expand System Info report with sending queue status

[MAILPOET-6378]
This commit is contained in:
Mustapha Hadid
2024-12-06 21:19:51 +03:00
committed by Aschepikov
parent 06532320b5
commit 0d1e141e2f
2 changed files with 40 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ namespace MailPoet\SystemReport;
use MailPoet\Cron\CronHelper;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Mailer\MailerLog;
use MailPoet\Router\Endpoints\CronDaemon;
use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController;
@@ -76,6 +77,9 @@ class SystemReportCollector {
$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)
return [
'PHP version' => PHP_VERSION,
@@ -127,10 +131,23 @@ class SystemReportCollector {
'Total number of subscribers' => $this->subscribersFeature->getSubscribersCount(),
'Plugin installed at' => $this->settings->get('installed_at'),
'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) {
if (empty($fields)) {
return '';
}
return implode(' - ', array_map(function ($key, $value) {
return $key . ': ' . $value;
}, array_keys($fields), array_values($fields)));

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Test\SystemReport;
use MailPoet\Cron\CronHelper;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\MailerLog;
use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController;
use MailPoet\SystemReport\SystemReportCollector;
@@ -214,4 +215,26 @@ class SystemReportCollectorTest extends \MailPoetTest {
verify($subjectField)->stringContainsString('Last run end: Unknown');
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);
}
}