PageRenderTime 26ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/main/admin/site_speed.php

https://gitlab.com/alexprowars/bitrix
PHP | 297 lines | 239 code | 53 blank | 5 comment | 15 complexity | 3e90da25d37fceb8640374e763001ab6 MD5 | raw file
  1. <?
  2. /**
  3. * @global CUser $USER
  4. * @global CMain $APPLICATION
  5. */
  6. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  7. require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/prolog.php");
  8. define("HELP_FILE", "settings/site_speed.php");
  9. use Bitrix\Main;
  10. use Bitrix\Main\Localization\Loc;
  11. use Bitrix\Main\Analytics;
  12. Loc::loadMessages(__FILE__);
  13. if (!$USER->CanDoOperation("view_other_settings") || !Analytics\SiteSpeed::isOn())
  14. {
  15. $APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));
  16. }
  17. CJSCore::Init(array("site_speed", "date"));
  18. $APPLICATION->SetAdditionalCSS("/bitrix/panel/main/site_speed.css");
  19. $APPLICATION->SetTitle(Loc::getMessage("MAIN_SITE_SPEED_TITLE"));
  20. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  21. // lang for external map js inside iframe
  22. $mapIframeLangKeys = array(
  23. "MAIN_SITE_SPEED_MAP_EXT_VALUE_1",
  24. "MAIN_SITE_SPEED_MAP_EXT_VALUE_2",
  25. "MAIN_SITE_SPEED_MAP_EXT_VDOTS_1",
  26. "MAIN_SITE_SPEED_MAP_EXT_VDOTS_2",
  27. "MAIN_SITE_SPEED_MAP_EXT_HITS_1",
  28. "MAIN_SITE_SPEED_MAP_EXT_HITS_2",
  29. "MAIN_SITE_SPEED_MAP_EXT_MARK_1",
  30. "MAIN_SITE_SPEED_MAP_EXT_MARK_2",
  31. "MAIN_SITE_SPEED_MAP_EXT_MARK_3",
  32. "MAIN_SITE_SPEED_MAP_EXT_MARK_4",
  33. "MAIN_SITE_SPEED_MAP_EXT_MARK_5",
  34. "MAIN_SITE_SPEED_MAP_EXT_HINT_SPEED",
  35. "MAIN_SITE_SPEED_MAP_EXT_HINT_COMPOSITE",
  36. "MAIN_SITE_SPEED_MAP_EXT_HINT_HITS"
  37. );
  38. $mapIframeLang = array();
  39. foreach ($mapIframeLangKeys as $key)
  40. {
  41. $mapIframeLang[$key] = Loc::getMessage($key);
  42. }
  43. ?>
  44. <div class="site-speed-page">
  45. <?
  46. $currentHost = preg_replace("/:(80|443)$/", "", $_SERVER["HTTP_HOST"]);
  47. $currentHost = htmlspecialcharsbx($currentHost);
  48. $currentHostTitle = htmlspecialcharsbx(\CBXPunycode::ToUnicode($currentHost, $errors));
  49. ?>
  50. <div class="site-speed-domains">
  51. <span class="site-speed-domains-label"><?=Loc::getMessage("MAIN_SITE_SPEED_DOMAINS_LABEL")?></span>
  52. <select class="site-speed-domains-select" id="site-speed-domains">
  53. <option value="<?=$currentHost?>"><?=$currentHostTitle?></option>
  54. </select>
  55. <span class="site-speed-loading" id="site-speed-loading"></span>
  56. <span class="site-speed-error" id="site-speed-error"></span>
  57. </div>
  58. <div class="site-speed-analytics" id="site-speed-analytics">
  59. <div class="site-speed-indicator-block" id="site-speed-indicator-block">
  60. <div class="site-speed-index">
  61. <span class="site-speed-index-label"><?=Loc::getMessage("MAIN_SITE_SPEED_TITLE")?>:</span>
  62. <span class="site-speed-index-value" id="site-speed-index"></span>
  63. </div>
  64. <div class="site-speed-indicator" id="indicator"></div>
  65. <div class="site-speed-stat">
  66. <div class="site-speed-stat-item">
  67. <span class="site-speed-stat-label"><?=Loc::getMessage("MAIN_SITE_SPEED_HITS_LABEL")?>:</span>
  68. <span class="site-speed-stat-value" id="site-speed-hits"></span>
  69. </div>
  70. <div class="site-speed-stat-item">
  71. <span class="site-speed-stat-label"><?=Loc::getMessage("MAIN_SITE_SPEED_PERIOD_LABEL")?>:</span>
  72. <span class="site-speed-stat-value" id="site-speed-date"></span>
  73. </div>
  74. <div class="site-speed-stat-item">
  75. <span class="site-speed-stat-label"><?=Loc::getMessage("MAIN_SITE_SPEED_COMPOSITE_HITS")?>:</span>
  76. <span class="site-speed-stat-value" id="site-speed-composite"></span>
  77. </div>
  78. </div>
  79. <div class="site-speed-explanation">
  80. <b><?=Loc::getMessage("MAIN_SITE_SPEED_TITLE")?></b> &mdash; <?=Loc::getMessage("MAIN_SITE_SPEED_TITLE_DESC")?>
  81. </div>
  82. <div class="site-speed-perf" id="site-speed-perf">
  83. <?
  84. if (\Bitrix\Main\ModuleManager::isModuleInstalled("perfmon")):
  85. $mark = (double)COption::GetOptionString("perfmon", "mark_php_page_rate", "");
  86. ?>
  87. <a href="/bitrix/admin/perfmon_panel.php?lang=<?=LANGUAGE_ID?>" class="site-speed-perf-label"><?=Loc::getMessage("MAIN_SITE_SPEED_PERF")?></a>:<span class="site-speed-perf-value"><?if ($mark > 0):?><?=$mark?><?else:?><?=Loc::getMessage("MAIN_SITE_SPEED_PERF_NO_RES")?><?endif?></span>
  88. <?endif?>
  89. <?
  90. $compositeStatus = \Bitrix\Main\Composite\Helper::isCompositeEnabled() ? Loc::getMessage("MAIN_SITE_SPEED_ENABLED") : Loc::getMessage("MAIN_SITE_SPEED_DISABLED");
  91. if (\Bitrix\Main\Composite\Engine::isSelfHostedPortal()):?>
  92. <span class="site-speed-perf-label"><?=Loc::getMessage("MAIN_SITE_SPEED_COMPOSITE_SITE")?></span>:<span class="site-speed-perf-value"><?=$compositeStatus?></span>
  93. <? else: ?>
  94. <a href="/bitrix/admin/composite.php?lang=<?=LANGUAGE_ID?>" class="site-speed-perf-label"><?=Loc::getMessage("MAIN_SITE_SPEED_COMPOSITE_SITE")?></a>:<span class="site-speed-perf-value"><?=$compositeStatus?></span>
  95. <? endif ?>
  96. <?
  97. if (\Bitrix\Main\Loader::includeModule("bitrixcloud")):
  98. $cdnStatus = CBitrixCloudCDN::IsActive() ? Loc::getMessage("MAIN_SITE_SPEED_ENABLED") : Loc::getMessage("MAIN_SITE_SPEED_DISABLED");
  99. ?>
  100. <a href="/bitrix/admin/bitrixcloud_cdn.php?lang=<?=LANGUAGE_ID?>" class="site-speed-perf-label"><?=Loc::getMessage("MAIN_SITE_SPEED_CDN")?></a>:<span class="site-speed-perf-value"><?=$cdnStatus?></span>
  101. <?endif?>
  102. </div>
  103. </div>
  104. <div class="site-speed-indicator-block">
  105. <h1 class="adm-title"><?=Loc::getMessage("MAIN_SITE_SPEED_MAP_TITLE")?></h1>
  106. <iframe id="site-speed-clients-map" scrolling="no" width="100%" height="400"
  107. style="overflow: hidden; padding: 0; margin: 0; border: 0px"
  108. marginheight="0" marginwidth="0" frameborder="0"
  109. name="<?=htmlspecialcharsbx(\Bitrix\Main\Web\Json::encode($mapIframeLang))?>"
  110. ></iframe>
  111. </div>
  112. <div class="site-speed-histogram-block" id="site-speed-histogram-block">
  113. <h1 class="adm-title"><?=Loc::getMessage("MAIN_SITE_SPEED_HISTO_TITLE")?></h1>
  114. <div class="site-speed-histogram" id="histogram"></div>
  115. </div>
  116. <div class="site-speed-graph-block" id="site-speed-graph-block">
  117. <h1 class="adm-title"><?=Loc::getMessage("MAIN_SITE_SPEED_GRAPH_TITLE")?></h1>
  118. <div class="site-speed-graph" id="graph"></div>
  119. </div>
  120. <?=BeginNote();?><?=Loc::getMessage("MAIN_SITE_SPEED_NOTES")?><?=EndNote();?>
  121. </div>
  122. </div>
  123. <script type="text/javascript">
  124. (function() {
  125. "use strict";
  126. var siteSpeed = new BX.Main.SiteSpeed("<?=CUtil::JSEscape(Analytics\Counter::getPrivateKey())?>", "<?=CUtil::JSEscape(Analytics\Counter::getAccountId())?>");
  127. BX.ready(function() {
  128. BX.bind(BX("site-speed-domains"), "change", drawStatForCurrentHost);
  129. drawStatForCurrentHost();
  130. });
  131. function drawStat(host)
  132. {
  133. var lastHitsData = null;
  134. var histoLoaded = false;
  135. var graphLoaded = false;
  136. siteSpeed.getHistoData(
  137. host,
  138. function(data) {
  139. fillDomains(data.domains, data.domains_utf8);
  140. if (data && data.result !== false)
  141. {
  142. var composite = BX.type.isNumber(data.compositeHits) ? data.compositeHits : 0;
  143. var hits = BX.type.isNumber(data.cnt) ? data.cnt : 0;
  144. var inverval = siteSpeed.getInverval(data["p50"]);
  145. BX("site-speed-index").innerHTML = inverval.title +
  146. " (" + BX.Main.SiteSpeed.formatMilliseconds(data["p50"]) +
  147. " <?=CUtil::JSEscape(Loc::getMessage("MAIN_SITE_SPEED_SECONDS"))?>)";
  148. BX("site-speed-hits").innerHTML = hits;
  149. BX("site-speed-composite").innerHTML = composite + " (" + (composite/hits * 100).toFixed(1)+ "%)";
  150. var startDate = BX.date.format("j F H:i", BX.date.getNewDate(data["firstHitTs"]));
  151. var endDate = BX.date.format("j F H:i", BX.date.getNewDate(data["lastHitTs"]));
  152. BX("site-speed-date").innerHTML = startDate + " - " + endDate;
  153. BX("site-speed-analytics").style.display = "block";
  154. BX("site-speed-loading").style.display = "none";
  155. siteSpeed.drawIndicator(data, "indicator");
  156. siteSpeed.drawHisto(data, "histogram");
  157. histoLoaded = true;
  158. drawGraph();
  159. }
  160. else
  161. {
  162. var error = "<?=CUtil::JSEscape(Loc::getMessage("MAIN_SITE_SPEED_DOMAIN_NOT_FOUND"))?>";
  163. if (BX.type.isArray(data.domains) && data.domains.length > 0)
  164. {
  165. error += " " + "<?=CUtil::JSEscape(Loc::getMessage("MAIN_SITE_SPEED_CHOOSE_DOMAIN"))?>"
  166. }
  167. showError(error);
  168. }
  169. },
  170. function() {
  171. showError("<?=CUtil::JSEscape(Loc::getMessage("MAIN_SITE_SPEED_CONNECTION_ERROR"))?>");
  172. }
  173. );
  174. siteSpeed.getLastHits(
  175. host,
  176. function(data) {
  177. lastHitsData = data;
  178. drawGraph();
  179. },
  180. function() {
  181. }
  182. );
  183. BX('site-speed-clients-map').src = "https://analytics.bitrix.info/cstats/v1_0/maps_client/index.php?"
  184. + "aid=<?=Analytics\Counter::getAccountId()?>"
  185. + "&aid_check=<?=Analytics\Counter::getPrivateKey()?>"
  186. + "&domain=" + host
  187. + "&hit_param=dom_int_time&mode=value";
  188. function drawGraph()
  189. {
  190. if (
  191. BX.type.isArray(lastHitsData) &&
  192. lastHitsData.length > 0 &&
  193. graphLoaded === false &&
  194. histoLoaded === true
  195. )
  196. {
  197. graphLoaded = true;
  198. BX("site-speed-graph-block").style.display = "block";
  199. siteSpeed.drawGraph(lastHitsData, "graph");
  200. }
  201. }
  202. }
  203. function showError(text)
  204. {
  205. BX("site-speed-loading").style.display = "none";
  206. BX("site-speed-error").innerHTML = text;
  207. }
  208. function drawStatForCurrentHost()
  209. {
  210. if (BX("site-speed-domains").selectedIndex !== 0)
  211. {
  212. BX("site-speed-perf").style.display = "none";
  213. }
  214. else
  215. {
  216. BX("site-speed-perf").style.display = "block";
  217. }
  218. BX("site-speed-analytics").style.display = "none";
  219. BX("site-speed-loading").style.cssText = "";
  220. BX("site-speed-graph-block").style.cssText = "";
  221. BX("site-speed-error").innerHTML = "";
  222. drawStat(BX("site-speed-domains").value);
  223. }
  224. function fillDomains(domains, domainsUtf)
  225. {
  226. if (!BX.type.isArray(domains))
  227. {
  228. return;
  229. }
  230. var select = BX("site-speed-domains");
  231. if (!select || select.domainsLoaded === true)
  232. {
  233. return;
  234. }
  235. for (var i = 0; i < domains.length; i++)
  236. {
  237. var title = BX.type.isNotEmptyString(domainsUtf[domains[i]]) ? domainsUtf[domains[i]] : domains[i];
  238. select.options[i+1] = new Option(title, domains[i]);
  239. }
  240. select.domainsLoaded = true;
  241. }
  242. })();
  243. </script>
  244. <?require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>