2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Server status monitor feature
8 declare(strict_types
=1);
10 use PhpMyAdmin\Controllers\Server\Status\MonitorController
;
11 use PhpMyAdmin\DatabaseInterface
;
12 use PhpMyAdmin\Di\Container
;
13 use PhpMyAdmin\Server\Status\Data
;
14 use PhpMyAdmin\Server\Status\Monitor
;
15 use PhpMyAdmin\Response
;
17 if (! defined('ROOT_PATH')) {
18 define('ROOT_PATH', __DIR__
. DIRECTORY_SEPARATOR
);
21 require_once ROOT_PATH
. 'libraries/common.inc.php';
22 require_once ROOT_PATH
. 'libraries/server_common.inc.php';
23 require_once ROOT_PATH
. 'libraries/replication.inc.php';
25 $container = Container
::getDefaultContainer();
26 $container->set(Response
::class, Response
::getInstance());
28 /** @var Response $response */
29 $response = $container->get(Response
::class);
31 /** @var DatabaseInterface $dbi */
32 $dbi = $container->get(DatabaseInterface
::class);
34 $controller = new MonitorController(
44 if ($response->isAjax()) {
45 // Send with correct charset
46 header('Content-Type: text/html; charset=UTF-8');
49 // real-time charting data
50 if ($response->isAjax() && isset($_POST['chart_data']) && $_POST['type'] === 'chartgrid') {
51 $response->addJSON($controller->chartingData([
52 'requiredData' => $_POST['requiredData'] ??
null,
54 } elseif ($response->isAjax() && isset($_POST['log_data']) && $_POST['type'] === 'slow') {
55 $response->addJSON($controller->logDataTypeSlow([
56 'time_start' => $_POST['time_start'] ??
null,
57 'time_end' => $_POST['time_end'] ??
null,
59 } elseif ($response->isAjax() && isset($_POST['log_data']) && $_POST['type'] === 'general') {
60 $response->addJSON($controller->logDataTypeGeneral([
61 'time_start' => $_POST['time_start'] ??
null,
62 'time_end' => $_POST['time_end'] ??
null,
63 'limitTypes' => $_POST['limitTypes'] ??
null,
64 'removeVariables' => $_POST['removeVariables'] ??
null,
66 } elseif ($response->isAjax() && isset($_POST['logging_vars'])) {
67 $response->addJSON($controller->loggingVars([
68 'varName' => $_POST['varName'] ??
null,
69 'varValue' => $_POST['varValue'] ??
null,
71 } elseif ($response->isAjax() && isset($_POST['query_analyzer'])) {
72 $response->addJSON($controller->queryAnalyzer([
73 'database' => $_POST['database'] ??
null,
74 'query' => $_POST['query'] ??
null,
77 $header = $response->getHeader();
78 $scripts = $header->getScripts();
79 $scripts->addFile('vendor/jquery/jquery.tablesorter.js');
80 $scripts->addFile('vendor/jquery/jquery.sortableTable.js');
82 $scripts->addFile('vendor/jqplot/jquery.jqplot.js');
83 $scripts->addFile('vendor/jqplot/plugins/jqplot.pieRenderer.js');
84 $scripts->addFile('vendor/jqplot/plugins/jqplot.enhancedPieLegendRenderer.js');
85 $scripts->addFile('vendor/jqplot/plugins/jqplot.canvasTextRenderer.js');
86 $scripts->addFile('vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js');
87 $scripts->addFile('vendor/jqplot/plugins/jqplot.dateAxisRenderer.js');
88 $scripts->addFile('vendor/jqplot/plugins/jqplot.highlighter.js');
89 $scripts->addFile('vendor/jqplot/plugins/jqplot.cursor.js');
90 $scripts->addFile('jqplot/plugins/jqplot.byteFormatter.js');
92 $scripts->addFile('server_status_monitor.js');
93 $scripts->addFile('server_status_sorter.js');
95 $response->addHTML($controller->index());