source: src/router/php7/sapi/fpm/status.html.in @ 31879

Last change on this file since 31879 was 31879, checked in by brainslayer, 3 months ago

update php

File size: 13.9 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<!--
4        $Id$
5        (c) 2011 Jerome Loyet
6        The PHP License, version 3.01
7        This is sample real-time status page for FPM. You can change it to better feet your needs.
8-->
9        <head>
10                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
11                <style type="text/css">
12                        body {background-color: #ffffff; color: #000000;}
13                        body, td, th, h1, h2 {font-family: sans-serif;}
14                        pre {margin: 0px; font-family: monospace;}
15                        a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
16                        a:hover {text-decoration: underline;}
17                        table {border-collapse: collapse;}
18                        .center {text-align: center;}
19                        .center table { margin-left: auto; margin-right: auto; text-align: left;}
20                        .center th { text-align: center !important; }
21                        td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
22                        h1 {font-size: 150%;}
23                        h2 {font-size: 125%;}
24                        .p {text-align: left;}
25                        .e {background-color: #ccccff; font-weight: bold; color: #000000;}
26                        .h {background-color: #9999cc; font-weight: bold; color: #000000;}
27
28                        .v {background-color: #cccccc; color: #000000;}
29                        .w {background-color: #ccccff; color: #000000;}
30
31                        .h th {
32                                cursor: pointer;
33                        }
34                        img {float: right; border: 0px;}
35                        hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
36                </style>
37        <title>PHP-FPM status page</title>
38        <meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE" /></head>
39        <body>
40                <div class="center">
41                        <table border="0" cellpadding="3" width="95%">
42                                <tr class="h">
43                                        <td>
44                                                <a href="http://www.php.net/"><img border="0" src="https://static.php.net/www.php.net/images/php.gif" alt="PHP Logo" /></a><h1 class="p">PHP-FPM real-time status page</h1>
45                                        </td>
46                                </tr>
47                        </table>
48                        <br />
49                        <table border="0" cellpadding="3" width="95%">
50                                <tr><td class="e">Status URL</td><td class="v"><input type="text" id="url" size="45" /></td></tr>
51                                <tr><td class="e">Ajax status</td><td class="v" id="status"></td></tr>
52                                <tr><td class="e">Refresh Rate</td><td class="v"><input type="text" id="rate" value="1" /></td></tr>
53                                <tr>
54                                        <td class="e">Actions</td>
55                                        <td class="v">
56                                                <button onclick="javascript:refresh();">Manual Refresh</button>
57                                                <button id="play" onclick="javascript:playpause();">Play</button>
58                                        </td>
59                                </tr>
60                        </table>
61                        <h1>Pool Status</h1>
62                        <table border="0" cellpadding="3" width="95%" id="short">
63                                <tr style="display: none;"><td>&nbsp;</td></tr>
64                        </table>
65                        <h1>Active Processes status</h1>
66                        <table border="0" cellpadding="3" width="95%" id="active">
67                                <tr class="h"><th>PID&darr;</th><th>Start Time</th><th>Start Since</th><th>Requests Served</th><th>Request Duration</th><th>Request method</th><th>Request URI</th><th>Content Length</th><th>User</th><th>Script</th></tr>
68                        </table>
69                        <h1>Idle Processes status</h1>
70                        <table border="0" cellpadding="3" width="95%" id="idle">
71                                <tr class="h"><th>PID&darr;</th><th>Start Time</th><th>Start Since</th><th>Requests Served</th><th>Request Duration</th><th>Request method</th><th>Request URI</th><th>Content Length</th><th>User</th><th>Script</th><th>Last Request %CPU</th><th>Last Request Memory</th></tr>
72                        </table>
73                </div>
74                <script type="text/javascript">
75<!--
76                        var xhr_object = null;
77                        var doc_url = document.getElementById("url");
78                        var doc_rate = document.getElementById("rate");
79                        var doc_status = document.getElementById("status");
80                        var doc_play = document.getElementById("play");
81                        var doc_short = document.getElementById("short");
82                        var doc_active = document.getElementById("active");
83                        var doc_idle = document.getElementById("idle");
84                        var rate = 0;
85                        var play=0;
86                        var delay = 1000;
87                        var order_active_index = 0;
88                        var order_active_reverse = 0;
89                        var order_idle_index = 0;
90                        var order_idle_reverse = 0;
91                        var sort_index;
92                        var sort_order;
93
94                        doc_url.value = location.protocol + '//' + location.host + "/status?json&full";
95
96                        ths = document.getElementsByTagName("th");
97                        for (var i=0; i<ths.length; i++) {
98                                var th = ths[i];
99                                if (th.parentNode.className == "h") {
100                                        th.onclick = function() { order(this); return false; };
101                                }
102                        }
103
104                        xhr_object = create_ajax();
105
106                        function create_ajax() {
107                                if (window.XMLHttpRequest) {
108                                        return new XMLHttpRequest();
109                                }
110                                var names = [
111                                        "Msxml2.XMLHTTP.6.0",
112                                        "Msxml2.XMLHTTP.3.0",
113                                        "Msxml2.XMLHTTP",
114                                        "Microsoft.XMLHTTP"
115                                ];
116                                for(var i in names)
117                                {
118                                        try {
119                                                return new ActiveXObject(names[i]);
120                                        }       catch(e){}
121                                }
122                                alert("Browser not compatible ...");
123                        }
124
125                        function order(cell) {
126                                var table;
127
128                                if (cell.constructor != HTMLTableCellElement && cell.constructor != HTMLTableHeaderCellElement) {
129                                        return;
130                                }
131
132                                table = cell.parentNode.parentNode.parentNode;
133
134                                if (table == doc_active) {
135                                        if (order_active_index == cell.cellIndex) {
136                                                if (order_active_reverse == 0) {
137                                                        cell.innerHTML = cell.innerHTML.replace(/.$/, "&uarr;");
138                                                        order_active_reverse = 1;
139                                                } else {
140                                                        cell.innerHTML = cell.innerHTML.replace(/.$/, "&darr;");
141                                                        order_active_reverse = 0;
142                                                }
143                                        } else {
144                                                var c = doc_active.rows[0].cells[order_active_index];
145                                                c.innerHTML = c.innerHTML.replace(/.$/, "");
146                                                cell.innerHTML = cell.innerHTML.replace(/$/, order_active_reverse == 0 ? "&darr;" : "&uarr;");
147                                                order_active_index = cell.cellIndex;
148                                        }
149                                        reorder(table, order_active_index, order_active_reverse);
150                                        return;
151                                }
152
153                                if (table == doc_idle) {
154                                        if (order_idle_index == cell.cellIndex) {
155                                                if (order_idle_reverse == 0) {
156                                                        cell.innerHTML = cell.innerHTML.replace(/.$/, "&uarr;");
157                                                        order_idle_reverse = 1;
158                                                } else {
159                                                        cell.innerHTML = cell.innerHTML.replace(/.$/, "&darr;");
160                                                        order_idle_reverse = 0;
161                                                }
162                                        } else {
163                                                var c = doc_idle.rows[0].cells[order_idle_index];
164                                                c.innerHTML = c.innerHTML.replace(/.$/, "");
165                                                cell.innerHTML = cell.innerHTML.replace(/$/, order_idle_reverse == 0 ? "&darr;" : "&uarr;");
166                                                order_idle_index = cell.cellIndex;
167                                        }
168                                        reorder(table, order_idle_index, order_idle_reverse);
169                                        return;
170                                }
171                        }
172
173                        function reorder(table, index, order) {
174                                var rows = [];
175                                while (table.rows.length > 1) {
176                                        rows.push(table.rows[1]);
177                                        table.deleteRow(1);
178                                }
179                                sort_index = index;
180                                sort_order = order;
181                                rows.sort(sort_table);
182                                for (var i in rows) {
183                                        table.appendChild(rows[i]);
184                                }
185                                var odd = 1;
186                                for (var i=1; i<table.rows.length; i++) {
187                                        table.rows[i].className = odd++ % 2 == 0 ? "v" : "w";
188                                }
189                                return;
190                        }
191
192                        function sort_table(a, b) {
193                                if (a.cells[0].tagName == "TH") return -1;
194                                if (b.cells[0].tagName == "TH") return 1;
195
196                                if (a.cells[sort_index].__search_t == 0) { /* integer */
197                                        if (!sort_order) return a.cells[sort_index].__search_v - b.cells[sort_index].__search_v;
198                                        return b.cells[sort_index].__search_v - a.cells[sort_index].__search_v;;
199                                }
200
201                                /* string */
202                                if (!sort_order) return a.cells[sort_index].__search_v.localeCompare(b.cells[sort_index].__search_v);
203                                else return b.cells[sort_index].__search_v.localeCompare(a.cells[sort_index].__search_v);
204                        }
205
206                        function playpause() {
207                                rate = 0;
208                                if (play) {
209                                        play = 0;
210                                        doc_play.innerHTML = "Play";
211                                        doc_rate.disabled = false;
212                                } else {
213                                        delay = parseInt(doc_rate.value);
214                                        if (!delay || delay < 1) {
215                                                doc_status.innerHTML = "Not valid 'refresh' value";
216                                                return;
217                                        }
218                                        play = 1;
219                                        doc_rate.disabled = true;
220                                        doc_play.innerHTML = "Pause";
221                                        setTimeout("callback()", delay * 1000);
222                                }
223                        }
224
225                        function refresh() {
226                                if (xhr_object == null) return;
227                                if (xhr_object.readyState > 0 && xhr_object.readyState < 4) {
228                                        return; /* request is running */
229                                }
230                                xhr_object.open("GET", doc_url.value, true);
231                                xhr_object.onreadystatechange = function() {
232                                        switch(xhr_object.readyState) {
233                                                case 0:
234                                                        doc_status.innerHTML = "uninitialized";
235                                                        break;
236                                                case 1:
237                                                        doc_status.innerHTML = "loading ...";
238                                                        break;
239                                                case 2:
240                                                        doc_status.innerHTML = "loaded";
241                                                        break;
242                                                case 3:
243                                                        doc_status.innerHTML = "interactive";
244                                                        break;
245                                                case 4:
246                                                        doc_status.innerHTML = "complete";
247                                                        if (xhr_object.status == 200) {
248                                                                fpm_status(xhr_object.responseText);
249                                                        } else {
250                                                                doc_status.innerHTML = "Error " + xhr_object.status;
251                                                        }
252                                                        break;
253                                        }
254                                }
255                                xhr_object.send();
256                        }
257
258                        function callback() {
259                                if (!play) return;
260                                refresh();
261                                setTimeout("callback()", delay * 1000);
262                        }
263
264                        function fpm_status(txt) {
265                                var json = null;
266
267                                while (doc_short.rows.length > 0) {
268                                        doc_short.deleteRow(0);
269                                }
270
271                                while (doc_active.rows.length > 1) {
272                                        doc_active.deleteRow(1);
273                                }
274
275                                while (doc_idle.rows.length > 1) {
276                                        doc_idle.deleteRow(1);
277                                }
278
279                                try {
280                                        json = JSON.parse(txt);
281                                } catch (e) {
282                                        doc_status.innerHTML =  "Error while parsing json: '" + e + "': <br /><pre>" + txt + "</pre>";
283                                        return;
284                                }
285
286                                for (var key in json) {
287                                        if (key == "processes") continue;
288                                        if (key == "state") continue;
289                                        var row = doc_short.insertRow(doc_short.rows.length);
290                                        var value = json[key];
291                                        if (key == "start time") {
292                                                value = new Date(value * 1000).toLocaleString();
293                                        }
294                                        if (key == "start since") {
295                                                value = time_s(value);
296                                        }
297                                        var cell = row.insertCell(row.cells.length);
298                                        cell.className = "e";
299                                        cell.innerHTML = key;
300
301                                        cell = row.insertCell(row.cells.length);
302                                        cell.className = "v";
303                                        cell.innerHTML = value;
304                                }
305
306                                if (json.processes) {
307                                        process_full(json.processes, doc_active, "Idle", 0, 0);
308                                        reorder(doc_active, order_active_index, order_active_reverse);
309
310                                        process_full(json.processes, doc_idle, "Idle", 1, 1);
311                                        reorder(doc_idle, order_idle_index, order_idle_reverse);
312                                }
313                        }
314
315                        function process_full(processes, table, state, equal, cpumem) {
316                                var odd = 1;
317
318                                for (var i in processes) {
319                                        var proc = processes[i];
320                                        if ((equal && proc.state == state) || (!equal && proc.state != state)) {
321                                                var c = odd++ % 2 == 0 ? "v" : "w";
322                                                var row = table.insertRow(-1);
323                                                row.className = c;
324                                                row.insertCell(-1).innerHTML = proc.pid;
325                                                row.cells[row.cells.length - 1].__search_v = proc.pid;
326                                                row.cells[row.cells.length - 1].__search_t = 0;
327
328                                                row.insertCell(-1).innerHTML = date(proc['start time'] * 1000);;
329                                                row.cells[row.cells.length - 1].__search_v = proc['start time'];
330                                                row.cells[row.cells.length - 1].__search_t = 0;
331
332                                                row.insertCell(-1).innerHTML = time_s(proc['start since']);
333                                                row.cells[row.cells.length - 1].__search_v = proc['start since'];
334                                                row.cells[row.cells.length - 1].__search_t = 0;
335
336                                                row.insertCell(-1).innerHTML = proc.requests;
337                                                row.cells[row.cells.length - 1].__search_v = proc.requests;
338                                                row.cells[row.cells.length - 1].__search_t = 0;
339
340                                                row.insertCell(-1).innerHTML = time_u(proc['request duration']);
341                                                row.cells[row.cells.length - 1].__search_v = proc['request duration'];
342                                                row.cells[row.cells.length - 1].__search_t = 0;
343
344                                                row.insertCell(-1).innerHTML = proc['request method'];
345                                                row.cells[row.cells.length - 1].__search_v = proc['request method'];
346                                                row.cells[row.cells.length - 1].__search_t = 1;
347
348                                                row.insertCell(-1).innerHTML = proc['request uri'];
349                                                row.cells[row.cells.length - 1].__search_v = proc['request uri'];
350                                                row.cells[row.cells.length - 1].__search_t = 1;
351
352                                                row.insertCell(-1).innerHTML = proc['content length'];
353                                                row.cells[row.cells.length - 1].__search_v = proc['content length'];
354                                                row.cells[row.cells.length - 1].__search_t = 0;
355
356                                                row.insertCell(-1).innerHTML = proc.user;
357                                                row.cells[row.cells.length - 1].__search_v = proc.user;
358                                                row.cells[row.cells.length - 1].__search_t = 1;
359
360                                                row.insertCell(-1).innerHTML = proc.script;
361                                                row.cells[row.cells.length - 1].__search_v = proc.script;
362                                                row.cells[row.cells.length - 1].__search_t = 1;
363
364                                                if (cpumem) {
365                                                        row.insertCell(-1).innerHTML = cpu(proc['last request cpu']);
366                                                        row.cells[row.cells.length - 1].__search_v = proc['last request cpu'];
367                                                        row.cells[row.cells.length - 1].__search_t = 0;
368
369                                                        row.insertCell(-1).innerHTML = memory(proc['last request memory']);
370                                                        row.cells[row.cells.length - 1].__search_v = proc['last request memory'];
371                                                        row.cells[row.cells.length - 1].__search_t = 0;
372                                                }
373                                        }
374                                }
375                        }
376
377                        function date(d) {
378                                var t = new Date(d);
379                                var r = "";
380
381                                r += (t.getDate() < 10 ? '0' : '') + t.getDate();
382                                r += '/';
383                                r += (t.getMonth() + 1 < 10 ? '0' : '') + (t.getMonth() + 1);
384                                r += '/';
385                                r += t.getFullYear();
386                                r += ' ';
387                                r += (t.getHours() < 10 ? '0' : '') + t.getHours();
388                                r += ':';
389                                r += (t.getMinutes() < 10 ? '0' : '') + t.getMinutes();
390                                r += ':';
391                                r += (t.getSeconds() < 10 ? '0' : '') + t.getSeconds();
392
393
394                                return r;
395                        }
396
397                        function cpu(c) {
398                                if (c == 0) return 0;
399                                return c + "%";
400                        }
401
402                        function memory(mem) {
403                                if (mem == 0) return 0;
404                                if (mem < 1024) {
405                                        return mem + "B";
406                                }
407                                if (mem < 1024 * 1024) {
408                                        return mem/1024 + "KB";
409                                }
410                                if (mem < 1024*1024*1024) {
411                                        return mem/1024/1024 + "MB";
412                                }
413                        }
414
415                        function time_s(t) {
416                                var r = "";
417                                if (t < 60) {
418                                        return t + 's';
419                                }
420
421                                r = (t % 60) + 's';
422                                t = Math.floor(t / 60);
423                                if (t < 60) {
424                                        return t + 'm ' + r;
425                                }
426
427                                r = (t % 60) + 'm ' + r;
428                                t = Math.floor(t/60);
429
430                                if (t < 24) {
431                                        return t + 'h ' + r;
432                                }
433
434                                return Math.floor(t/24) + 'd ' + (t % 24) + 'h ' + t;
435                        }
436
437                        function time_u(t) {
438                                var r = "";
439                                if (t < 1000) {
440                                        return t + '&micro;s'
441                                }
442
443                                r = (t % 1000) + '&micro;s';
444                                t = Math.floor(t / 1000);
445                                if (t < 1000) {
446                                        return t + 'ms ' + r;
447                                }
448
449                                return time_s(Math.floor(t/1000)) + ' ' + (t%1000) + 'ms ' + r;
450                        }
451-->
452                </script>
453        </body>
454</html>
Note: See TracBrowser for help on using the repository browser.