/** * @see BaseJob::run() */ public function run() { $batchSize = $this->resolveBatchSize(); $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $batchSize); foreach ($campaignItemsToProcess as $campaignItem) { try { $this->processCampaignItemInQueue($campaignItem); } catch (NotFoundException $e) { return $campaignItem->delete(); } catch (NotSupportedException $e) { $this->errorMessage = $e->getMessage(); return false; } } return true; }
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() { $batchSize = $this->resolveBatchSize(); $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $batchSize); $startingMemoryUsage = memory_get_usage(); $modelsProcessedCount = 0; foreach ($campaignItemsToProcess as $campaignItem) { try { $this->processCampaignItemInQueue($campaignItem); } catch (NotFoundException $e) { return $campaignItem->delete(); } catch (NotSupportedException $e) { $this->errorMessage = $e->getMessage(); return false; } $this->runGarbageCollection($campaignItem); $modelsProcessedCount++; } $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage); return true; }
/** * @depends testGetByProcessed */ public function testGetByProcessedAndStatusAndSendOnDateTime() { CampaignItem::deleteAll(); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 02'); $this->assertNotNull($marketingList); $campaignTodayActive = CampaignTestHelper::createCampaign('campaign Today Active', 'subject Today Active', 'text Today Active', 'html Today Active', null, null, null, Campaign::STATUS_ACTIVE, null, null, $marketingList); $this->assertNotNull($campaignTodayActive); $campaignTodayPaused = CampaignTestHelper::createCampaign('campaign Today Paused', 'subject Today Paused', 'text Today Paused', 'html Today Paused', null, null, null, Campaign::STATUS_PAUSED, null, null, $marketingList); $this->assertNotNull($campaignTodayPaused); $this->assertNotNull($campaignTodayActive); $tenDaysFromNowTimestamp = time() + 60 * 60 * 24 * 10; $tenDaysFromNowDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime($tenDaysFromNowTimestamp); $campaignTenDaysFromNowActive = CampaignTestHelper::createCampaign('campaign Ten Days Active', 'subject Ten Days Active', 'text Ten Days Active', 'html Ten Days Active', null, null, null, Campaign::STATUS_ACTIVE, $tenDaysFromNowDateTime, null, $marketingList); $this->assertNotNull($campaignTenDaysFromNowActive); $campaignTenDaysFromNowPaused = CampaignTestHelper::createCampaign('campaign Ten Days Paused', 'subject Ten Days Paused', 'text Ten Days Paused', 'html Ten Days Paused', null, null, null, Campaign::STATUS_PAUSED, $tenDaysFromNowDateTime, null, $marketingList); $this->assertNotNull($campaignTenDaysFromNowPaused); $campaignsArray = array($campaignTodayActive, $campaignTodayPaused, $campaignTenDaysFromNowActive, $campaignTenDaysFromNowPaused); for ($i = 0; $i < 20; $i++) { $contact = ContactTestHelper::createContactByNameForOwner('contact ' . $i, Yii::app()->user->userModel); $this->assertNotNull($contact); if ($i % 3) { $processed = 1; } else { $processed = 0; } $campaign = $campaignsArray[$i % 4]; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign); $this->assertNotNull($campaignItem); } $tenDaysFromNowTimestamp += 100; // incrementing it a bit so the records we just created show up. $campaignItems = CampaignItem::getAll(); $this->assertNotEmpty($campaignItems); $this->assertCount(20, $campaignItems); $campaignTodayActiveProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_ACTIVE); $this->assertNotEmpty($campaignTodayActiveProcessed); $this->assertCount(3, $campaignTodayActiveProcessed); $campaignTodayActiveNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_ACTIVE); $this->assertNotEmpty($campaignTodayActiveNotProcessed); $this->assertCount(2, $campaignTodayActiveNotProcessed); $campaignTodayPausedProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_PAUSED); $this->assertNotEmpty($campaignTodayPausedProcessed); $this->assertCount(4, $campaignTodayPausedProcessed); $campaignTodayPausedNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PAUSED); $this->assertNotEmpty($campaignTodayPausedNotProcessed); $this->assertCount(1, $campaignTodayPausedNotProcessed); $campaignTenDaysFromNowActiveProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_ACTIVE, $tenDaysFromNowTimestamp); $this->assertNotEmpty($campaignTenDaysFromNowActiveProcessed); $this->assertCount(6, $campaignTenDaysFromNowActiveProcessed); $campaignTenDaysFromNowActiveNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_ACTIVE, $tenDaysFromNowTimestamp); $this->assertNotEmpty($campaignTenDaysFromNowActiveNotProcessed); $this->assertCount(4, $campaignTenDaysFromNowActiveNotProcessed); $campaignTenDaysFromNowPausedProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_PAUSED, $tenDaysFromNowTimestamp); $this->assertNotEmpty($campaignTenDaysFromNowPausedProcessed); $this->assertCount(7, $campaignTenDaysFromNowPausedProcessed); $campaignTenDaysFromNowPausedNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PAUSED, $tenDaysFromNowTimestamp); $this->assertNotEmpty($campaignTenDaysFromNowPausedNotProcessed); $this->assertCount(3, $campaignTenDaysFromNowPausedNotProcessed); }