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');
         }
     }
 }