PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.37.0
MailPoet – Newsletters, Email Marketing, and Automation v5.37.0
5.37.0 5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Cron / Daemon.php
mailpoet / lib / Cron Last commit date
ActionScheduler 1 week ago CliCommands 2 months ago Triggers 3 months ago Workers 2 days ago CronHelper.php 3 months ago CronTrigger.php 2 years ago CronWorkerInterface.php 3 years ago CronWorkerRunner.php 3 months ago CronWorkerScheduler.php 11 months ago Daemon.php 2 days ago DaemonActionSchedulerRunner.php 1 week ago DaemonHttpRunner.php 3 months ago Supervisor.php 3 years ago index.php 3 years ago
Daemon.php
138 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Cron;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Cron\Workers\WorkersFactory;
9 use MailPoet\Logging\LoggerFactory;
10 use MailPoet\Mailer\SendingLimitReachedException;
11 use MailPoet\Util\Helpers;
12 use MailPoetVendor\Doctrine\ORM\EntityManager;
13
14 class Daemon {
15 public $timer;
16
17 /** @var CronHelper */
18 private $cronHelper;
19
20 /** @var CronWorkerRunner */
21 private $cronWorkerRunner;
22
23 /** @var EntityManager */
24 private $entityManager;
25
26 /** @var WorkersFactory */
27 private $workersFactory;
28
29 /** @var LoggerFactory */
30 private $loggerFactory;
31
32 public function __construct(
33 CronHelper $cronHelper,
34 CronWorkerRunner $cronWorkerRunner,
35 EntityManager $entityManager,
36 WorkersFactory $workersFactory,
37 LoggerFactory $loggerFactory
38 ) {
39 $this->timer = microtime(true);
40 $this->workersFactory = $workersFactory;
41 $this->cronWorkerRunner = $cronWorkerRunner;
42 $this->entityManager = $entityManager;
43 $this->cronHelper = $cronHelper;
44 $this->loggerFactory = $loggerFactory;
45 }
46
47 public function run($settingsDaemonData) {
48 $settingsDaemonData['run_started_at'] = time();
49 $this->cronHelper->saveDaemon($settingsDaemonData);
50
51 $errors = [];
52 foreach ($this->getWorkers() as $worker) {
53 if (wp_is_maintenance_mode()) {
54 // stop execution when in maintenance mode
55 break;
56 }
57
58 try {
59 // Clear the entity manager memory for every cron run.
60 // This avoids using stale data and prevents memory leaks.
61 $this->entityManager->clear();
62
63 if ($worker instanceof CronWorkerInterface) {
64 $this->cronWorkerRunner->run($worker);
65 } else {
66 $worker->process($this->timer); // BC for workers not implementing CronWorkerInterface
67 }
68 } catch (\Exception $e) {
69 Helpers::mySqlGoneAwayExceptionHandler($e);
70
71 $workerClass = is_object($worker) ? get_class($worker) : '';
72 $workerClassNameParts = explode('\\', $workerClass);
73 $workerName = end($workerClassNameParts);
74
75 // Expected sending state, not an error — sending resumes once the frequency interval passes.
76 if ($e instanceof SendingLimitReachedException) {
77 $this->loggerFactory->getLogger(LoggerFactory::TOPIC_CRON)->info($e->getMessage(), ['worker' => $workerName]);
78 continue;
79 }
80
81 $errors[] = [
82 'worker' => $workerName,
83 'message' => $e->getMessage(),
84 ];
85
86 if ($e->getCode() === CronHelper::DAEMON_EXECUTION_LIMIT_REACHED) {
87 break;
88 }
89
90 $this->loggerFactory->getLogger(LoggerFactory::TOPIC_CRON)->error($e->getMessage(), ['error' => $e, 'worker' => $workerName]);
91 }
92 }
93
94 if (!empty($errors)) {
95 $this->cronHelper->saveDaemonLastError($errors);
96 }
97
98 // Log successful execution
99 $this->cronHelper->saveDaemonRunCompleted(time());
100 }
101
102 private function getWorkers() {
103 yield $this->workersFactory->createStatsNotificationsWorker(); // not CronWorkerInterface compatible
104 yield $this->workersFactory->createScheduleWorker(); // not CronWorkerInterface compatible
105 yield $this->workersFactory->createQueueWorker(); // not CronWorkerInterface compatible
106 yield $this->workersFactory->createSendingServiceKeyCheckWorker();
107 yield $this->workersFactory->createPremiumKeyCheckWorker();
108 yield $this->workersFactory->createSubscribersStatsReportWorker();
109 yield $this->workersFactory->createBounceWorker();
110 yield $this->workersFactory->createExportFilesCleanupWorker();
111 yield $this->workersFactory->createLogCleanupWorker();
112 yield $this->workersFactory->createSendingTaskSubscribersCleanupWorker();
113 yield $this->workersFactory->createBounceTaskSubscribersCleanupWorker();
114 yield $this->workersFactory->createSendingQueueBodyCleanupWorker();
115 yield $this->workersFactory->createInactiveSubscribersMaintenanceWorker();
116 yield $this->workersFactory->createUnconfirmedSubscribersCleanupWorker();
117 yield $this->workersFactory->createUnsubscribeTokensWorker();
118 yield $this->workersFactory->createWooCommerceSyncWorker();
119 yield $this->workersFactory->createAuthorizedSendingEmailsCheckWorker();
120 yield $this->workersFactory->createWooCommercePastOrdersWorker();
121 yield $this->workersFactory->createStatsNotificationsWorkerForAutomatedEmails();
122 yield $this->workersFactory->createSubscriberLinkTokensWorker();
123 yield $this->workersFactory->createSubscribersLastEngagementWorker();
124 yield $this->workersFactory->createSubscribersCountCacheRecalculationWorker();
125 yield $this->workersFactory->createReEngagementEmailsSchedulerWorker();
126 yield $this->workersFactory->createNewsletterTemplateThumbnailsWorker();
127 yield $this->workersFactory->createAbandonedCartWorker();
128 yield $this->workersFactory->createBackfillEngagementDataWorker();
129 yield $this->workersFactory->createSubscribersSegmentsCountSyncWorker();
130 yield $this->workersFactory->createMixpanelWorker();
131 yield $this->workersFactory->createTracksWorker();
132 yield $this->workersFactory->createStatisticsExportWorker();
133 yield $this->workersFactory->createBulkConfirmationEmailResendWorker();
134 yield $this->workersFactory->createSubscriberLimitNotificationWorker();
135 yield $this->workersFactory->createSubscribersEngagementScoreWorker();
136 }
137 }
138