Current File : //proc/thread-self/root/usr/local/lsws/admin/html/classes/ws/ReqProbe.php |
<?php
define("FLD_IP", 0);
define("FLD_KAReqServed", 1);
define("FLD_Mode", 2);
define("FLD_ReqTime", 3);
define("FLD_InBytesCurrent", 4);
define("FLD_InBytesTotal", 5);
define("FLD_OutBytesCurrent", 6);
define("FLD_OutBytesTotal", 7);
define("FLD_VHost", 8);
define("FLD_Handler", 9);
define("FLD_ExtappProcessTime", 10);
define("FLD_ExtappSocket", 11);
define("FLD_ExtappPid", 12);
define("FLD_ExtappConnReqServed", 13);
define("FLD_Url", 14);
class ReqProbe
{
public $filters = null;
public $req_detail = null;
//127.0.0.1 0 WR 17.2 92 92 694 -1 Example example_lsphp 17 /tmp/lshttpd/example_lsphp.997 5390 0 "GET /sslow.php HTTP/1.1"
/*
*
0: 127.0.0.1, IP
1: 0, keep-alived requests
2: WR, connection status
3: 53.0, total processing time
4/5: 513/513, in bytes/total bytes
6/7: 469/-1, out bytes/total bytes (-1 don't know)
8: Example, vh name
9: example_lsphp, handler name (external app name, static file is "static")
.......
10: 53, extapp process time
11: /tmp/lshttpd/example_lsphp.519, extapp socket
12: 17587, extapp pid
13: 0 reqs processed through extapp connection
14: "GET /sslow.php HTTP/1.1", req_url
*/
function __construct()
{
$this->filters = null;
$this->req_detail = null;
}
function retrieve($filters, &$total_count, &$filtered_count)
{
$this->filters = $filters;
$vhname_filter = '';
$ip_filter = '';
$url_filter = '';
$reqtime_filter = '';
$extproctime_filter = '';
$reqbodysize_filter = '';
$outsize_filter = '';
/* $filters = array('SHOW_TOP' => $req_show_top,
'SHOW_SORT' => $req_show_sort,
'VHNAME' => $vhname_filter,
'IP' => $ip_filter,
'URL' => $url_filter,
'REQ_TIME' => $reqtime_filter,
'PROC_TIME' => $extproctime_filter,
'IN'=> $reqbodysize_filter,
'OUT' => $outsize_filter);
* */
$show_top = (int) $filters['SHOW_TOP'];
$show_sort = $filters['SHOW_SORT'];
$has_filter = false;
$sortBy = FLD_ReqTime; // default
if ($show_sort == 'vhname') {
$sortBy = FLD_VHost;
} elseif ($show_sort == 'client') {
$sortBy = FLD_IP;
} elseif ($show_sort == 'req_time') {
$sortBy = FLD_ReqTime;
} elseif ($show_sort == 'extproc_time') {
$sortBy = FLD_ExtappProcessTime;
} elseif ($show_sort == 'in') {
$sortBy = FLD_InBytesTotal;
} elseif ($show_sort == 'out') {
$sortBy = FLD_OutBytesCurrent;
}
if ($filters['VHNAME'] != null) {
$vhname_filter = $filters['VHNAME'];
$has_filter = true;
}
if ($filters['IP'] != null) {
$ip_filter = $filters['IP'];
$has_filter = true;
}
if ($filters['URL'] != null) {
$url_filter = $filters['URL'];
$has_filter = true;
}
if ($filters['REQ_TIME'] != null) {
$reqtime_filter = $filters['REQ_TIME'];
$has_filter = true;
}
if ($filters['PROC_TIME'] != null) {
$extproctime_filter = $filters['PROC_TIME'];
$has_filter = true;
}
if ($filters['IN'] != null) {
$reqbodysize_filter = 1024 * floatval($filters['IN']);
$has_filter = true;
}
if ($filters['OUT'] != null) {
$outsize_filter = 1024 * floatval($filters['OUT']);
$has_filter = true;
}
$contents = $this->getStatusDetail();
if ($contents == false) {
return false;
}
$full_list = explode("\n", $contents);
$count = count($full_list);
//remove last empty line
if (trim($full_list[$count - 1]) == '') {
$count --;
}
$total_count = $count;
$filtered_list = [];
$sorted_list = [];
if ($has_filter) {
$j = 0;
for ($i = 0; $i < $count; ++$i) {
$s2 = explode("\t", $full_list[$i]);
if ($reqtime_filter != '') {
if ($s2[FLD_ReqTime] <= $reqtime_filter) {
continue;
}
}
if ($extproctime_filter != '') {
if ($s2[FLD_ExtappProcessTime] <= $extproctime_filter) {
continue;
}
}
if ($reqbodysize_filter != '') {
if ($s2[FLD_InBytesTotal] <= $reqbodysize_filter) {
continue;
}
}
if ($outsize_filter != '') {
if ($s2[FLD_OutBytesCurrent] <= $outsize_filter) {
continue;
}
}
if ($ip_filter != '') {
if (!preg_match("/$ip_filter/", $s2[FLD_IP])) {
continue;
}
}
if ($vhname_filter != '') {
if (!preg_match("/$vhname_filter/i", $s2[FLD_VHost])) {
continue;
}
}
if ($url_filter != '') {
if (!preg_match("/$url_filter/i", $s2[FLD_Url])) {
continue;
}
}
$filtered_list[$j] = $full_list[$i];
$sorted_list["{$j}a"] = $s2[$sortBy];
$j ++;
}
} else {
$filtered_list = &$full_list;
for ($i = 0; $i < $count; ++$i) {
$s2 = explode("\t", $full_list[$i]);
$sorted_list["{$i}a"] = $s2[$sortBy];
}
}
if ($sortBy == FLD_VHost || $sortBy == FLD_IP) {
//reg sort
asort($sorted_list);
} else {
//reverse sort
arsort($sorted_list, SORT_NUMERIC);
}
if ($show_top == 0) {
$show_top = count($sorted_list);
}
$cut = 0;
$final_list = [];
foreach ($sorted_list as $ia => $v) {
$index = (int) (rtrim($ia, 'a'));
$final_list[$cut++] = $filtered_list[$index];
if ($cut == $show_top) {
break;
}
}
$filtered_count = count($final_list);
return $final_list;
}
private function getStatusDetail()
{
$cmd = 'status:rpt=detail';
return Service::retrieveCommandData($cmd);
}
}