• Модуль: 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);
}