%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/perfmon/admin/ |
Current File : /home/bitrix/www/bitrix/modules/perfmon/admin/perfmon_sql_list.php |
<? define("ADMIN_MODULE_NAME", "perfmon"); define("PERFMON_STOP", true); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); /** @global CMain $APPLICATION */ /** @global CDatabase $DB */ /** @global CUser $USER */ require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/include.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/prolog.php"); IncludeModuleLangFile(__FILE__); $RIGHT = $APPLICATION->GetGroupRight("perfmon"); if ($RIGHT == "D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $bCluster = CModule::IncludeModule('cluster'); if ( $_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["ajax_tooltip"]) && $_GET["ajax_tooltip"] === "y" && isset($_GET["sql_id"]) && check_bitrix_sessid() ) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); $rsData = CPerfomanceSQL::GetBacktraceList($_GET["sql_id"]); $arData = $rsData->Fetch(); if ($arData) { ?> <table class="list"><? ?> <tr> <td align="left"><b><? echo GetMessage("PERFMON_SQL_FILE") ?></b></td> <td align="left"><b><? echo GetMessage("PERFMON_SQL_LINE_NUMBER"); ?></b></td> <td align="left"><b><? echo GetMessage("PERFMON_SQL_FUNCTION"); ?></b></td> </tr><? do { ?> <tr> <td align="left"> <? echo htmlspecialcharsex($arData["FILE_NAME"]) ?></td> <td align="right"> <? echo htmlspecialcharsex($arData["LINE_NO"]) ?></td> <? if ($arData["CLASS_NAME"]):?> <td align="left"> <? echo htmlspecialcharsex($arData["CLASS_NAME"]."::".$arData["FUNCTION_NAME"]) ?></td> <? else: ?> <td align="left"> <? echo htmlspecialcharsex($arData["FUNCTION_NAME"]) ?></td> <?endif; ?> </tr><? } while ($arData = $rsData->Fetch()); ?></table><? } else { ?>no backtrace found<? } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php"); } $sTableID = "tbl_perfmon_sql_list"; $oSort = new CAdminSorting($sTableID, "NN", "asc"); $lAdmin = new CAdminList($sTableID, $oSort); $FilterArr = array( "find", "find_type", "find_hit_id", "find_component_id", "find_query_time", "find_suggest_id", "find_node_id", ); $lAdmin->InitFilter($FilterArr); $arFilter = array( "=HIT_ID" => ($find != "" && $find_type == "hit_id"? $find: $find_hit_id), "=COMPONENT_ID" => ($find != "" && $find_type == "component_id"? $find: $find_component_id), ">=QUERY_TIME" => floatval($find_query_time), "=SUGGEST_ID" => intval($find_suggest_id), ); foreach ($arFilter as $key => $value) { if (!$value) unset($arFilter[$key]); } if ($find_node_id != "") { if ($find_node_id > 1) { $arFilter["=NODE_ID"] = $find_node_id; } else { $arFilter[] = array( "LOGIC" => "OR", array( "=NODE_ID" => 1, ), array( "=NODE_ID" => false, ), ); } } $arHeaders = array( array( "id" => "ID", "content" => GetMessage("PERFMON_SQL_ID"), "sort" => "ID", "align" => "right", "default" => true, ), array( "id" => "HIT_ID", "content" => GetMessage("PERFMON_SQL_HIT_ID"), "sort" => "HIT_ID", "align" => "right", "default" => true, ), array( "id" => "NN", "content" => GetMessage("PERFMON_SQL_NN"), "sort" => "NN", "align" => "right", "default" => true, ), array( "id" => "QUERY_TIME", "content" => GetMessage("PERFMON_SQL_QUERY_TIME"), "sort" => "QUERY_TIME", "align" => "right", "default" => true, ), array( "id" => "MODULE_NAME", "content" => GetMessage("PERFMON_SQL_MODULE_NAME"), "sort" => "MODULE_NAME", ), array( "id" => "COMPONENT_NAME", "content" => GetMessage("PERFMON_SQL_COMPONENT_NAME"), "sort" => "COMPONENT_NAME", ), array( "id" => "SQL_TEXT", "content" => GetMessage("PERFMON_SQL_SQL_TEXT"), //"sort" => "SQL_TEXT", "default" => true, ), ); $arClusterNodes = array(); if ($bCluster) { $arHeaders[] = array( "id" => "NODE_ID", "content" => GetMessage("PERFMON_SQL_NODE_ID"), ); $arClusterNodes[""] = GetMessage("MAIN_ALL"); $rsNodes = CClusterDBNode::GetList(); while ($node = $rsNodes->fetch()) $arClusterNodes[$node["ID"]] = htmlspecialcharsex($node["NAME"]); } $lAdmin->AddHeaders($arHeaders); $arSelectedFields = $lAdmin->GetVisibleHeaderColumns(); if (!is_array($arSelectedFields) || (count($arSelectedFields) < 1)) $arSelectedFields = array( "ID", "HIT_ID", "NN", "QUERY_TIME", "SQL_TEXT", ); $cData = new CPerfomanceSQL; $rsData = $cData->GetList($arSelectedFields, $arFilter, array($by => $order), false, array("nPageSize" => CAdminResult::GetNavSize($sTableID))); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("PERFMON_SQL_PAGE"))); while ($arRes = $rsData->NavNext(true, "f_")): $arRes["SQL_TEXT"] = CPerfomanceSQL::Format($arRes["SQL_TEXT"]); $row =& $lAdmin->AddRow($f_NAME, $arRes); $row->AddViewField("QUERY_TIME", perfmon_NumberFormat($f_QUERY_TIME, 6)); if (class_exists("geshi") && $f_SQL_TEXT) { $obGeSHi = new GeSHi(CSqlFormat::reformatSql($arRes["SQL_TEXT"], new CSqlFormatText), 'sql'); $html = $obGeSHi->parse_code(); } else { $html = str_replace( array(" ", "\t", "\n"), array(" ", " ", "<br>"), htmlspecialcharsbx(CSqlFormat::reformatSql($arRes["SQL_TEXT"])) ); } $html = '<span onmouseover="addTimer(this)" onmouseout="removeTimer(this)" id="'.$f_ID.'_sql_backtrace">'.$html.'</span>'; $row->AddViewField("SQL_TEXT", $html); $row->AddViewField("HIT_ID", '<a href="perfmon_hit_list.php?lang='.LANGUAGE_ID.'&set_filter=Y&find_id='.$f_HIT_ID.'">'.$f_HIT_ID.'</a>'); if ($bCluster && $arRes["NODE_ID"] != "") { if ($arRes["NODE_ID"] < 0) $html = '<div class="lamp-red" style="display:inline-block"></div>'; else $html = ''; if ($arRes["NODE_ID"] > 1) $html .= $arClusterNodes[$arRes["NODE_ID"]]; else $html .= $arClusterNodes[1]; $row->AddViewField("NODE_ID", $html); } $arActions = array(); if ($DBType == "mysql" || $DBType == "oracle") { $arActions[] = array( "DEFAULT" => "Y", "TEXT" => GetMessage("PERFMON_SQL_EXPLAIN"), "ACTION" => 'jsUtils.OpenWindow(\'perfmon_explain.php?lang='.LANG.'&ID='.$f_ID.'\', 600, 500);', ); } if (count($arActions)) $row->AddActions($arActions); endwhile; $lAdmin->AddFooter( array( array( "title" => GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value" => $rsData->SelectedRowsCount(), ), ) ); $aContext = array(); $lAdmin->AddAdminContextMenu($aContext); $lAdmin->CheckListMode(); $APPLICATION->SetTitle(GetMessage("PERFMON_SQL_TITLE")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $arFilter = array( "find_hit_id" => GetMessage("PERFMON_SQL_HIT_ID"), "find_component_id" => GetMessage("PERFMON_SQL_COMPONENT_ID"), "find_query_time" => GetMessage("PERFMON_SQL_QUERY_TIME"), ); if ($bCluster) $arFilter["find_node_id"] = GetMessage("PERFMON_SQL_NODE_ID"); $oFilter = new CAdminFilter($sTableID."_filter", $arFilter); CJSCore::Init(array("ajax", "popup")); ?> <script> var toolTipCache = new Array; function drawTooltip(result, _this) { if (!_this) _this = this; if (result != 'no backtrace found') { _this.toolTip = BX.PopupWindowManager.create( 'table_tooltip_' + (parseInt(Math.random() * 100000)), _this, { autoHide: true, closeIcon: true, closeByEsc: true, content: result } ); _this.toolTip.show(); } toolTipCache[_this.id] = result; } function sendRequest() { if (this.toolTip) this.toolTip.show(); else if (toolTipCache[this.id]) drawTooltip(toolTipCache[this.id], this); else BX.ajax.get( 'perfmon_sql_list.php?ajax_tooltip=y' + '&sessid=' + BX.message('bitrix_sessid') + '&sql_id=' + this.id, BX.proxy(drawTooltip, this) ); } function addTimer(p_href) { p_href.timerID = setTimeout(BX.proxy(sendRequest, p_href), 1000); } function removeTimer(p_href) { if (p_href.timerID) { clearTimeout(p_href.timerID); p_href.timerID = null; } } </script> <form name="find_form" method="get" action="<? echo $APPLICATION->GetCurPage(); ?>"> <? $oFilter->Begin(); ?> <tr> <td><b><?=GetMessage("PERFMON_SQL_FIND")?>:</b></td> <td> <input type="text" size="25" name="find" value="<? echo htmlspecialcharsbx($find) ?>" title="<?=GetMessage("PERFMON_SQL_FIND")?>"> <? $arr = array( "reference" => array( GetMessage("PERFMON_SQL_HIT_ID"), GetMessage("PERFMON_SQL_COMPONENT_ID"), ), "reference_id" => array( "hit_id", "component_id", ) ); echo SelectBoxFromArray("find_type", $arr, $find_type, "", ""); ?> </td> </tr> <tr> <td><?=GetMessage("PERFMON_SQL_HIT_ID")?></td> <td><input type="text" name="find_hit_id" size="47" value="<? echo htmlspecialcharsbx($find_hit_id) ?>"></td> </tr> <tr> <td><?=GetMessage("PERFMON_SQL_COMPONENT_ID")?></td> <td><input type="text" name="find_component_id" size="47" value="<? echo htmlspecialcharsbx($find_component_id) ?>"></td> </tr> <tr> <td><?=GetMessage("PERFMON_SQL_QUERY_TIME")?></td> <td><input type="text" name="find_query_time" size="7" value="<? echo htmlspecialcharsbx($find_query_time) ?>"></td> </tr> <? if ($bCluster): ?> <tr> <td><?=GetMessage("PERFMON_SQL_NODE_ID")?></td> <td><? $arr = array( "reference" => array_values($arClusterNodes), "reference_id" => array_keys($arClusterNodes), ); echo SelectBoxFromArray("find_node_id", $arr, $find_node_id, "", ""); ?></td> </tr> <? endif; ?> <? $oFilter->Buttons(array( "table_id" => $sTableID, "url" => $APPLICATION->GetCurPage(), "form" => "find_form", )); $oFilter->End(); ?> </form> <? $lAdmin->DisplayList(); ?> <? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); ?>