Log when processing the queue for corrupt newsletter

[MAILPOET-4983]
This commit is contained in:
Sam Najian
2023-02-21 17:27:41 +01:00
committed by Aschepikov
parent 976c374cb7
commit 93110826e7
5 changed files with 57 additions and 21 deletions

View File

@ -239,25 +239,32 @@ class SendingQueue {
// reschedule bounce task to run sooner, if needed // reschedule bounce task to run sooner, if needed
$this->reScheduleBounceTask(); $this->reScheduleBounceTask();
$queue = $this->processQueue( if ($newsletterEntity->getStatus() !== NewsletterEntity::STATUS_CORRUPT) {
$queue, $queue = $this->processQueue(
$_newsletter, $queue,
$foundSubscribers, $_newsletter,
$timer $foundSubscribers,
); $timer
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( );
'after queue chunk processing',
['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId]
);
if ($queue->status === ScheduledTaskEntity::STATUS_COMPLETED) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
'completed newsletter sending', 'after queue chunk processing',
['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId]
);
if ($queue->status === ScheduledTaskEntity::STATUS_COMPLETED) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
'completed newsletter sending',
['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId]
);
$this->newsletterTask->markNewsletterAsSent($newsletterEntity, $queue);
$this->statsNotificationsScheduler->schedule($newsletterEntity);
}
$this->enforceSendingAndExecutionLimits($timer);
} else {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->error(
'Can\'t send corrupt newsletter',
['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId] ['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId]
); );
$this->newsletterTask->markNewsletterAsSent($newsletterEntity, $queue);
$this->statsNotificationsScheduler->schedule($newsletterEntity);
} }
$this->enforceSendingAndExecutionLimits($timer);
} }
} }

View File

@ -3,6 +3,7 @@
namespace MailPoet\Newsletter\Renderer; namespace MailPoet\Newsletter\Renderer;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent;
use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock;
@ -36,18 +37,23 @@ class Preprocessor {
/*** @var NewslettersRepository */ /*** @var NewslettersRepository */
private $newslettersRepository; private $newslettersRepository;
/*** @var LoggerFactory */
private $loggerFactory;
public function __construct( public function __construct(
AbandonedCartContent $abandonedCartContent, AbandonedCartContent $abandonedCartContent,
AutomatedLatestContentBlock $automatedLatestContent, AutomatedLatestContentBlock $automatedLatestContent,
ContentPreprocessor $wooCommerceContentPreprocessor, ContentPreprocessor $wooCommerceContentPreprocessor,
CouponPreProcessor $couponPreProcessor, CouponPreProcessor $couponPreProcessor,
NewslettersRepository $newslettersRepository NewslettersRepository $newslettersRepository,
LoggerFactory $loggerFactory
) { ) {
$this->abandonedCartContent = $abandonedCartContent; $this->abandonedCartContent = $abandonedCartContent;
$this->automatedLatestContent = $automatedLatestContent; $this->automatedLatestContent = $automatedLatestContent;
$this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor; $this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor;
$this->couponPreProcessor = $couponPreProcessor; $this->couponPreProcessor = $couponPreProcessor;
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
$this->loggerFactory = $loggerFactory;
} }
/** /**
@ -67,7 +73,11 @@ class Preprocessor {
try { try {
$contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview); $contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview);
} catch (NewsletterProcessingException $e) { } catch (NewsletterProcessingException $e) {
$newsletter->setStatus(NewsletterEntity::STATUS_CORRUPT); $this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error(
$e->getMessage(),
['newsletter_id' => $newsletter->getId()]
);
$newsletter->setStatus(NewsletterEntity::STATUS_CORRUPT);
$this->newslettersRepository->persist($newsletter); $this->newslettersRepository->persist($newsletter);
$this->newslettersRepository->flush(); $this->newslettersRepository->flush();
} }

View File

@ -40,7 +40,7 @@ class CouponPreProcessor {
if (!$this->wcHelper->isWooCommerceActive()) { if (!$this->wcHelper->isWooCommerceActive()) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error( $this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error(
'Woocommerce is not active', ['WC Coupons', 'Process coupons'] 'Woocommerce is not active', ['WC Coupons', 'Process coupons', 'newsletter_id']
); );
return $blocks; return $blocks;
} }

View File

@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce\TransactionalEmails;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Config\ServicesChecker; use MailPoet\Config\ServicesChecker;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\Editor\LayoutHelper as L;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
@ -111,7 +112,8 @@ class RendererTest extends \MailPoetTest {
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock::class), $this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock::class),
$wooPreprocessor, $wooPreprocessor,
$this->diContainer->get(\MailPoet\WooCommerce\CouponPreProcessor::class), $this->diContainer->get(\MailPoet\WooCommerce\CouponPreProcessor::class),
$this->diContainer->get(NewslettersRepository::class) $this->diContainer->get(NewslettersRepository::class),
$this->diContainer->get(LoggerFactory::class)
), ),
$this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(\MailPoetVendor\CSS::class),
$this->diContainer->get(ServicesChecker::class), $this->diContainer->get(ServicesChecker::class),

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Newsletter;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent;
use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock;
@ -24,7 +25,15 @@ class PreprocessorTest extends \MailPoetUnitTest {
]); ]);
$wooPreprocessor = new TransactionalEmails\ContentPreprocessor($transactionalEmails); $wooPreprocessor = new TransactionalEmails\ContentPreprocessor($transactionalEmails);
$newsletterRepository = Stub::make(NewslettersRepository::class); $newsletterRepository = Stub::make(NewslettersRepository::class);
$preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor, $newsletterRepository); $loggerFactory = Stub::make(LoggerFactory::class);
$preprocessor = new Preprocessor(
$acc,
$alc,
$wooPreprocessor,
$couponPreProcessor,
$newsletterRepository,
$loggerFactory
);
expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceHeading']))->equals([[ expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceHeading']))->equals([[
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',
@ -53,7 +62,15 @@ class PreprocessorTest extends \MailPoetUnitTest {
$couponPreProcessor = Stub::make(CouponPreProcessor::class); $couponPreProcessor = Stub::make(CouponPreProcessor::class);
$wooPreprocessor = new TransactionalEmails\ContentPreprocessor(Stub::make(TransactionalEmails::class)); $wooPreprocessor = new TransactionalEmails\ContentPreprocessor(Stub::make(TransactionalEmails::class));
$newsletterRepository = Stub::make(NewslettersRepository::class); $newsletterRepository = Stub::make(NewslettersRepository::class);
$preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor, $newsletterRepository); $loggerFactory = Stub::make(LoggerFactory::class);
$preprocessor = new Preprocessor(
$acc,
$alc,
$wooPreprocessor,
$couponPreProcessor,
$newsletterRepository,
$loggerFactory
);
expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceContent']))->equals([[ expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceContent']))->equals([[
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',