PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
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 2 months ago CliCommands 1 month ago Triggers 2 months ago Workers 2 days ago CronHelper.php 2 months ago CronTrigger.php 2 years ago CronWorkerInterface.php 3 years ago CronWorkerRunner.php 2 months ago CronWorkerScheduler.php 10 months ago Daemon.php 2 days ago DaemonActionSchedulerRunner.php 6 months ago DaemonHttpRunner.php 2 months ago Supervisor.php 3 years ago index.php 3 years ago
Daemon.php
130 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\Util\Helpers;
11 use MailPoetVendor\Doctrine\ORM\EntityManager;
12
13 class Daemon {
14 public $timer;
15
16 /** @var CronHelper */
17 private $cronHelper;
18
19 /** @var CronWorkerRunner */
20 private $cronWorkerRunner;
21
22 /** @var EntityManager */
23 private $entityManager;
24
25 /** @var WorkersFactory */
26 private $workersFactory;
27
28 /** @var LoggerFactory */
29 private $loggerFactory;
30
31 public function __construct(
32 CronHelper $cronHelper,
33 CronWorkerRunner $cronWorkerRunner,
34 EntityManager $entityManager,
35 WorkersFactory $workersFactory,
36 LoggerFactory $loggerFactory
37 ) {
38 $this->timer = microtime(true);
39 $this->workersFactory = $workersFactory;
40 $this->cronWorkerRunner = $cronWorkerRunner;
41 $this->entityManager = $entityManager;
42 $this->cronHelper = $cronHelper;
43 $this->loggerFactory = $loggerFactory;
44 }
45
46 public function run($settingsDaemonData) {
47 $settingsDaemonData['run_started_at'] = time();
48 $this->cronHelper->saveDaemon($settingsDaemonData);
49
50 $errors = [];
51 foreach ($this->getWorkers() as $worker) {
52 if (wp_is_maintenance_mode()) {
53 // stop execution when in maintenance mode
54 break;
55 }
56
57 try {
58 // Clear the entity manager memory for every cron run.
59 // This avoids using stale data and prevents memory leaks.
60 $this->entityManager->clear();
61
62 if ($worker instanceof CronWorkerInterface) {
63 $this->cronWorkerRunner->run($worker);
64 } else {
65 $worker->process($this->timer); // BC for workers not implementing CronWorkerInterface
66 }
67 } catch (\Exception $e) {
68 Helpers::mySqlGoneAwayExceptionHandler($e);
69
70 $workerClass = is_object($worker) ? get_class($worker) : '';
71 $workerClassNameParts = explode('\\', $workerClass);
72 $workerName = end($workerClassNameParts);
73 $errors[] = [
74 'worker' => $workerName,
75 'message' => $e->getMessage(),
76 ];
77
78 if ($e->getCode() === CronHelper::DAEMON_EXECUTION_LIMIT_REACHED) {
79 break;
80 }
81
82 $this->loggerFactory->getLogger(LoggerFactory::TOPIC_CRON)->error($e->getMessage(), ['error' => $e, 'worker' => $workerName]);
83 }
84 }
85
86 if (!empty($errors)) {
87 $this->cronHelper->saveDaemonLastError($errors);
88 }
89
90 // Log successful execution
91 $this->cronHelper->saveDaemonRunCompleted(time());
92 }
93
94 private function getWorkers() {
95 yield $this->workersFactory->createStatsNotificationsWorker(); // not CronWorkerInterface compatible
96 yield $this->workersFactory->createScheduleWorker(); // not CronWorkerInterface compatible
97 yield $this->workersFactory->createQueueWorker(); // not CronWorkerInterface compatible
98 yield $this->workersFactory->createSendingServiceKeyCheckWorker();
99 yield $this->workersFactory->createPremiumKeyCheckWorker();
100 yield $this->workersFactory->createSubscribersStatsReportWorker();
101 yield $this->workersFactory->createBounceWorker();
102 yield $this->workersFactory->createExportFilesCleanupWorker();
103 yield $this->workersFactory->createLogCleanupWorker();
104 yield $this->workersFactory->createSendingTaskSubscribersCleanupWorker();
105 yield $this->workersFactory->createBounceTaskSubscribersCleanupWorker();
106 yield $this->workersFactory->createSendingQueueBodyCleanupWorker();
107 yield $this->workersFactory->createInactiveSubscribersMaintenanceWorker();
108 yield $this->workersFactory->createUnconfirmedSubscribersCleanupWorker();
109 yield $this->workersFactory->createUnsubscribeTokensWorker();
110 yield $this->workersFactory->createWooCommerceSyncWorker();
111 yield $this->workersFactory->createAuthorizedSendingEmailsCheckWorker();
112 yield $this->workersFactory->createWooCommercePastOrdersWorker();
113 yield $this->workersFactory->createStatsNotificationsWorkerForAutomatedEmails();
114 yield $this->workersFactory->createSubscriberLinkTokensWorker();
115 yield $this->workersFactory->createSubscribersLastEngagementWorker();
116 yield $this->workersFactory->createSubscribersCountCacheRecalculationWorker();
117 yield $this->workersFactory->createReEngagementEmailsSchedulerWorker();
118 yield $this->workersFactory->createNewsletterTemplateThumbnailsWorker();
119 yield $this->workersFactory->createAbandonedCartWorker();
120 yield $this->workersFactory->createBackfillEngagementDataWorker();
121 yield $this->workersFactory->createSubscribersSegmentsCountSyncWorker();
122 yield $this->workersFactory->createMixpanelWorker();
123 yield $this->workersFactory->createTracksWorker();
124 yield $this->workersFactory->createStatisticsExportWorker();
125 yield $this->workersFactory->createBulkConfirmationEmailResendWorker();
126 yield $this->workersFactory->createSubscriberLimitNotificationWorker();
127 yield $this->workersFactory->createSubscribersEngagementScoreWorker();
128 }
129 }
130