- Модуль: abtest
- Путь к файлу: ~/bitrix/modules/abtest/lib/adminhelper.php
- Класс: BitrixABTestAdminHelper
- Вызов: AdminHelper::getSiteCapacity
static function getSiteCapacity($id)
{
$cache = new CPHPCache();
if ($cache->initCache(time()-strtotime('today'), 'abtest_site_capacity', '/abtest'))
{
$capacity = $cache->getVars();
}
else if (Loader::includeModule('conversion'))
{
if ($conversionRates = ConversionRateManager::getTypes(array('ACTIVE' => true)))
{
$baseRate = array_slice($conversionRates, 0, 1, true);
$reportContext = new ConversionReportContext;
$from = new DateTime('first day of last month');
$to = new DateTime('today');
$capacity = array();
$res = BitrixMainSiteTable::getList();
while ($site = $res->fetch())
{
$lid = $site['LID'];
$reportContext->setAttribute('conversion_site', $lid);
$rateData = reset($reportContext->getRatesDeprecated(
$baseRate, array(
'>=DAY' => TypeDate::createFromPhp($from),
'<=DAY' => TypeDate::createFromPhp($to)
), null
));
$reportContext->unsetAttribute('conversion_site', $lid);
$rate = $rateData['RATE'];
$hits = $rateData['DENOMINATOR'];
$daily = floor($hits / (date_diff($from, $to)->format('%a')+1));
$min = $rate > 0 && $rate < 1 ? ceil(16 * (1 / $rate - 1) / pow(MIN_EFFECT, 2)) : 0;
$est = $daily ? $min / ($daily / 2) : 0;
$capacity[$lid] = array(
'daily' => $daily,
'min' => $min,
'est' => $est
);
}
$cache->startDataCache(strtotime('tomorrow')-time());
$cache->endDataCache($capacity);
}
}
$result = array();
foreach ((array) $id as $lid)
$result[$lid] = isset($capacity[$lid]) ? $capacity[$lid] : array('min' => 0, 'est' => 0);
return is_array($id) ? $result : reset($result);
}