Нема описа

Daemon.php 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace MailPoet\Cron;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Cron\Workers\WorkersFactory;
  5. class Daemon {
  6. public $timer;
  7. /** @var CronHelper */
  8. private $cronHelper;
  9. /** @var CronWorkerRunner */
  10. private $cronWorkerRunner;
  11. /** @var WorkersFactory */
  12. private $workersFactory;
  13. public function __construct(
  14. CronHelper $cronHelper,
  15. CronWorkerRunner $cronWorkerRunner,
  16. WorkersFactory $workersFactory
  17. ) {
  18. $this->timer = microtime(true);
  19. $this->workersFactory = $workersFactory;
  20. $this->cronWorkerRunner = $cronWorkerRunner;
  21. $this->cronHelper = $cronHelper;
  22. }
  23. public function run($settingsDaemonData) {
  24. $settingsDaemonData['run_started_at'] = time();
  25. $this->cronHelper->saveDaemon($settingsDaemonData);
  26. $errors = [];
  27. foreach ($this->getWorkers() as $worker) {
  28. try {
  29. if ($worker instanceof CronWorkerInterface) {
  30. $this->cronWorkerRunner->run($worker);
  31. } else {
  32. $worker->process($this->timer); // BC for workers not implementing CronWorkerInterface
  33. }
  34. } catch (\Exception $e) {
  35. $workerClassNameParts = explode('\\', get_class($worker));
  36. $errors[] = [
  37. 'worker' => end($workerClassNameParts),
  38. 'message' => $e->getMessage(),
  39. ];
  40. }
  41. }
  42. if (!empty($errors)) {
  43. $this->cronHelper->saveDaemonLastError($errors);
  44. }
  45. // Log successful execution
  46. $this->cronHelper->saveDaemonRunCompleted(time());
  47. }
  48. private function getWorkers() {
  49. yield $this->workersFactory->createMigrationWorker();
  50. yield $this->workersFactory->createStatsNotificationsWorker(); // not CronWorkerInterface compatible
  51. yield $this->workersFactory->createScheduleWorker(); // not CronWorkerInterface compatible
  52. yield $this->workersFactory->createQueueWorker(); // not CronWorkerInterface compatible
  53. yield $this->workersFactory->createSendingServiceKeyCheckWorker();
  54. yield $this->workersFactory->createPremiumKeyCheckWorker();
  55. yield $this->workersFactory->createBounceWorker();
  56. yield $this->workersFactory->createExportFilesCleanupWorker();
  57. yield $this->workersFactory->createBeamerkWorker();
  58. yield $this->workersFactory->createInactiveSubscribersWorker();
  59. yield $this->workersFactory->createUnsubscribeTokensWorker();
  60. yield $this->workersFactory->createWooCommerceSyncWorker();
  61. yield $this->workersFactory->createAuthorizedSendingEmailsCheckWorker();
  62. yield $this->workersFactory->createWooCommercePastOrdersWorker();
  63. yield $this->workersFactory->createStatsNotificationsWorkerForAutomatedEmails();
  64. yield $this->workersFactory->createSubscriberLinkTokensWorker();
  65. yield $this->workersFactory->createSubscribersEngagementScoreWorker();
  66. yield $this->workersFactory->createSubscribersLastEngagementWorker();
  67. yield $this->workersFactory->createSubscribersCountCacheRecalculationWorker();
  68. }
  69. }