public static function submitData($limit = 5) { if (!Catalog::isOn()) { return '\\' . __METHOD__ . '(5);'; } $ids = array(); $rows = array(); $r = static::getList(array('order' => array('ID' => 'ASC'), 'limit' => $limit)); while ($row = $r->fetch()) { $rows[] = array('type' => $row['TYPE'], 'data' => $row['DATA']); $ids[] = $row['ID']; } if (!empty($rows)) { // get queue size $totalCount = static::getCount(); $queueSize = $totalCount > $limit ? $totalCount - $limit : 0; // send data $data = \http_build_query(array('op' => 'e', 'aid' => Counter::getAccountId(), 'ad[cd][value]' => base64_encode(json_encode($rows)), 'ad[cd][queue]' => $queueSize)); if (strlen($data) > 30000) { if ($limit > 1) { return '\\' . __METHOD__ . '(' . max(1, $limit - 1) . ');'; } } $f = fsockopen('bitrix.info', 80, $errno, $errstr, 3); if ($f) { $out = "POST /bx_stat HTTP/1.1\r\n"; $out .= "Host: bitrix.info\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Content-length: " . strlen($data) . "\r\n"; $out .= "User-Agent: Bitrix Stats Counter\r\n"; $out .= "Connection: Close\r\n"; $out .= "\r\n"; $out .= $data . "\r\n\r\n"; fwrite($f, $out); $response = ''; while (!feof($f)) { $response .= fgets($f, 128); } fclose($f); // delete rows if service received data if (strpos($response, 'uid')) { foreach ($ids as $id) { static::delete($id); } } } } return '\\' . __METHOD__ . '(5);'; }
echo Loc::getMessage("MAIN_SITE_SPEED_NOTES"); echo EndNote(); ?> </div> </div> <script type="text/javascript"> (function() { "use strict"; var siteSpeed = new BX.Main.SiteSpeed("<?php echo CUtil::JSEscape(Analytics\Counter::getPrivateKey()); ?> ", "<?php echo CUtil::JSEscape(Analytics\Counter::getAccountId()); ?> "); BX.ready(function() { BX.bind(BX("site-speed-domains"), "change", drawStatForCurrentHost); drawStatForCurrentHost(); }); function drawStat(host) { var lastHitsData = null; var histoLoaded = false; var graphLoaded = false; siteSpeed.getHistoData(
protected function getServiceRequestParamsByType($type) { $a = array('uid' => $_COOKIE['BX_USER_ID'], 'aid' => \Bitrix\Main\Analytics\Counter::getAccountId(), 'count' => $this->arParams['PAGE_ELEMENT_COUNT'] + 10); // random choices if ($type == 'any_similar') { $possible = array('similar_sell', 'similar_view', 'similar'); $type = $possible[array_rand($possible)]; } elseif ($type == 'any_personal') { $possible = array('bestsell', 'personal'); $type = $possible[array_rand($possible)]; } elseif ($type == 'any') { $possible = array('similar_sell', 'similar_view', 'similar', 'bestsell', 'personal'); $type = $possible[array_rand($possible)]; } // configure if ($type == 'bestsell') { $a['op'] = 'sim_domain_items'; $a['type'] = 'order'; $a['domain'] = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost(); } elseif ($type == 'personal') { $a['op'] = 'recommend'; } elseif ($type == 'similar_sell') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; $a['type'] = 'order'; } elseif ($type == 'similar_view') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; $a['type'] = 'view'; } elseif ($type == 'similar') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; } else { // unkonwn type } // get iblocks $iblocks = array(); if (!empty($this->arParams['IBLOCK_ID'])) { $iblocks = array($this->arParams['IBLOCK_ID']); } else { $iblockList = array(); /* catalog */ $iblockIterator = \Bitrix\Catalog\CatalogIblockTable::getList(array('select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID'))); while ($iblock = $iblockIterator->fetch()) { $iblock['IBLOCK_ID'] = (int) $iblock['IBLOCK_ID']; $iblock['PRODUCT_IBLOCK_ID'] = (int) $iblock['PRODUCT_IBLOCK_ID']; $iblockList[$iblock['IBLOCK_ID']] = $iblock['IBLOCK_ID']; if ($iblock['PRODUCT_IBLOCK_ID'] > 0) { $iblockList[$iblock['PRODUCT_IBLOCK_ID']] = $iblock['PRODUCT_IBLOCK_ID']; } } /* iblock */ $iblockIterator = \Bitrix\Iblock\IblockSiteTable::getList(array('select' => array('IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => $iblockList, '=SITE_ID' => $this->getSiteId()))); while ($iblock = $iblockIterator->fetch()) { $iblocks[] = $iblock['IBLOCK_ID']; } } $a['ib'] = join('.', $iblocks); return $a; }
public static function submitData($limit = 50) { if (!Catalog::isOn()) { return '\\' . __METHOD__ . '();'; } $rows = array(); $r = static::getList(array('order' => array('ID' => 'ASC'), 'limit' => $limit)); while ($row = $r->fetch()) { $rows[$row['ID']] = array('type' => $row['TYPE'], 'data' => $row['DATA']); } if (!empty($rows)) { // get queue size $totalCount = static::getCount(); $queueSize = $totalCount > $limit ? $totalCount - $limit : 0; // set limit $dataSizeLimit = 45000; // make an optimal dataset $dataSize = strlen(base64_encode(json_encode(array_values($rows)))); // records to delete $toDelete = array(); if ($dataSize > $dataSizeLimit) { $reducedRows = array(); foreach ($rows as $id => $row) { $rowSize = strlen(base64_encode(json_encode(array_values($row)))); $reducedDataSize = strlen(base64_encode(json_encode(array_values($reducedRows)))); if ($rowSize > $dataSizeLimit) { // abnormally big row, delete it $toDelete[] = $id; } elseif (!empty($reducedRows) && $reducedDataSize + $rowSize > $dataSizeLimit) { // it's enough break; } else { $reducedRows[$id] = $row; } } $rows = $reducedRows; } if (!empty($rows)) { // if there are still some data, send it $data = \http_build_query(array('op' => 'e', 'aid' => Counter::getAccountId(), 'ad[cd][value]' => base64_encode(json_encode(array_values($rows))), 'ad[cd][queue]' => $queueSize)); $f = fsockopen('bitrix.info', 80, $errno, $errstr, 3); if ($f) { $out = "POST /bx_stat HTTP/1.1\r\n"; $out .= "Host: bitrix.info\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Content-length: " . strlen($data) . "\r\n"; $out .= "User-Agent: Bitrix Stats Counter\r\n"; $out .= "Connection: Close\r\n"; $out .= "\r\n"; $out .= $data . "\r\n\r\n"; fwrite($f, $out); $response = ''; while (!feof($f)) { $response .= fgets($f, 128); } fclose($f); // delete rows if service received data if (strpos($response, '200 OK')) { $toDelete = array_merge($toDelete, array_keys($rows)); } } } // delete abnormally big and sent rows foreach ($toDelete as $id) { static::delete($id); } } return '\\' . __METHOD__ . '();'; }
protected function getServiceRequestParamsByType($type) { $a = array('uid' => $_COOKIE['BX_USER_ID'], 'aid' => \Bitrix\Main\Analytics\Counter::getAccountId(), 'count' => $this->arParams['PAGE_ELEMENT_COUNT'] + 10); // random choices if ($type == 'any_similar') { $possible = array('similar_sell', 'similar_view', 'similar'); $type = $possible[array_rand($possible)]; } elseif ($type == 'any_personal') { $possible = array('bestsell', 'personal'); $type = $possible[array_rand($possible)]; } elseif ($type == 'any') { $possible = array('similar_sell', 'similar_view', 'similar', 'bestsell', 'personal'); $type = $possible[array_rand($possible)]; } // configure if ($type == 'bestsell') { $a['op'] = 'sim_domain_items'; $a['type'] = 'order'; $a['domain'] = Bitrix\Main\Context::getCurrent()->getServer()->getHttpHost(); } elseif ($type == 'personal') { $a['op'] = 'recommend'; } elseif ($type == 'similar_sell') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; $a['type'] = 'order'; } elseif ($type == 'similar_view') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; $a['type'] = 'view'; } elseif ($type == 'similar') { $a['op'] = 'simitems'; $a['eid'] = $this->arParams['ID']; } else { // unkonwn type } return $a; }