PageRenderTime 69ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/perfmon/admin/perfmon_hit_grouped.php

https://gitlab.com/alexprowars/bitrix
PHP | 247 lines | 213 code | 31 blank | 3 comment | 8 complexity | 73bf4e4044f202ad7963241d7f2b55eb MD5 | raw file
  1. <?
  2. use Bitrix\Main\Loader;
  3. define("ADMIN_MODULE_NAME", "perfmon");
  4. define("PERFMON_STOP", true);
  5. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  6. /** @global CMain $APPLICATION */
  7. /** @global CDatabase $DB */
  8. /** @global CUser $USER */
  9. Loader::includeModule('perfmon');
  10. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/prolog.php");
  11. IncludeModuleLangFile(__FILE__);
  12. $RIGHT = $APPLICATION->GetGroupRight("perfmon");
  13. if ($RIGHT == "D")
  14. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  15. $sTableID = "tbl_perfmon_hit_grouped";
  16. $oSort = new CAdminSorting($sTableID, "SUM_PAGE_TIME", "desc");
  17. $lAdmin = new CAdminList($sTableID, $oSort);
  18. $FilterArr = array(
  19. "find_script_name",
  20. "find_is_admin",
  21. "find_count_from", "find_count_to",
  22. );
  23. $lAdmin->InitFilter($FilterArr);
  24. $arFilter = array(
  25. "SCRIPT_NAME" => $find_script_name,
  26. "=IS_ADMIN" => $find_is_admin,
  27. ">=COUNT" => $find_count_from,
  28. "<=COUNT" => $find_count_to,
  29. );
  30. foreach ($arFilter as $key => $value)
  31. if (!$value)
  32. unset($arFilter[$key]);
  33. $arHeaders = array(
  34. array(
  35. "id" => "IS_ADMIN",
  36. "content" => GetMessage("PERFMON_HIT_IS_ADMIN"),
  37. "sort" => "IS_ADMIN",
  38. ),
  39. array(
  40. "id" => "REQUEST_METHOD",
  41. "content" => GetMessage("PERFMON_HIT_REQUEST_METHOD"),
  42. "sort" => "REQUEST_METHOD",
  43. ),
  44. array(
  45. "id" => "SERVER_NAME",
  46. "content" => GetMessage("PERFMON_HIT_SERVER_NAME"),
  47. "sort" => "SERVER_NAME",
  48. ),
  49. array(
  50. "id" => "SERVER_PORT",
  51. "content" => GetMessage("PERFMON_HIT_SERVER_PORT"),
  52. "sort" => "SERVER_PORT",
  53. ),
  54. array(
  55. "id" => "SCRIPT_NAME",
  56. "content" => GetMessage("PERFMON_HIT_PAGE"),
  57. "sort" => "SCRIPT_NAME",
  58. "default" => true,
  59. ),
  60. array(
  61. "id" => "PERCENT",
  62. "content" => GetMessage("PERFMON_HIT_PERCENT"),
  63. "sort" => "SUM_PAGE_TIME",
  64. "align" => "right",
  65. "default" => true,
  66. ),
  67. array(
  68. "id" => "REQUEST_URI",
  69. "content" => GetMessage("PERFMON_HIT_REQUEST_URI"),
  70. "sort" => "REQUEST_URI",
  71. ),
  72. array(
  73. "id" => "COUNT",
  74. "content" => GetMessage("PERFMON_HIT_COUNT"),
  75. "sort" => "COUNT",
  76. "align" => "right",
  77. "default" => true,
  78. ),
  79. );
  80. $arGrpFuncs = array("MAX", "MIN", "SUM", "AVG");
  81. $arGrpCols = array(
  82. "INCLUDED_FILES" => 0,
  83. "MEMORY_PEAK_USAGE" => 0,
  84. "CACHE_SIZE" => 0,
  85. "CACHE_COUNT" => 0,
  86. "CACHE_COUNT_R" => 0,
  87. "CACHE_COUNT_W" => 0,
  88. "CACHE_COUNT_C" => 0,
  89. "PAGE_TIME" => 4,
  90. "PROLOG_TIME" => 4,
  91. "AGENTS_TIME" => 4,
  92. "WORK_AREA_TIME" => 4,
  93. "EPILOG_TIME" => 4,
  94. "EVENTS_TIME" => 4,
  95. "COMPONENTS" => 0,
  96. "COMPONENTS_TIME" => 4,
  97. "QUERIES" => 0,
  98. "QUERIES_TIME" => 4,
  99. );
  100. $arDefColumns = array("SUM_PAGE_TIME", "AVG_PAGE_TIME", "AVG_COMPONENTS", "AVG_QUERIES");
  101. foreach ($arGrpCols as $col => $prec)
  102. {
  103. foreach ($arGrpFuncs as $func)
  104. {
  105. $arHeaders [] = array(
  106. "id" => $func."_".$col,
  107. "content" => GetMessage("PERFMON_HIT_".$func."_".$col),
  108. "sort" => $func."_".$col,
  109. "align" => "right",
  110. "default" => in_array($func."_".$col, $arDefColumns),
  111. );
  112. }
  113. }
  114. $lAdmin->AddHeaders($arHeaders);
  115. $arSelectedFields = $lAdmin->GetVisibleHeaderColumns();
  116. if (!is_array($arSelectedFields) || (count($arSelectedFields) < 1))
  117. $arSelectedFields = array(
  118. "SCRIPT_NAME",
  119. "COUNT",
  120. "MAX_INCLUDED_FILES",
  121. "MAX_MEMORY_PEAK_USAGE",
  122. "AVG_QUERIES",
  123. );
  124. $cData = new CPerfomanceHit;
  125. $rsTotal = $cData->GetList(array("COUNT" => "ASC"), $arFilter, true, false, array("COUNT", "SUM_PAGE_TIME"));
  126. $arTotal = $rsTotal->Fetch();
  127. $rsData = $cData->GetList(
  128. array($by => $order),
  129. $arFilter,
  130. true,
  131. array("nPageSize" => CAdminResult::GetNavSize($sTableID)),
  132. $arSelectedFields
  133. );
  134. $rsData = new CAdminResult($rsData, $sTableID);
  135. $rsData->NavStart();
  136. $lAdmin->NavText($rsData->GetNavPrint(GetMessage("PERFMON_HIT_PAGE2")));
  137. $max_display_url = COption::GetOptionInt("perfmon", "max_display_url");
  138. while ($arRes = $rsData->NavNext(true, "f_"))
  139. {
  140. $row =& $lAdmin->AddRow($f_NAME, $arRes);
  141. $row->AddViewField("SCRIPT_NAME", '<a href="perfmon_hit_list.php?lang='.LANGUAGE_ID.'&amp;set_filter=Y&amp;find_script_name='.$f_SCRIPT_NAME.'">'.$f_SCRIPT_NAME.'</a>');
  142. $page_time = doubleval($arTotal["SUM_PAGE_TIME"]);
  143. if ($page_time > 0)
  144. $row->AddViewField("PERCENT", perfmon_NumberFormat(($arRes["SUM_PAGE_TIME"] / $page_time) * 100, 2)."%");
  145. else
  146. $row->AddViewField("PERCENT", "&nbsp;");
  147. $row->AddViewField("COUNT", perfmon_NumberFormat($f_COUNT, 0));
  148. foreach ($arGrpFuncs as $func)
  149. {
  150. foreach ($arGrpCols as $col => $prec)
  151. {
  152. if($arRes[$func."_".$col] <> '')
  153. {
  154. $row->AddViewField($func."_".$col, perfmon_NumberFormat($arRes[$func."_".$col], $prec));
  155. }
  156. }
  157. }
  158. }
  159. $lAdmin->AddFooter(
  160. array(
  161. array(
  162. "title" => GetMessage("MAIN_ADMIN_LIST_SELECTED"),
  163. "value" => $rsData->SelectedRowsCount(),
  164. ),
  165. array(
  166. "title" => GetMessage("PERFMON_HIT_TOTAL_HITS").":",
  167. "value" => $arTotal["COUNT"],
  168. ),
  169. )
  170. );
  171. $aContext = array();
  172. $lAdmin->AddAdminContextMenu($aContext);
  173. $lAdmin->CheckListMode();
  174. $APPLICATION->SetTitle(GetMessage("PERFMON_HIT_TITLE2"));
  175. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  176. $oFilter = new CAdminFilter(
  177. $sTableID."_filter",
  178. array(
  179. "find_is_admin" => GetMessage("PERFMON_HIT_IS_ADMIN"),
  180. "find_count" => GetMessage("PERFMON_HIT_COUNT"),
  181. )
  182. );
  183. ?>
  184. <form name="find_form" method="get" action="<? echo $APPLICATION->GetCurPage(); ?>">
  185. <? $oFilter->Begin(); ?>
  186. <tr>
  187. <td><?echo GetMessage("PERFMON_HIT_PAGE")?>:</td>
  188. <td><input type="text" name="find_script_name" size="47"
  189. value="<? echo htmlspecialcharsbx($find_script_name) ?>"></td>
  190. </tr>
  191. <tr>
  192. <td><?echo GetMessage("PERFMON_HIT_IS_ADMIN")?>:</td>
  193. <td><?
  194. $arr = array(
  195. "reference" => array(GetMessage("MAIN_YES"), GetMessage("MAIN_NO")),
  196. "reference_id" => array("Y", "N")
  197. );
  198. echo SelectBoxFromArray("find_is_admin", $arr, htmlspecialcharsbx($find_is_admin), GetMessage("MAIN_ALL"));
  199. ?></td>
  200. </tr>
  201. <tr>
  202. <td><?=GetMessage("PERFMON_HIT_COUNT")?>:</td>
  203. <td><input type="text" name="find_count_from" size="7" value="<?echo htmlspecialcharsbx($find_count_from)?>">...<input type="text" name="find_count_to" size="7" value="<? echo htmlspecialcharsbx($find_count_to) ?>"></td>
  204. </tr>
  205. <?
  206. $oFilter->Buttons(array(
  207. "table_id" => $sTableID,
  208. "url" => $APPLICATION->GetCurPage(),
  209. "form" => "find_form",
  210. ));
  211. $oFilter->End();
  212. ?>
  213. </form>
  214. <?
  215. $lAdmin->DisplayList();
  216. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>