protected function processRun() { parent::processRun(); $batchSize = $this->resolveBatchSize(); if ($batchSize != null) { $resolvedBatchSize = $batchSize + 1; } else { $resolvedBatchSize = null; } $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $resolvedBatchSize); $startingMemoryUsage = memory_get_usage(); $modelsProcessedCount = 0; $signalMarkCompletedJob = true; foreach ($campaignItemsToProcess as $campaignItem) { try { $this->processCampaignItemInQueue($campaignItem); } catch (NotFoundException $e) { //todo: handle if delete returns false. $campaignItem->delete(); } catch (NotSupportedException $e) { $this->errorMessage = $e->getMessage(); //todo: returning false if using job queueing will cause job to not run again. maybe do something different? return false; } $this->runGarbageCollection($campaignItem); $modelsProcessedCount++; if ($this->hasReachedMaximumProcessingCount($modelsProcessedCount, $batchSize)) { Yii::app()->jobQueue->add('CampaignQueueMessagesInOutbox', 5); $signalMarkCompletedJob = false; break; } if (!Yii::app()->performance->isMemoryUsageSafe()) { $this->addMaximumMemoryUsageReached(); Yii::app()->jobQueue->add('CampaignQueueMessagesInOutbox', 5); $signalMarkCompletedJob = false; break; } } $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage); if ($signalMarkCompletedJob) { Yii::app()->jobQueue->add('CampaignMarkCompleted', 5); } return true; }
protected function processRun() { parent::processRun(); $batchSize = $this->resolveBatchSize(); if ($batchSize != null) { $resolvedBatchSize = $batchSize + 1; } else { $resolvedBatchSize = null; } $autoresponderItemsToProcess = AutoresponderItem::getByProcessedAndProcessDateTime(0, time(), $resolvedBatchSize); $startingMemoryUsage = memory_get_usage(); $modelsProcessedCount = 0; foreach ($autoresponderItemsToProcess as $autoresponderItem) { try { $this->processAutoresponderItemInQueue($autoresponderItem); } catch (NotFoundException $e) { return $autoresponderItem->delete(); } catch (NotSupportedException $e) { $this->errorMessage = $e->getMessage(); return false; } $this->runGarbageCollection($autoresponderItem); $modelsProcessedCount++; if ($this->hasReachedMaximumProcessingCount($modelsProcessedCount, $batchSize)) { Yii::app()->jobQueue->add('AutoresponderQueueMessagesInOutbox', 5); break; } if (!Yii::app()->performance->isMemoryUsageSafe()) { $this->addMaximumMemoryUsageReached(); Yii::app()->jobQueue->add('AutoresponderQueueMessagesInOutbox', 5); break; } } $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage); return true; }