public function executeImpl($partner_id, $subp_id, $puser_id, $partner_prefix, $puser_kuser) { $obj_type = $this->getPM("obj_type"); $obj_id = $this->getPM("obj_id"); $command = $this->getPM("command"); $value = $this->getP("value"); $extra_info = $this->getP("extra_info"); if ($obj_type == "entry") { $entry = entryPeer::retrieveByPK($obj_id); if ($command == "view") { PartnerActivity::incrementActivity($partner_id, PartnerActivity::PARTNER_ACTIVITY_KDP, PartnerActivity::PARTNER_SUB_ACTIVITY_KDP_VIEWS); myStatisticsMgr::incEntryViews($entry); } elseif ($command == "play") { PartnerActivity::incrementActivity($partner_id, PartnerActivity::PARTNER_ACTIVITY_KDP, PartnerActivity::PARTNER_SUB_ACTIVITY_KDP_PLAYS); myStatisticsMgr::incEntryPlays($entry); } } elseif ($obj_type == "kshow") { $kshow = kshowPeer::retrieveByPK($obj_id); if ($command == "view") { PartnerActivity::incrementActivity($partner_id, PartnerActivity::PARTNER_ACTIVITY_KDP, PartnerActivity::PARTNER_SUB_ACTIVITY_KDP_VIEWS); myStatisticsMgr::incKshowViews($kshow); } elseif ($command == "play") { PartnerActivity::incrementActivity($partner_id, PartnerActivity::PARTNER_ACTIVITY_KDP, PartnerActivity::PARTNER_SUB_ACTIVITY_KDP_PLAYS); myStatisticsMgr::incKshowPlays($kshow); } } $this->addMsg("collectedStats", "{$obj_type}, {$obj_id}, {$command}, {$value}, {$extra_info}"); }
/** * Adds an object to the instance pool. * * Propel keeps cached copies of objects in an instance pool when they are retrieved * from the database. In some cases -- especially when you override doSelect*() * methods in your stub classes -- you may need to explicitly add objects * to the cache in order to ensure that the same objects are always returned by doSelect*() * and retrieveByPK*() calls. * * @param PartnerActivity $value A PartnerActivity object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ public static function addInstanceToPool(PartnerActivity $obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if ($key === null) { $key = (string) $obj->getId(); } // if key === null self::$instances[$key] = $obj; } }
unset($entries); entryPeer::clearInstancePool(); fprintf($stderr, "{$i}\r"); } $connection = Propel::getConnection(); foreach ($stats as $partner_id => $dates) { foreach ($dates as $date => $pstats) { /** * we are deleting entries for a specific partner on a specific date. * * if we run twice on the same date, this way we only re-insert partners found in this run * and not in the first run. */ $query = "DELETE FROM " . PartnerActivityPeer::TABLE_NAME . " WHERE " . PartnerActivityPeer::ACTIVITY . "=" . PartnerActivity::PARTNER_ACTIVITY_STORAGE . " AND " . PartnerActivityPeer::PARTNER_ID . "=" . $partner_id . " AND " . PartnerActivityPeer::ACTIVITY_DATE . "='" . $date . "'"; $connection->exec($query); //print "$partner_id $date ".$pstats["size"]." ".$pstats["count"]."\n"; // output partner ID and date, print "{$partner_id} {$date} \n"; PartnerActivity::incrementActivity($partner_id, PartnerActivity::PARTNER_ACTIVITY_STORAGE, PartnerActivity::PARTNER_SUB_ACTIVITY_STORAGE_SIZE, floor($pstats["size"] / 1024), $date); PartnerActivity::incrementActivity($partner_id, PartnerActivity::PARTNER_ACTIVITY_STORAGE, PartnerActivity::PARTNER_SUB_ACTIVITY_STORAGE_COUNT, $pstats["count"], $date); } } foreach ($kusers as $kuser_id => $size) { $kuser = kuserPeer::retrieveByPK($kuser_id); if ($kuser) { $kuser->setStorageSize($kuser->getStorageSize() + $size); $kuser->save(); } unset($kuser); //echo 'kuser '.$kuser_id.' has total daily size of '.$size.PHP_EOL; }
public function doMonthlyAggregation($date) { // set the dates $dateParts = explode('-', $date); $currentDate = $dateParts; $currentDate[2] = $currentDate[2] - 3; if ($currentDate[2] <= 0) { $currentDate[1] = $currentDate[1] - 1; if ($currentDate[1] == 0) { $currentDate[1] = 12; $currentDate[0] = $currentDate[0] - 1; } // if $currentDate[2] before reduction = 3, $currentDate[2] after reduction = 0 // if $currentDate[2] = 0 and last_day_for_month return 30, $currentDate[2] = 30 // if $currentDate[2] before reduction = 2, $currentDate[2] after reduction = -1 // if $currentDate[2] = -1 and last_day_for_month return 30, $currentDate[2] = 30 + (-1) = 29 $currentDate[2] = $this->last_day_for_month($currentDate) + $currentDate[2]; } if ($currentDate[1] < 10 && strlen($currentDate[1]) == 1) { $currentDate[1] = '0' . $currentDate[1]; } if ($currentDate[2] < 10 && strlen($currentDate[2]) == 1) { $currentDate[2] = '0' . $currentDate[2]; } $firstOfMonth = $currentDate[0] . '-' . $currentDate[1] . '-01'; $currentDate = implode('-', $currentDate); KalturaLog::debug("calculating monthly agg. for date {$currentDate}"); // set start points $partners_exists = true; $start_pos = 0; $bulk_size = 500; // loop partners while ($partners_exists) { // pull bulk of partners $c = new Criteria(); $c->addAnd(PartnerPeer::CREATED_AT, $currentDate, Criteria::LESS_EQUAL); $c->setOffset($start_pos); $c->setLimit($bulk_size); $partners = PartnerPeer::doSelect($c); if (!$partners) { KalturaLog::debug("No more partners. offset: {$start_pos} , limit: {$bulk_size} ."); // set flag to exit while loop $partners_exists = false; } else { KalturaLog::debug("Looping " . ($start_pos + $bulk_size - 1) . " partners, offset: {$start_pos} ."); // loop bulk of partners foreach ($partners as $partner) { /* if ($partner->getId() != 593 && $partner->getId() != 395 && $partner->getId() != 387 ) continue; KalturaLog::debug("testing... not skiping partner ".$partner->getId()); */ // get row from partner_activity where date is 1st of current month and type is 6 $partnerActivityCriteria = new Criteria(); $partnerActivityCriteria->addAnd(PartnerActivityPeer::ACTIVITY_DATE, $firstOfMonth); $partnerActivityCriteria->addAnd(PartnerActivityPeer::ACTIVITY, PartnerActivity::PARTNER_ACTIVITY_MONTHLY_AGGREGATION); $partnerActivityCriteria->addAnd(PartnerActivityPeer::PARTNER_ID, $partner->getId()); $activityTotal = PartnerActivityPeer::doSelect($partnerActivityCriteria); if (count($activityTotal) > 1) { KalturaLog::debug("loaded more than one monthly aggregation row for partner. something went wrong. partner " . $partner->getID()); } elseif (count($activityTotal) == 0 || !$activityTotal) { // no rows for this month, either today is 1st of month or new partner. adding row for partner $partnerActivity = new PartnerActivity(); $partnerActivity->setActivity(PartnerActivity::PARTNER_ACTIVITY_MONTHLY_AGGREGATION); $partnerActivity->setPartnerId($partner->getId()); $partnerActivity->setActivityDate($firstOfMonth); $storageTotal = $this->getStorageAggregationFor($partner->getId(), $currentDate); $storageAddition = $storageTotal / date('t', strtotime($currentDate)); $partnerActivity->setAmount1($storageAddition); $partnerActivity->setAmount2($this->getTrafficFor($partner->getId(), $currentDate)); $total_amount = $partnerActivity->getAmount1() * 1024 + $partnerActivity->getAmount2(); $partnerActivity->setAmount($total_amount); $partnerActivity->save(); } else { $currentStorage = $activityTotal[0]->getAmount1(); $storageTotal = $this->getStorageAggregationFor($partner->getId(), $currentDate); $storageAddition = $storageTotal / date('t', strtotime($currentDate)); $activityTotal[0]->setAmount1($currentStorage + $storageAddition); $currentTraffic = $activityTotal[0]->getAmount2(); $trafficAddition = $this->getTrafficFor($partner->getId(), $currentDate); $activityTotal[0]->setAmount2($currentTraffic + $trafficAddition); // storage is saved in MB, traffic is saved in KB, normalizing storage for correct sum result $total_amount = $activityTotal[0]->getAmount1() * 1024 + $activityTotal[0]->getAmount2(); $activityTotal[0]->setAmount($total_amount); $activityTotal[0]->save(); } unset($partnerActivityCriteria); unset($activityTotal); } } unset($partners); $start_pos += $bulk_size; } }
/** * Adds an object to the instance pool. * * Propel keeps cached copies of objects in an instance pool when they are retrieved * from the database. In some cases -- especially when you override doSelect*() * methods in your stub classes -- you may need to explicitly add objects * to the cache in order to ensure that the same objects are always returned by doSelect*() * and retrieveByPK*() calls. * * @param PartnerActivity $value A PartnerActivity object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ public static function addInstanceToPool(PartnerActivity $obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if ($key === null) { $key = (string) $obj->getId(); } if (isset(self::$instances[$key]) || count(self::$instances) < kConf::get('max_num_instances_in_pool')) { self::$instances[$key] = $obj; kMemoryManager::registerPeer('PartnerActivityPeer'); } } }