/** * Calculates the eCPM values for all campaigns in the priority levels specified * by ecpmCampaignLevels */ public function runAlgorithm() { $campaign_priorities = $this->getCampaignPriorityLevelsToProcess(); $aAgenciesIds = $this->oDal->getAllAgenciesIds(); foreach ($aAgenciesIds as $agencyId) { foreach ($campaign_priorities as $priority => $x) { $aCampaignsInfo = $this->oDal->getAllCampaignsInfoByAgencyIdAndPriority($agencyId, $priority); if (is_array($aCampaignsInfo) && !empty($aCampaignsInfo)) { $aCampaignsEcpms = array(); $aCampaignsDeliveries = $this->oDal->getAgencyPriorityCampaignsDeliveriesToDate($agencyId, $priority); foreach ($aCampaignsInfo as $campaignId => $aCampaign) { $aCampaignsEcpms[$campaignId] = OX_Util_Utils::getEcpm($aCampaign[self::IDX_REVENUE_TYPE], $aCampaign[self::IDX_REVENUE], $aCampaignsDeliveries[$campaignId]['sum_impressions'], $aCampaignsDeliveries[$campaignId]['sum_clicks'], $aCampaignsDeliveries[$campaignId]['sum_conversions'], $aCampaign[self::IDX_ACTIVATE], $aCampaign[self::IDX_EXPIRE]); } $this->oDal->updateCampaignsEcpms($aCampaignsEcpms); } } } }
function calculateEcpm() { if ($this->campaignid) { $oMaxDalMaintenance = new OA_Dal_Maintenance_Priority(); $result = $oMaxDalMaintenance->getCampaignDeliveryToDate($this->campaignid); $requestsToDate = $result[0]['sum_requests']; $impressionsToDate = $result[0]['sum_views']; $clicksToDate = $result[0]['sum_clicks']; $conversionsToDate = $result[0]['sum_conversions']; } else { $requestsToDate = $impressionsToDate = $clicksToDate = $conversionsToDate = 0; } return OX_Util_Utils::getEcpm($this->revenue_type, $this->revenue, $impressionsToDate, $clicksToDate, $conversionsToDate, $this->activate_time, $this->expire_time); }
$startDate = null; } if ($end) { $endDate = date('Y-m-d', strtotime($end)); } else { $endDate = null; } if (is_null($deliveryDataLoaded) && !empty($campaignid)) { $dalData_intermediate_ad = OA_Dal::factoryDAL('data_intermediate_ad'); $record = $dalData_intermediate_ad->getDeliveredByCampaign($campaignid); $data = $record->toArray(); $impressions = $data['impressions_delivered']; $clicks = $data['clicks_delivered']; $conversions = $data['conversions_delivered']; } $ecpm = OX_Util_Utils::getEcpm($revenue_type, $revenue, $impressions, $clicks, $conversions, $startDate, $endDate); echo OA_Admin_NumberFormat::formatNumber($ecpm, 4); exit; } //build campaign form //var_dump($campaign); $oComponent = null; if (isset($GLOBALS['_MAX']['CONF']['plugins']['openXThorium']) && $GLOBALS['_MAX']['CONF']['plugins']['openXThorium']) { $oComponent =& OX_Component::factory('admin', 'oxThorium', 'oxThorium'); } $campaignForm = buildCampaignForm($campaign, $oComponent); if ($campaignForm->isSubmitted() && $campaignForm->validate()) { //process submitted values $errors = processCampaignForm($campaignForm, $oComponent); if (!empty($errors)) { //need to redisplay page with general errors
/** * Calculates campaign eCPM based on the campaign history * * @param integer $campaignId Campaign ID * @param array $aCampaign Campaign information, see * OA_Dal_Maintenance_Priority::getCampaignsInfoByQuery * for info on its format * @return float Calculated campaign eCPM */ public function calculateCampaignEcpm($campaignId, $aCampaign) { return OX_Util_Utils::getEcpm($aCampaign[self::IDX_REVENUE_TYPE], $aCampaign[self::IDX_REVENUE], $this->aCampaignsDeliveries[$campaignId]['sum_impressions'], $this->aCampaignsDeliveries[$campaignId]['sum_clicks'], $this->aCampaignsDeliveries[$campaignId]['sum_conversions'], $aCampaign[self::IDX_ACTIVATE], $aCampaign[self::IDX_EXPIRE]); }
function testGetEcpm() { $revenue = 10; $clicks = 10; $conversions = 5; // Test each type with 0 impressions. $impressions = 0; // CPM $expected = 10; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPM, $revenue, $impressions); $this->assertEqual($expected, $result); // CPC // eCPM = default click ratio * revenue * 1000 $defaultClickRatio = null; $expected = 50; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPC, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio); $this->assertEqual($expected, $result); $defaultClickRatio = 0.05; $expected = 500; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPC, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio); $this->assertEqual($expected, $result); // CPA // eCPM = default conversion ratio * revenue * 1000 $defaultConversionRatio = null; $expected = 1; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPA, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio, $defaultConversionRatio); $this->assertEqual($expected, $result); $defaultConversionRatio = 0.01; $expected = 100; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPA, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio, $defaultConversionRatio); $this->assertEqual($expected, $result); // Tenancy // eCPM = 0. $expected = 0; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, '2009-01-01', '2009-01-14', $defaultClickRatio, $defaultConversionRatio); $this->assertEqual($expected, $result); // Test each type with some impressions $impressions = 100000; // CPM // eCPM = CPM $expected = 10; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPM, $revenue, $impressions); $this->assertEqual($expected, $result); // CPC // eCPM = revenue * clicks / impressions * 1000 $expected = 1; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPC, $revenue, $impressions, $clicks); $this->assertEqual($expected, $result); // CPA // eCPM = revenue * conversions / impressions * 1000 $expected = 0.5; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPA, $revenue, $impressions, $clicks, $conversions); $this->assertEqual($expected, $result); // Tenancy // eCPM = (revenue / totalDaysInCampaign) * daysInCampaignSoFar / impressions * 1000 $now = new Date(); $startDate = new Date($now); $endDate = new Date($now); $endDate->addSeconds(60 * 60 * 24 * 10); // 10 days in the future. $span = new Date_Span(); $span->setFromDateDiff($startDate, $endDate); $this->assertEqual(10, $span->toDays()); // Total revenue for tenancy. $revenue = 10000; $revenuePerDay = $revenue / $span->toDays(); $this->assertEqual(1000, $revenuePerDay); // Beginning of campaign (no imps served) $impressions = 0; $expected = 0; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, $startDate->getDate(DATE_FORMAT_ISO), $endDate->getDate(DATE_FORMAT_ISO)); $this->assertEqual($expected, $result); // Half way through campaign (40,000 imps served) $impressions = 40000; $startDate->subtractSeconds(60 * 60 * 24 * 5); // We are 5 days into the campaign. $endDate->subtractSeconds(60 * 60 * 24 * 5); $span->setFromDateDiff($startDate, $now); $this->assertEqual(5, $span->toDays()); $span->setFromDateDiff($endDate, $now); $this->assertEqual(5, $span->toDays()); // eCPM = (revenue / totalDaysInCampaign) * daysInCampaignSoFar / impressions * 1000 $expected = 125; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, $startDate->getDate(DATE_FORMAT_ISO), $endDate->getDate(DATE_FORMAT_ISO)); $this->assertEqual($expected, $result); // End of campaign (70,000 imps served) $impressions = 70000; $startDate->subtractSeconds(60 * 60 * 24 * 5); // We are 10 days into the campaign. $endDate->subtractSeconds(60 * 60 * 24 * 5); $span->setFromDateDiff($startDate, $now); $this->assertEqual(10, $span->toDays()); $expected = 142.857142857; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, $startDate->getDate(DATE_FORMAT_ISO), $endDate->getDate(DATE_FORMAT_ISO)); // Is this the correct margin? $this->assertWithinMargin($expected, $result, 0.0001, "Outside of margin"); // No dates given $expected = 0; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, null, null); $this->assertEqual($expected, $result); }