use Bitrix\Main\Loader;
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 */
Loader::includeModule('perfmon');
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)
{
?>
?>
echo GetMessage("PERFMON_SQL_FILE") ?> |
echo GetMessage("PERFMON_SQL_LINE_NUMBER"); ?> |
echo GetMessage("PERFMON_SQL_FUNCTION"); ?> |
do
{
?>
echo htmlspecialcharsex($arData["FILE_NAME"]) ?> |
echo htmlspecialcharsex($arData["LINE_NO"]) ?> |
if ($arData["CLASS_NAME"]):?>
echo htmlspecialcharsex($arData["CLASS_NAME"]."::".$arData["FUNCTION_NAME"]) ?> |
else: ?>
echo htmlspecialcharsex($arData["FUNCTION_NAME"]) ?> |
} while ($arData = $rsData->Fetch());
?>
}
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(" ", " ", "
"),
htmlspecialcharsbx(CSqlFormat::reformatSql($arRes["SQL_TEXT"]))
);
}
$html = ''.$html.'';
$row->AddViewField("SQL_TEXT", $html);
$row->AddViewField("HIT_ID", ''.$f_HIT_ID.'');
if ($bCluster && $arRes["NODE_ID"] != "")
{
if ($arRes["NODE_ID"] < 0)
$html = '';
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"));
?>