Merge pull request #431 from xmujay/0609_monitor
[phpmyadmin/aamir.git] / server_status_queries.php
blobfebdbb85b6b91e564cf15cd8aeccf0a29645ff8c
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Displays query statistics for the server
6 * @package PhpMyAdmin
7 */
9 require_once 'libraries/common.inc.php';
10 require_once 'libraries/server_common.inc.php';
11 require_once 'libraries/ServerStatusData.class.php';
12 if (PMA_DRIZZLE) {
13 $server_master_status = false;
14 $server_slave_status = false;
15 } else {
16 include_once 'libraries/replication.inc.php';
17 include_once 'libraries/replication_gui.lib.php';
20 $ServerStatusData = new PMA_ServerStatusData();
22 $response = PMA_Response::getInstance();
23 $header = $response->getHeader();
24 $scripts = $header->getScripts();
25 $scripts->addFile('server_status_queries.js');
26 /* < IE 9 doesn't support canvas natively */
27 if (PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER < 9) {
28 $scripts->addFile('jqplot/excanvas.js');
31 // for charting
32 $scripts->addFile('jqplot/jquery.jqplot.js');
33 $scripts->addFile('jqplot/plugins/jqplot.pieRenderer.js');
34 $scripts->addFile('jqplot/plugins/jqplot.canvasTextRenderer.js');
35 $scripts->addFile('jqplot/plugins/jqplot.canvasAxisLabelRenderer.js');
36 $scripts->addFile('jqplot/plugins/jqplot.dateAxisRenderer.js');
37 $scripts->addFile('jqplot/plugins/jqplot.highlighter.js');
38 $scripts->addFile('jqplot/plugins/jqplot.cursor.js');
39 $scripts->addFile('jquery/jquery.tablesorter.js');
40 $scripts->addFile('server_status_sorter.js');
42 // Add the html content to the response
43 $response->addHTML('<div>');
44 $response->addHTML($ServerStatusData->getMenuHtml());
45 $response->addHTML(PMA_getQueryStatisticsHtml($ServerStatusData));
46 $response->addHTML('</div>');
47 exit;
49 /**
50 * Returns the html content for the query statistics
52 * @param object $ServerStatusData An instance of the PMA_ServerStatusData class
54 * @return string
56 function PMA_getQueryStatisticsHtml($ServerStatusData)
58 $retval = '';
60 $hour_factor = 3600 / $ServerStatusData->status['Uptime'];
61 $used_queries = $ServerStatusData->used_queries;
62 $total_queries = array_sum($used_queries);
64 $retval .= '<h3 id="serverstatusqueries">';
65 /* l10n: Questions is the name of a MySQL Status variable */
66 $retval .= sprintf(
67 __('Questions since startup: %s'),
68 PMA_Util::formatNumber($total_queries, 0)
70 $retval .= ' ';
71 $retval .= PMA_Util::showMySQLDocu(
72 'server-status-variables',
73 'server-status-variables',
74 false,
75 'statvar_Questions'
77 $retval .= '<br />';
78 $retval .= '<span>';
79 $retval .= '&oslash; ' . __('per hour:') . ' ';
80 $retval .= PMA_Util::formatNumber($total_queries * $hour_factor, 0);
81 $retval .= '<br />';
82 $retval .= '&oslash; ' . __('per minute:') . ' ';
83 $retval .= PMA_Util::formatNumber($total_queries * 60 / $ServerStatusData->status['Uptime'], 0);
84 $retval .= '<br />';
85 if ($total_queries / $ServerStatusData->status['Uptime'] >= 1) {
86 $retval .= '&oslash; ' . __('per second:') . ' ';
87 $retval .= PMA_Util::formatNumber($total_queries / $ServerStatusData->status['Uptime'], 0);
89 $retval .= '</span>';
90 $retval .= '</h3>';
92 $retval .= PMA_getServerStatusQueriesDetailsHtml($ServerStatusData);
94 return $retval;
97 /**
98 * Returns the html content for the query details
100 * @param object $ServerStatusData An instance of the PMA_ServerStatusData class
102 * @return string
104 function PMA_getServerStatusQueriesDetailsHtml($ServerStatusData)
106 $hour_factor = 3600 / $ServerStatusData->status['Uptime'];
107 $used_queries = $ServerStatusData->used_queries;
108 $total_queries = array_sum($used_queries);
109 // reverse sort by value to show most used statements first
110 arsort($used_queries);
112 $odd_row = true;
113 $perc_factor = 100 / $total_queries; //(- $ServerStatusData->status['Connections']);
115 $retval = '<table id="serverstatusqueriesdetails" class="data sortable noclick">';
116 $retval .= '<col class="namecol" />';
117 $retval .= '<col class="valuecol" span="3" />';
118 $retval .= '<thead>';
119 $retval .= '<tr><th>' . __('Statements') . '</th>';
120 $retval .= '<th>';
121 /* l10n: # = Amount of queries */
122 $retval .= __('#');
123 $retval .= '</th>';
124 $retval .= '<th>&oslash; ' . __('per hour') . '</th>';
125 $retval .= '<th>%</th>';
126 $retval .= '</tr>';
127 $retval .= '</thead>';
128 $retval .= '<tbody>';
130 $chart_json = array();
131 $query_sum = array_sum($used_queries);
132 $other_sum = 0;
133 foreach ($used_queries as $name => $value) {
134 $odd_row = !$odd_row;
135 // For the percentage column, use Questions - Connections, because
136 // the number of connections is not an item of the Query types
137 // but is included in Questions. Then the total of the percentages is 100.
138 $name = str_replace(array('Com_', '_'), array('', ' '), $name);
139 // Group together values that make out less than 2% into "Other", but only
140 // if we have more than 6 fractions already
141 if ($value < $query_sum * 0.02 && count($chart_json)>6) {
142 $other_sum += $value;
143 } else {
144 $chart_json[$name] = $value;
146 $retval .= '<tr class="';
147 $retval .= $odd_row ? 'odd' : 'even';
148 $retval .= '">';
149 $retval .= '<th class="name">' . htmlspecialchars($name) . '</th>';
150 $retval .= '<td class="value">';
151 $retval .= htmlspecialchars(PMA_Util::formatNumber($value, 5, 0, true));
152 $retval .= '</td>';
153 $retval .= '<td class="value">';
154 $retval .= htmlspecialchars(
155 PMA_Util::formatNumber($value * $hour_factor, 4, 1, true)
157 $retval .= '</td>';
158 $retval .= '<td class="value">';
159 $retval .= htmlspecialchars(
160 PMA_Util::formatNumber($value * $perc_factor, 0, 2)
162 $retval .= '</td>';
163 $retval .= '</tr>';
165 $retval .= '</tbody>';
166 $retval .= '</table>';
168 $retval .= '<div id="serverstatusquerieschart"></div>';
169 $retval .= '<div id="serverstatusquerieschart_data" style="display:none;">';
170 if ($other_sum > 0) {
171 $chart_json[__('Other')] = $other_sum;
173 $retval .= htmlspecialchars(json_encode($chart_json));
174 $retval .= '</div>';
176 return $retval;