œ_#ÁÕ§TE NAŒ“KeÉ:”(åŽÖJÞùY’‚ñùž7; «]Û ý`8g“¯B© jdÖÖ¸ðzœ¸¦4Ç3Kó^(ÍÖ¼ Õ€pvìwšõB4df$Èü^0˜…åÌC$#2FŽÑ§±¦ÛZ/÷š&m£ñzÒÖ ’.Î]!Î;ƒ(Õ–¢d/—#Kª+tZyuÏB>NÛÖ†(¸ŒSà'³„Y˜´-_•¦¼´˜OlNK§¶ÒàŠˆTHµƒeTPå·fïM’…þuÏÍüp6دªE£åü‡ZØ'CKF#â«;‹eyO Qp„†l"ö1èíÙP ÏŒúl! BÝ2ñª•_VÁÉ÷3eu`–F¸ìI--ö<¿žë¯4õ캿¢)34Å{wMÉ2ÆÖFŸ¥`e9Ú¶¸P‡.”FÔï rY ‚²ÈTB,{ÛœéJ}«àQ4¹0Rû4D‚B§S‘ dO•v¾„™Sן¯3FeŸ™«+ÓâwH dÕÛÌì·P4ë&¥#rÜÉ Ù¦ê†ý·xòqk¯2,¹§™E\ék‚×Sá”ÚºÙ⺷ö£6…à ʾ qSá³Å|;àû}4Ÿ($â¹VY~óÍ!èÜÒŒËX½Ù1j‚VíÍŸš³+œ]«½g{_{/vµ½\¢¶vÉWKÿ:ñám½ ¥ S²x‘t ŽšÝÙÿÀÇ^ný PK IW™k‚½÷ á _rels/.relsUT dìd dìd dìd’ÏNÃ0‡ï{ŠÈ÷ÕÝ@¡¥» ¤Ý*`%îÑ&QâÁöö‚J£ì°cœŸ¿|¶²ÙÆA½rL½wVE Šñ¶w†çúay * 9Kƒw¬áÈ ¶ÕbóÄIîI]’Ê—4t"á1™ŽGJ…ìòMããH’±Å@æ…ZÆuYÞ`üÍ€jÂT;«!îì T}|Û7MoøÞ›ýÈNN<|v–í2ÄÜ¥ÏèšbË¢Ázó˜Ë )„"£OÏ7ú{ZYÈ’yÞç#1'tuÉM?6o>Z´_å9›ëKÚ˜}?þ³žÏÌ·N>fµx PK IWª½e ¢ U € word/document.xmlUT dìdPK IWþË3” z €J¢ word/settings.xmlUT dìdPK IWC‡{š' ƒ €¤ docProps/custom.xmlUT dìdPK IW츱=Œ €‡¥ [Content_Types].xmlUT dìdPK IWV%ë±" €U§ docProps/app.xmlUT dìdPK IW€RŒ 3 €¶¨ docProps/core.xmlUT dìdPK IWkòDn ô €ª word/_rels/document.xml.relsUT dìdPK IW;$î €Î« word/fontTable.xmlUT dìdPK IW+åäz] ÷. €ý¬ word/numbering.xmlUT dìdPK IW¤2×r- ¿ €›° word/styles.xmlUT dìdPK IWMFÒ ø €´ word/header1.xmlUT dìdPK IWF— T e €· word/media/image1.jpegUT dìdPK IW!Yéáå €°Ë word/media/image2.pngUT dìdPK IW°Àºë ú €ÙÌ word/media/image3.pngUT dìdPK IW$“†ª L €Î word/footer1.xmlUT dìdPK IWzaGôM €ñÑ word/footer2.xmlUT dìdPK IW–µâº P €}Õ word/theme/theme1.xmlUT dìdPK IW™k‚½÷ á €{Û _rels/.relsUT PK ! bîh^ [Content_Types].xml ¢( ¬”ËNÃ0E÷HüCä-Jܲ@5í‚Ç*Q>Àēƪc[žiiÿž‰ûB¡j7±ÏÜ{2ñÍh²nm¶‚ˆÆ»R‹ÈÀU^7/ÅÇì%¿’rZYï @1__f› ˜q·ÃR4DáAJ¬h>€ãÚÇV߯¹ªZ¨9ÈÛÁàNVÞ8Ê©ÓãÑÔji){^óã-I‹"{Üv^¥P!XS)bR¹rú—K¾s(¸3Õ`cÞ0†½ÝÎß»¾7M4²©ŠôªZÆk+¿|\|z¿(Ž‹ôPúº6h_-[ž@!‚ÒØ Pk‹´2nÏ}Ä?£LËð Ýû%áÄßdºždN"m,à¥ÇžDO97*‚~§Èɸ8ÀOíc|n¦Ñ äEøÿöéºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þ ÿÿ PK ! µU0#ô L _rels/.rels ¢( ¬’MOÃ0†ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w†—úqu *&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBS톰·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨Þ ÿÿ PK ! Q48wÛ — xl/workbook.xml¤UÙnâ0}iþ!cñ‡ *–¢AšVU×$dC¬&vÆv UÕŸë@XÊK§/¹p|Žï¹N÷b“¥Ö •Š ÞC¸î"‹òHÄŒ¯zèá~b·‘¥4á1I§=ôJºèÿüÑ] ù¼âÙ ®z(Ñ:GE ͈ª‹œrˆ,…̈†©\9*—”Ä*¡Tg©ã¹nàd„q´Eåg0ÄrÉ":Q‘Q®· ’¦D}•°\UhYô¸ŒÈç"·#‘å ±`)Ó¯%(²²(œ®¸d‘‚ì nZ w v¡ñª• t¶TÆ")”Xê:@;[Ògú±ë`|²›ó=ø’ïHúÂL÷¬dðEVÁ+8€a÷Ûh¬Uz%„Íû"ZsÏÍCýî’¥ôqk]‹äù5ÉL¦Rd¥Dé˘i÷P ¦bM/|dÉ",…¨çãFNoçiûéë>aêiçsó#ðÄ ÕTr¢éHp ÜIú®ÝJìQ"ÀÜÖ-ý[0I¡¦ÀZ Z…d¡nˆN¬B¦=4 g %PDF-1.4 %âãÏÓ 3 0 obj << /Linearized 1 /L 422775 ÿØÿà JFIF ÿÛ C ÿÛ C ÿÀ X" ÿÄ ÿÄ H !1A"Qaq2‘¡#±ÁBRÑ3Cbrá$S‚¢²ð4ñ%6DTc’ÂsÿÄ ÿÄ = !1AQ"aq‘Á2R¡±BÑð#3br’²4á$‚¢ÂñÿÚ ? áHBßÝ`„! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! ! stream
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
$Id$
(c) 2011 Jerome Loyet
The PHP License, version 3.01
This is sample real-time status page for FPM. You can change it to better fit your needs.
-->
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
body {background-color: #ffffff; color: #000000;}
body, td, th, h1, h2 {font-family: sans-serif;}
pre {margin: 0px; font-family: monospace;}
a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse;}
.center {text-align: center;}
.center table { margin-left: auto; margin-right: auto; text-align: left;}
.center th { text-align: center !important; }
td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
.e {background-color: #ccccff; font-weight: bold; color: #000000;}
.h {background-color: #9999cc; font-weight: bold; color: #000000;}
.v {background-color: #cccccc; color: #000000;}
.w {background-color: #ccccff; color: #000000;}
.h th {
cursor: pointer;
}
img {float: right; border: 0px;}
hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
</style>
<title>PHP-FPM status page</title>
<meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE" /></head>
<body>
<div class="center">
<table border="0" cellpadding="3" width="95%">
<tr class="h">
<td>
<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>
</td>
</tr>
</table>
<br />
<table border="0" cellpadding="3" width="95%">
<tr><td class="e">Status URL</td><td class="v"><input type="text" id="url" size="45" /></td></tr>
<tr><td class="e">Ajax status</td><td class="v" id="status"></td></tr>
<tr><td class="e">Refresh Rate</td><td class="v"><input type="text" id="rate" value="1" /></td></tr>
<tr>
<td class="e">Actions</td>
<td class="v">
<button onclick="javascript:refresh();">Manual Refresh</button>
<button id="play" onclick="javascript:playpause();">Play</button>
</td>
</tr>
</table>
<h1>Pool Status</h1>
<table border="0" cellpadding="3" width="95%" id="short">
<tr style="display: none;"><td> </td></tr>
</table>
<h1>Active Processes status</h1>
<table border="0" cellpadding="3" width="95%" id="active">
<tr class="h"><th>PID↓</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>
</table>
<h1>Idle Processes status</h1>
<table border="0" cellpadding="3" width="95%" id="idle">
<tr class="h"><th>PID↓</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>
</table>
</div>
<p>
<a href="http://validator.w3.org/check?uri=referer">
<img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" />
</a>
</p>
<script type="text/javascript">
<!--
var xhr_object = null;
var doc_url = document.getElementById("url");
var doc_rate = document.getElementById("rate");
var doc_status = document.getElementById("status");
var doc_play = document.getElementById("play");
var doc_short = document.getElementById("short");
var doc_active = document.getElementById("active");
var doc_idle = document.getElementById("idle");
var rate = 0;
var play=0;
var delay = 1000;
var order_active_index = 0;
var order_active_reverse = 0;
var order_idle_index = 0;
var order_idle_reverse = 0;
var sort_index;
var sort_order;
doc_url.value = location.protocol + '//' + location.host + "/status?json&full";
ths = document.getElementsByTagName("th");
for (var i=0; i<ths.length; i++) {
var th = ths[i];
if (th.parentNode.className == "h") {
th.onclick = function() { order(this); return false; };
}
}
xhr_object = create_ajax();
function create_ajax() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
var names = [
"Msxml2.XMLHTTP.6.0",
"Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP",
"Microsoft.XMLHTTP"
];
for(var i in names)
{
try {
return new ActiveXObject(names[i]);
} catch(e){}
}
alert("Browser not compatible ...");
}
function order(cell) {
var table;
if (cell.constructor != HTMLTableCellElement && cell.constructor != HTMLTableHeaderCellElement) {
return;
}
table = cell.parentNode.parentNode.parentNode;
if (table == doc_active) {
if (order_active_index == cell.cellIndex) {
if (order_active_reverse == 0) {
cell.innerHTML = cell.innerHTML.replace(/.$/, "↑");
order_active_reverse = 1;
} else {
cell.innerHTML = cell.innerHTML.replace(/.$/, "↓");
order_active_reverse = 0;
}
} else {
var c = doc_active.rows[0].cells[order_active_index];
c.innerHTML = c.innerHTML.replace(/.$/, "");
cell.innerHTML = cell.innerHTML.replace(/$/, order_active_reverse == 0 ? "↓" : "↑");
order_active_index = cell.cellIndex;
}
reorder(table, order_active_index, order_active_reverse);
return;
}
if (table == doc_idle) {
if (order_idle_index == cell.cellIndex) {
if (order_idle_reverse == 0) {
cell.innerHTML = cell.innerHTML.replace(/.$/, "↑");
order_idle_reverse = 1;
} else {
cell.innerHTML = cell.innerHTML.replace(/.$/, "↓");
order_idle_reverse = 0;
}
} else {
var c = doc_idle.rows[0].cells[order_idle_index];
c.innerHTML = c.innerHTML.replace(/.$/, "");
cell.innerHTML = cell.innerHTML.replace(/$/, order_idle_reverse == 0 ? "↓" : "↑");
order_idle_index = cell.cellIndex;
}
reorder(table, order_idle_index, order_idle_reverse);
return;
}
}
function reorder(table, index, order) {
var rows = [];
while (table.rows.length > 1) {
rows.push(table.rows[1]);
table.deleteRow(1);
}
sort_index = index;
sort_order = order;
rows.sort(sort_table);
for (var i in rows) {
table.appendChild(rows[i]);
}
var odd = 1;
for (var i=1; i<table.rows.length; i++) {
table.rows[i].className = odd++ % 2 == 0 ? "v" : "w";
}
return;
}
function sort_table(a, b) {
if (a.cells[0].tagName == "TH") return -1;
if (b.cells[0].tagName == "TH") return 1;
if (a.cells[sort_index].__search_t == 0) { /* integer */
if (!sort_order) return a.cells[sort_index].__search_v - b.cells[sort_index].__search_v;
return b.cells[sort_index].__search_v - a.cells[sort_index].__search_v;;
}
/* string */
if (!sort_order) return a.cells[sort_index].__search_v.localeCompare(b.cells[sort_index].__search_v);
else return b.cells[sort_index].__search_v.localeCompare(a.cells[sort_index].__search_v);
}
function playpause() {
rate = 0;
if (play) {
play = 0;
doc_play.innerHTML = "Play";
doc_rate.disabled = false;
} else {
delay = parseInt(doc_rate.value);
if (!delay || delay < 1) {
doc_status.innerHTML = "Not valid 'refresh' value";
return;
}
play = 1;
doc_rate.disabled = true;
doc_play.innerHTML = "Pause";
setTimeout("callback()", delay * 1000);
}
}
function refresh() {
if (xhr_object == null) return;
if (xhr_object.readyState > 0 && xhr_object.readyState < 4) {
return; /* request is running */
}
xhr_object.open("GET", doc_url.value, true);
xhr_object.onreadystatechange = function() {
switch(xhr_object.readyState) {
case 0:
doc_status.innerHTML = "uninitialized";
break;
case 1:
doc_status.innerHTML = "loading ...";
break;
case 2:
doc_status.innerHTML = "loaded";
break;
case 3:
doc_status.innerHTML = "interactive";
break;
case 4:
doc_status.innerHTML = "complete";
if (xhr_object.status == 200) {
fpm_status(xhr_object.responseText);
} else {
doc_status.innerHTML = "Error " + xhr_object.status;
}
break;
}
}
xhr_object.send();
}
function callback() {
if (!play) return;
refresh();
setTimeout("callback()", delay * 1000);
}
function fpm_status(txt) {
var json = null;
while (doc_short.rows.length > 0) {
doc_short.deleteRow(0);
}
while (doc_active.rows.length > 1) {
doc_active.deleteRow(1);
}
while (doc_idle.rows.length > 1) {
doc_idle.deleteRow(1);
}
try {
json = JSON.parse(txt);
} catch (e) {
doc_status.innerHTML = "Error while parsing json: '" + e + "': <br /><pre>" + txt + "</pre>";
return;
}
for (var key in json) {
if (key == "processes") continue;
if (key == "state") continue;
var row = doc_short.insertRow(doc_short.rows.length);
var value = json[key];
if (key == "start time") {
value = new Date(value * 1000).toLocaleString();
}
if (key == "start since") {
value = time_s(value);
}
var cell = row.insertCell(row.cells.length);
cell.className = "e";
cell.innerHTML = key;
cell = row.insertCell(row.cells.length);
cell.className = "v";
cell.innerHTML = value;
}
if (json.processes) {
process_full(json.processes, doc_active, "Idle", 0, 0);
reorder(doc_active, order_active_index, order_active_reverse);
process_full(json.processes, doc_idle, "Idle", 1, 1);
reorder(doc_idle, order_idle_index, order_idle_reverse);
}
}
function process_full(processes, table, state, equal, cpumem) {
var odd = 1;
for (var i in processes) {
var proc = processes[i];
if ((equal && proc.state == state) || (!equal && proc.state != state)) {
var c = odd++ % 2 == 0 ? "v" : "w";
var row = table.insertRow(-1);
row.className = c;
row.insertCell(-1).innerHTML = proc.pid;
row.cells[row.cells.length - 1].__search_v = proc.pid;
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = date(proc['start time'] * 1000);;
row.cells[row.cells.length - 1].__search_v = proc['start time'];
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = time_s(proc['start since']);
row.cells[row.cells.length - 1].__search_v = proc['start since'];
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = proc.requests;
row.cells[row.cells.length - 1].__search_v = proc.requests;
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = time_u(proc['request duration']);
row.cells[row.cells.length - 1].__search_v = proc['request duration'];
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = proc['request method'];
row.cells[row.cells.length - 1].__search_v = proc['request method'];
row.cells[row.cells.length - 1].__search_t = 1;
row.insertCell(-1).innerHTML = proc['request uri'];
row.cells[row.cells.length - 1].__search_v = proc['request uri'];
row.cells[row.cells.length - 1].__search_t = 1;
row.insertCell(-1).innerHTML = proc['content length'];
row.cells[row.cells.length - 1].__search_v = proc['content length'];
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = proc.user;
row.cells[row.cells.length - 1].__search_v = proc.user;
row.cells[row.cells.length - 1].__search_t = 1;
row.insertCell(-1).innerHTML = proc.script;
row.cells[row.cells.length - 1].__search_v = proc.script;
row.cells[row.cells.length - 1].__search_t = 1;
if (cpumem) {
row.insertCell(-1).innerHTML = cpu(proc['last request cpu']);
row.cells[row.cells.length - 1].__search_v = proc['last request cpu'];
row.cells[row.cells.length - 1].__search_t = 0;
row.insertCell(-1).innerHTML = memory(proc['last request memory']);
row.cells[row.cells.length - 1].__search_v = proc['last request memory'];
row.cells[row.cells.length - 1].__search_t = 0;
}
}
}
}
function date(d) {
var t = new Date(d);
var r = "";
r += (t.getDate() < 10 ? '0' : '') + t.getDate();
r += '/';
r += (t.getMonth() + 1 < 10 ? '0' : '') + (t.getMonth() + 1);
r += '/';
r += t.getFullYear();
r += ' ';
r += (t.getHours() < 10 ? '0' : '') + t.getHours();
r += ':';
r += (t.getMinutes() < 10 ? '0' : '') + t.getMinutes();
r += ':';
r += (t.getSeconds() < 10 ? '0' : '') + t.getSeconds();
return r;
}
function cpu(c) {
if (c == 0) return 0;
return c + "%";
}
function memory(mem) {
if (mem == 0) return 0;
if (mem < 1024) {
return mem + "B";
}
if (mem < 1024 * 1024) {
return mem/1024 + "KB";
}
if (mem < 1024*1024*1024) {
return mem/1024/1024 + "MB";
}
}
function time_s(t) {
var r = "";
if (t < 60) {
return t + 's';
}
r = (t % 60) + 's';
t = Math.floor(t / 60);
if (t < 60) {
return t + 'm ' + r;
}
r = (t % 60) + 'm ' + r;
t = Math.floor(t/60);
if (t < 24) {
return t + 'h ' + r;
}
return Math.floor(t/24) + 'd ' + (t % 24) + 'h ' + t;
}
function time_u(t) {
var r = "";
if (t < 1000) {
return t + 'µs'
}
r = (t % 1000) + 'µs';
t = Math.floor(t / 1000);
if (t < 1000) {
return t + 'ms ' + r;
}
return time_s(Math.floor(t/1000)) + ' ' + (t%1000) + 'ms ' + r;
}
-->
</script>
</body>
</html>