1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
keeper.php
См. документацию.
1<?php
2
3function perfmonErrorHandler($errno, $errstr, $errfile, $errline)
4{
5 global $perfmonErrors;
6 //if(count($perfmonErrors) > 100)
7 // return false;
8 static $arExclude = [
9 '/modules/main/classes/general/cache.php:150' => true,
10 ];
11 $uni_file_name = str_replace('\\', '/', mb_substr($errfile, mb_strlen($_SERVER['DOCUMENT_ROOT'] . BX_ROOT)));
12 $bRecord = false;
13 switch ($errno)
14 {
15 case E_WARNING:
16 $bRecord = true;
17 break;
18 case E_NOTICE:
19 if (
20 (mb_strpos($errstr, 'Undefined index:') === false)
21 && (mb_strpos($errstr, 'Undefined offset:') === false)
22 && !array_key_exists($uni_file_name . ':' . $errline, $arExclude)
23 )
24 {
25 $bRecord = true;
26 }
27 break;
28 default:
29 break;
30 }
31 if ($bRecord)
32 {
33 $perfmonErrors[] = [
34 'ERRNO' => $errno,
35 'ERRSTR' => $errstr,
36 'ERRFILE' => $errfile,
37 'ERRLINE' => $errline,
38 ];
39 }
40 //Continue with default handling
41 return false;
42}
43
45{
46 public static function OnPageStart()
47 {
48 if (!defined('PERFMON_STOP'))
49 {
50 $end_time = COption::GetOptionInt('perfmon', 'end_time');
51 if (time() > $end_time)
52 {
54 if (COption::GetOptionString('perfmon', 'total_mark_value', '') == 'measure')
55 {
56 COption::SetOptionString('perfmon', 'total_mark_value', 'calc');
57 }
58 }
59 else
60 {
61 self::setDebugModeOn();
62
63 global $perfmonErrors;
64 $perfmonErrors = [];
65 if (COption::GetOptionString('perfmon', 'warning_log') === 'Y')
66 {
67 set_error_handler('perfmonErrorHandler');
68 }
69 }
70 }
71 }
72
73 public static function setDebugModeOn()
74 {
75 global $DB, $APPLICATION;
76
77 define('PERFMON_STARTED', $DB->ShowSqlStat . '|' . \Bitrix\Main\Data\Cache::getShowCacheStat() . '|' . $APPLICATION->ShowIncludeStat);
78
79 $DB->ShowSqlStat = true;
82 $connection->startTracker();
83
84 \Bitrix\Main\Data\Cache::setShowCacheStat(COption::GetOptionString('perfmon', 'cache_log') === 'Y');
85 $APPLICATION->ShowIncludeStat = true;
86 }
87
88 public static function restoreDebugMode()
89 {
90 global $DB, $APPLICATION;
91
92 $toRestore = explode('|', constant('PERFMON_STARTED'));
93
94 $DB->ShowSqlStat = $toRestore[0];
95
96 \Bitrix\Main\Data\Cache::setShowCacheStat($toRestore[1]);
97 $APPLICATION->ShowIncludeStat = $toRestore[2];
98 }
99
100 public static function OnEpilog()
101 {
102 if (defined('PERFMON_STARTED'))
103 {
105 }
106 }
107
108 public static function OnBeforeAfterEpilog()
109 {
110 if (defined('PERFMON_STARTED'))
111 {
112 global $DB;
113 $DB->ShowSqlStat = true;
114 }
115 }
116
117 public static function OnAfterAfterEpilog()
118 {
119 if (defined('PERFMON_STARTED'))
120 {
122 CPerfomanceKeeper::writeToDatabase();
123 }
124 }
125
126 public static function writeToDatabase()
127 {
128 $START_EXEC_CURRENT_TIME = microtime();
129
130 global $DB, $APPLICATION;
133
134 $connection->stopTracker();
135 $DB->ShowSqlStat = false;
136 if ($connection->getTracker())
137 {
138 $arQueryDebug = $connection->getTracker()->getQueries();
139 }
140 else
141 {
142 $arQueryDebug = [];
143 }
144 $arIncludeDebug = $APPLICATION->arIncludeDebug;
145
146 $cache_log = COption::GetOptionString('perfmon', 'cache_log') === 'Y';
147 $large_cache_log = COption::GetOptionString('perfmon', 'large_cache_log') === 'Y';
148 $large_cache_size = floatval(COption::GetOptionString('perfmon', 'large_cache_size')) * 1024;
149 $sql_log = COption::GetOptionString('perfmon', 'sql_log') === 'Y';
150 $slow_sql_log = COption::GetOptionString('perfmon', 'slow_sql_log') === 'Y';
151 $slow_sql_time = floatval(COption::GetOptionString('perfmon', 'slow_sql_time'));
152
153 if ($slow_sql_log)
154 {
155 self::removeQueries($arQueryDebug, $arIncludeDebug, $slow_sql_time, $cache_log);
156 }
157
158 $query_count = 0;
159 $query_time = 0.0;
160 if ($sql_log)
161 {
162 self::countQueries($query_count, $query_time, $arQueryDebug, $arIncludeDebug);
163 }
164
165 $comps_count = 0;
166 $comps_time = 0.0;
167 if ($sql_log || $cache_log)
168 {
169 self::countComponents($comps_count, $comps_time, $arIncludeDebug);
170 }
171
172 $cache_count = [];
174 $arCacheDebug = null;
175 if ($cache_log)
176 {
177 $arCacheDebug = \Bitrix\Main\Diag\CacheTracker::getCacheTracking();
178
179 if ($large_cache_log)
180 {
181 self::removeCaches($large_cache_size, $arCacheDebug, $arIncludeDebug);
182 }
183
184 self::countCache($arCacheDebug, $cache_count);
185 foreach ($arIncludeDebug as $ar)
186 {
187 if (array_key_exists('REL_PATH', $ar))
188 {
189 self::countCache($ar['CACHE'], $cache_count);
190 }
191 }
192 }
193
194 if ($_SERVER['SCRIPT_NAME'] == '/bitrix/urlrewrite.php' && isset($_SERVER['REAL_FILE_PATH']))
195 {
196 $SCRIPT_NAME = $_SERVER['REAL_FILE_PATH'];
197 }
198 elseif ($_SERVER['SCRIPT_NAME'] == '/404.php' && isset($_SERVER['REAL_FILE_PATH']))
199 {
200 $SCRIPT_NAME = $_SERVER['REAL_FILE_PATH'];
201 }
202 else
203 {
204 $SCRIPT_NAME = $_SERVER['SCRIPT_NAME'];
205 }
206
207 $arFields = [
208 '~DATE_HIT' => $DB->GetNowFunction(),
209 'IS_ADMIN' => defined('ADMIN_SECTION') ? 'Y' : 'N',
210 'REQUEST_METHOD' => $_SERVER['REQUEST_METHOD'] ?? '',
211 'SERVER_NAME' => $_SERVER['SERVER_NAME'] ?? '',
212 'SERVER_PORT' => $_SERVER['SERVER_PORT'] ?? '',
213 'SCRIPT_NAME' => $SCRIPT_NAME,
214 'REQUEST_URI' => $_SERVER['REQUEST_URI'] ?? '',
215 'INCLUDED_FILES' => function_exists('get_included_files') ? count(get_included_files()) : false,
216 'MEMORY_PEAK_USAGE' => function_exists('memory_get_peak_usage') ? memory_get_peak_usage() : false,
217 'CACHE_TYPE' => COption::GetOptionString('main', 'component_cache_on', 'Y') == 'Y' ? 'Y' : 'N',
218 '~CACHE_SIZE' => intval($GLOBALS['CACHE_STAT_BYTES']),
219 '~CACHE_COUNT_R' => intval($cache_count['R'] ?? 0),
220 '~CACHE_COUNT_W' => intval($cache_count['W'] ?? 0),
221 '~CACHE_COUNT_C' => intval($cache_count['C'] ?? 0),
222 'QUERIES' => $query_count,
223 '~QUERIES_TIME' => $query_time,
224 'SQL_LOG' => $sql_log ? 'Y' : 'N',
225 'COMPONENTS' => $comps_count,
226 '~COMPONENTS_TIME' => $comps_time,
227 '~MENU_RECALC' => $APPLICATION->_menu_recalc_counter,
228 ];
229 CPerfomanceKeeper::SetPageTimes($START_EXEC_CURRENT_TIME, $arFields);
230
231 if ($query_count || $comps_count || $cache_count)
232 {
233 $HIT_ID = $DB->Add('b_perf_hit', $arFields);
234 }
235 else
236 {
237 $HIT_ID = false;
238 }
239
240 $NN = 0;
241 if ($HIT_ID && $cache_log)
242 {
243 self::saveCaches($HIT_ID, false, $arCacheDebug, $NN);
244 }
245
246 $MM = 0;
247 if ($HIT_ID && $sql_log)
248 {
249 if (is_array($arQueryDebug))
250 {
251 self::saveQueries($HIT_ID, false, $arQueryDebug, $MM);
252 }
253 }
254
255 if ($HIT_ID && ($sql_log || $cache_log))
256 {
257 foreach ($arIncludeDebug as $ii => $ar)
258 {
259 if (!array_key_exists('REL_PATH', $ar))
260 {
261 continue;
262 }
263
264 $cache_count = [];
265 if ($cache_log)
266 {
267 self::countCache($ar['CACHE'], $cache_count);
268 }
269
270 $arFields = [
271 'HIT_ID' => $HIT_ID,
272 'NN' => $ii,
273 'CACHE_TYPE' => $ar['CACHE_TYPE'],
274 '~CACHE_SIZE' => intval($ar['CACHE_SIZE']),
275 '~CACHE_COUNT_R' => intval($cache_count['R'] ?? 0),
276 '~CACHE_COUNT_W' => intval($cache_count['W'] ?? 0),
277 '~CACHE_COUNT_C' => intval($cache_count['C'] ?? 0),
278 'COMPONENT_TIME' => $ar['TIME'],
279 'QUERIES' => $ar['QUERY_COUNT'],
280 'QUERIES_TIME' => $ar['QUERY_TIME'],
281 'COMPONENT_NAME' => $ar['REL_PATH'],
282 ];
283 $COMP_ID = $DB->Add('b_perf_component', $arFields);
284
285 if ($sql_log && is_array($ar['QUERIES']))
286 {
287 self::saveQueries($HIT_ID, $COMP_ID, $ar['QUERIES'], $MM);
288 }
289
290 if ($cache_log && is_array($ar['CACHE']))
291 {
292 self::saveCaches($HIT_ID, $COMP_ID, $ar['CACHE'], $NN);
293 }
294 }
295 }
296
297 global $perfmonErrors;
298 if ($HIT_ID && (count($perfmonErrors) > 0))
299 {
300 foreach ($perfmonErrors as $arError)
301 {
302 $arError['HIT_ID'] = $HIT_ID;
303 $DB->Add('b_perf_error', $arError);
304 }
305 }
306 }
307
308 public static function SetPageTimes($START_EXEC_CURRENT_TIME, &$arFields)
309 {
310 list($usec, $sec) = explode(' ', $START_EXEC_CURRENT_TIME);
311 $CURRENT_TIME = (float)$sec + (float)$usec;
312
313 if (defined('START_EXEC_PROLOG_BEFORE_1'))
314 {
315 $PROLOG_BEFORE_1 = (float)START_EXEC_PROLOG_BEFORE_1;
316
317 if (defined('START_EXEC_AGENTS_1') && defined('START_EXEC_AGENTS_2'))
318 {
319 $AGENTS_2 = (float)constant('START_EXEC_AGENTS_2');
320 $AGENTS_1 = (float)constant('START_EXEC_AGENTS_1');
321 $arFields['~AGENTS_TIME'] = $AGENTS_2 - $AGENTS_1;
322 }
323 else
324 {
325 $arFields['~AGENTS_TIME'] = 0;
326 }
327
328 if (defined('START_EXEC_EVENTS_1') && defined('START_EXEC_EVENTS_2'))
329 {
330 list($usec, $sec) = explode(' ', constant('START_EXEC_EVENTS_2'));
331 $EVENTS_2 = (float)$sec + (float)$usec;
332 list($usec, $sec) = explode(' ', constant('START_EXEC_EVENTS_1'));
333 $EVENTS_1 = (float)$sec + (float)$usec;
334 $arFields['~EVENTS_TIME'] = $EVENTS_2 - $EVENTS_1;
335 }
336 else
337 {
338 $arFields['~EVENTS_TIME'] = 0;
339 }
340
341 if (defined('START_EXEC_PROLOG_AFTER_1') && defined('START_EXEC_PROLOG_AFTER_2'))
342 {
343 $PROLOG_AFTER_1 = (float)START_EXEC_PROLOG_AFTER_1;
344 $PROLOG_AFTER_2 = (float)START_EXEC_PROLOG_AFTER_2;
345 $arFields['~PROLOG_AFTER_TIME'] = $PROLOG_AFTER_2 - $PROLOG_AFTER_1;
346
347 $arFields['~PROLOG_BEFORE_TIME'] = $PROLOG_AFTER_1 - $PROLOG_BEFORE_1;
348
349 $arFields['~PROLOG_TIME'] = round($PROLOG_AFTER_2 - $PROLOG_BEFORE_1 - $arFields['~AGENTS_TIME'], 4);
350
351 if (defined('START_EXEC_EPILOG_BEFORE_1'))
352 {
353 $EPILOG_BEFORE_1 = (float)START_EXEC_EPILOG_BEFORE_1;
354
355 $arFields['~WORK_AREA_TIME'] = $EPILOG_BEFORE_1 - $PROLOG_AFTER_2;
356
357 if (defined('START_EXEC_EPILOG_AFTER_1'))
358 {
359 $EPILOG_AFTER_1 = (float)START_EXEC_EPILOG_AFTER_1;
360 $arFields['~EPILOG_BEFORE_TIME'] = $EPILOG_AFTER_1 - $EPILOG_BEFORE_1;
361 $arFields['~EPILOG_AFTER_TIME'] = $CURRENT_TIME - $EPILOG_AFTER_1 - $arFields['~EVENTS_TIME'];
362 }
363 else
364 {
365 $arFields['~EPILOG_BEFORE_TIME'] = 0;
366 $arFields['~EPILOG_AFTER_TIME'] = 0;
367 }
368
369 $arFields['~EPILOG_TIME'] = $CURRENT_TIME - $EPILOG_BEFORE_1;
370 }
371 else
372 {
373 $arFields['~WORK_AREA_TIME'] = $CURRENT_TIME - $PROLOG_AFTER_2;
374 $arFields['~EPILOG_BEFORE_TIME'] = 0;
375 $arFields['~EPILOG_AFTER_TIME'] = 0;
376 $arFields['~EPILOG_TIME'] = 0;
377 }
378 }
379
380 $arFields['~PAGE_TIME'] = $CURRENT_TIME - $PROLOG_BEFORE_1;
381 }
382 else
383 {
384 $arFields['~PAGE_TIME'] = $CURRENT_TIME - START_EXEC_TIME;
385 }
386 }
387
388 public static function removeQueries(&$arQueryDebug, &$arIncludeDebug, $slow_sql_time, $preserveComponents = false)
389 {
390 if (is_array($arQueryDebug))
391 {
392 foreach ($arQueryDebug as $i => $arQueryInfo)
393 {
394 if ($arQueryInfo['TIME'] < $slow_sql_time)
395 {
396 unset($arQueryDebug[$i]);
397 }
398 }
399 }
400
401 if (is_array($arIncludeDebug))
402 {
403 foreach ($arIncludeDebug as $i => $ar)
404 {
405 if (array_key_exists('REL_PATH', $ar) && is_array($ar['QUERIES']))
406 {
407 foreach ($ar['QUERIES'] as $N => $arQueryInfo)
408 {
409 if ($arQueryInfo['TIME'] < $slow_sql_time)
410 {
411 unset($arIncludeDebug[$i]['QUERIES'][$N]);
412 }
413 }
414
415 if (!$preserveComponents)
416 {
417 if (empty($arIncludeDebug[$i]['QUERIES']))
418 {
419 unset($arIncludeDebug[$i]);
420 }
421 }
422 }
423 else
424 {
425 if (!$preserveComponents)
426 {
427 unset($arIncludeDebug[$i]);
428 }
429 }
430 }
431 }
432 }
433
434 public static function countQueries(&$query_count, &$query_time, $arQueryDebug, $arIncludeDebug)
435 {
436 $query_count = 0;
437 $query_time = 0.0;
438
439 if (is_array($arQueryDebug))
440 {
441 foreach ($arQueryDebug as $arQueryInfo)
442 {
443 $query_count++;
444 $query_time += $arQueryInfo['TIME'];
445 }
446 }
447
448 foreach ($arIncludeDebug as $ar)
449 {
450 if (array_key_exists('REL_PATH', $ar) && is_array($ar['QUERIES']))
451 {
452 foreach ($ar['QUERIES'] as $arQueryInfo)
453 {
454 $query_count++;
455 $query_time += $arQueryInfo['TIME'];
456 }
457 }
458 }
459 }
460
461 public static function countComponents(&$comps_count, &$comps_time, $arIncludeDebug)
462 {
463 $comps_count = 0;
464 $comps_time = 0.0;
465
466 foreach ($arIncludeDebug as $ar)
467 {
468 if (array_key_exists('REL_PATH', $ar))
469 {
470 $comps_count++;
471 $comps_time += $ar['TIME'];
472 }
473 }
474 }
475
476 public static function removeCaches($large_cache_size, &$arCacheDebug, &$arIncludeDebug)
477 {
478 if (is_array($arCacheDebug))
479 {
480 foreach ($arCacheDebug as $i => $arCacheInfo)
481 {
482 if (
483 (
484 $arCacheInfo['cache_size'] > 0
485 && $arCacheInfo['cache_size'] < $large_cache_size
486 ) || (
487 $arCacheInfo['operation'] != 'W'
488 && $arCacheInfo['operation'] != 'R'
489 )
490 )
491 {
492 unset($arCacheDebug[$i]);
493 }
494 }
495 }
496
497 if (is_array($arIncludeDebug))
498 {
499 foreach ($arIncludeDebug as $i => $ar)
500 {
501 if (array_key_exists('REL_PATH', $ar) && isset($ar['CACHE']) && is_array($ar['CACHE']))
502 {
503 foreach ($ar['CACHE'] as $N => $arCacheInfo)
504 {
505 if (
506 (
507 $arCacheInfo['cache_size'] > 0
508 && $arCacheInfo['cache_size'] < $large_cache_size
509 ) || (
510 $arCacheInfo['operation'] != 'W'
511 && $arCacheInfo['operation'] != 'R'
512 )
513 )
514 {
515 unset($arIncludeDebug[$i]['CACHE'][$N]);
516 }
517 }
518 }
519 }
520 }
521 }
522
523 public static function countCache($arCacheDebug, &$cache_count)
524 {
525 if (is_array($arCacheDebug))
526 {
527 foreach ($arCacheDebug as $arCacheInfo)
528 {
529 if (isset($cache_count[$arCacheInfo['operation']]))
530 {
531 $cache_count[$arCacheInfo['operation']]++;
532 }
533 else
534 {
535 $cache_count[$arCacheInfo['operation']] = 1;
536 }
537 }
538 }
539 }
540
541 public static function findCaller($trace, &$module_id, &$comp_id)
542 {
543 $module_id = false;
544 $comp_id = false;
545 foreach ($trace as $arCallInfo)
546 {
547 if (array_key_exists('file', $arCallInfo))
548 {
549 $file = mb_strtolower(str_replace('\\', '/', $arCallInfo['file']));
550
551 if (
553 && !preg_match('/\\/(database|cache|managedcache)\\.php$/', $file)
554 )
555 {
556 $match = [];
557 if (preg_match('#.*/bitrix/modules/(.+?)/#', $file, $match))
558 {
559 $module_id = $match[1];
560 }
561 }
562
563 $match = [];
564 if (
565 !$comp_id
566 && preg_match('#.*/(?:bitrix|install)/components/(.+?)/(.+?)/#', $file, $match)
567 )
568 {
569 $comp_id = $match[1] . ':' . $match[2];
570 }
571
572 if ($module_id && $comp_id)
573 {
574 break;
575 }
576 }
577 }
578 }
579
580 public static function saveQueries($HIT_ID, $COMP_ID, $arQueryDebug, &$NN)
581 {
582 global $DB;
583
584 foreach ($arQueryDebug as $arQueryInfo)
585 {
586 self::findCaller($arQueryInfo['TRACE'], $module_id, $comp_id);
587
588 $arFields = [
589 'HIT_ID' => $HIT_ID,
590 'COMPONENT_ID' => $COMP_ID,
591 'NN' => ++$NN,
592 'QUERY_TIME' => $arQueryInfo['TIME'],
593 'NODE_ID' => intval($arQueryInfo['NODE_ID']),
594 'MODULE_NAME' => $module_id,
595 'COMPONENT_NAME' => $comp_id,
596 'SQL_TEXT' => $arQueryInfo['QUERY'],
597 'SELECTED_ROWS' => $arQueryInfo->getSelectedRowsCount(),
598 'SELECTED_FIELDS' => $arQueryInfo->getSelectedFieldsCount(),
599 'FETCHED_ROWS' => $arQueryInfo->getFetchedRowsCount(),
600 'FETCHED_LENGTH' => $arQueryInfo->getLength(),
601 'HAS_BIG_FIELDS' => $arQueryInfo->hasBigFields() ? 'Y' : 'N',
602 ];
603
604 $SQL_ID = $DB->Add('b_perf_sql', $arFields, ['SQL_TEXT']);
605
606 if ($SQL_ID && COption::GetOptionString('perfmon', 'sql_backtrace') === 'Y')
607 {
608 $pl = mb_strlen(rtrim($_SERVER['DOCUMENT_ROOT'], '/'));
609 foreach ($arQueryInfo['TRACE'] as $i => $arCallInfo)
610 {
611 $DB->Add('b_perf_sql_backtrace', [
612 'ID' => 1,
613 'SQL_ID' => $SQL_ID,
614 'NN' => $i,
615 'FILE_NAME' => mb_substr($arCallInfo['file'], $pl),
616 'LINE_NO' => $arCallInfo['line'],
617 'CLASS_NAME' => $arCallInfo['class'],
618 'FUNCTION_NAME' => $arCallInfo['function'],
619 ]);
620 }
621 }
622 }
623 }
624
625 public static function saveCaches($HIT_ID, $COMP_ID, $arCacheDebug, &$NN)
626 {
627 global $DB;
628
629 foreach ($arCacheDebug as $arCacheInfo)
630 {
631 self::findCaller($arCacheInfo['TRACE'], $module_id, $comp_id);
632
633 $arFields = [
634 'HIT_ID' => $HIT_ID,
635 'COMPONENT_ID' => $COMP_ID,
636 'NN' => ++$NN,
637 'CACHE_SIZE' => $arCacheInfo['cache_size'],
638 'OP_MODE' => $arCacheInfo['operation'],
639 'MODULE_NAME' => $module_id,
640 'COMPONENT_NAME' => $comp_id,
641 'BASE_DIR' => $arCacheInfo['basedir'],
642 'INIT_DIR' => $arCacheInfo['initdir'],
643 'FILE_NAME' => $arCacheInfo['filename'],
644 'FILE_PATH' => $arCacheInfo['path'],
645 ];
646 $DB->Add('b_perf_cache', $arFields);
647 }
648 }
649
650 public static function IsActive()
651 {
652 $bActive = false;
653 foreach (GetModuleEvents('main', 'OnPageStart', true) as $arEvent)
654 {
655 if (isset($arEvent['TO_MODULE_ID']) && $arEvent['TO_MODULE_ID'] == 'perfmon')
656 {
657 $bActive = true;
658 break;
659 }
660 }
661 return $bActive;
662 }
663
664 public static function SetActive($bActive = false, $end_time = 0)
665 {
666 if ($bActive)
667 {
669 {
670 RegisterModuleDependences('main', 'OnPageStart', 'perfmon', 'CPerfomanceKeeper', 'OnPageStart', '1');
671 RegisterModuleDependences('main', 'OnEpilog', 'perfmon', 'CPerfomanceKeeper', 'OnEpilog', '1000');
672 RegisterModuleDependences('main', 'OnAfterEpilog', 'perfmon', 'CPerfomanceKeeper', 'OnBeforeAfterEpilog', '1');
673 RegisterModuleDependences('main', 'OnAfterEpilog', 'perfmon', 'CPerfomanceKeeper', 'OnAfterAfterEpilog', '1000');
674 RegisterModuleDependences('main', 'OnLocalRedirect', 'perfmon', 'CPerfomanceKeeper', 'OnAfterAfterEpilog', '1000');
675 }
676 COption::SetOptionInt('perfmon', 'end_time', $end_time);
677 }
678 else
679 {
681 {
682 UnRegisterModuleDependences('main', 'OnPageStart', 'perfmon', 'CPerfomanceKeeper', 'OnPageStart');
683 UnRegisterModuleDependences('main', 'OnEpilog', 'perfmon', 'CPerfomanceKeeper', 'OnEpilog');
684 UnRegisterModuleDependences('main', 'OnAfterEpilog', 'perfmon', 'CPerfomanceKeeper', 'OnBeforeAfterEpilog');
685 UnRegisterModuleDependences('main', 'OnAfterEpilog', 'perfmon', 'CPerfomanceKeeper', 'OnAfterAfterEpilog');
686 UnRegisterModuleDependences('main', 'OnLocalRedirect', 'perfmon', 'CPerfomanceKeeper', 'OnAfterAfterEpilog');
687 }
688 }
689 }
690}
$connection
Определения actionsdefinitions.php:38
const BX_ROOT
Определения bx_root.php:3
global $APPLICATION
Определения include.php:80
$module_id
Определения options.php:6
static getConnection($name="")
Определения application.php:638
static GetOptionString($module_id, $name, $def="", $site=false, $bExactSite=false)
Определения option.php:8
Определения keeper.php:45
static countQueries(&$query_count, &$query_time, $arQueryDebug, $arIncludeDebug)
Определения keeper.php:434
static SetActive($bActive=false, $end_time=0)
Определения keeper.php:664
static findCaller($trace, &$module_id, &$comp_id)
Определения keeper.php:541
static IsActive()
Определения keeper.php:650
static OnEpilog()
Определения keeper.php:100
static countCache($arCacheDebug, &$cache_count)
Определения keeper.php:523
static removeQueries(&$arQueryDebug, &$arIncludeDebug, $slow_sql_time, $preserveComponents=false)
Определения keeper.php:388
static countComponents(&$comps_count, &$comps_time, $arIncludeDebug)
Определения keeper.php:461
static OnAfterAfterEpilog()
Определения keeper.php:117
static OnBeforeAfterEpilog()
Определения keeper.php:108
static removeCaches($large_cache_size, &$arCacheDebug, &$arIncludeDebug)
Определения keeper.php:476
static saveCaches($HIT_ID, $COMP_ID, $arCacheDebug, &$NN)
Определения keeper.php:625
static SetPageTimes($START_EXEC_CURRENT_TIME, &$arFields)
Определения keeper.php:308
static saveQueries($HIT_ID, $COMP_ID, $arQueryDebug, &$NN)
Определения keeper.php:580
static OnPageStart()
Определения keeper.php:46
static restoreDebugMode()
Определения keeper.php:88
$arFields
Определения dblapprove.php:5
const START_EXEC_EPILOG_AFTER_1
Определения epilog_admin_after.php:16
const START_EXEC_EPILOG_BEFORE_1
Определения epilog_admin_before.php:11
perfmonErrorHandler($errno, $errstr, $errfile, $errline)
Определения keeper.php:3
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
const START_EXEC_TIME
Определения start.php:12
RegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $SORT=100, $TO_PATH="", $TO_METHOD_ARG=[])
Определения tools.php:5295
UnRegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $TO_PATH="", $TO_METHOD_ARG=[])
Определения tools.php:5289
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
const START_EXEC_PROLOG_AFTER_1
Определения prolog_after.php:20
const START_EXEC_PROLOG_AFTER_2($APPLICATION->GetShowIncludeAreas())
Определения prolog_after.php:136
return false
Определения prolog_main_admin.php:185
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$GLOBALS['_____370096793']
Определения update_client.php:1