Вход Регистрация
Файл: severus/application/config/server_status.php
Строк: 235
<?php
error_reporting
(0);
$hash "%HASH%";

class 
Systeminfo {

    function 
getServiceStatus($checkservices) {
        
$services = array();
        
$errno false$errstr false$timeout 1;
        if(isset(
$checkservices) && !empty($checkservices)) {
            foreach(
$checkservices as $name => $port) {
                if(
is_numeric($port)) {
                    
$fp fsockopen("localhost"$port$errno$errstr$timeout); 
                    if (!
$fp) { 
                        
$services[$name] = "Offline"
                    } else { 
                        
$services[$name] = "Online"
                    } 
                    
fclose($fp); 
                } else {
                    
// advanced script
                    
$output trim(shell_exec($port));
                    if(
$output == "1") {
                        
$services[$name] = "Online"
                    } else 
$services[$name] = "Offline"
                }
            }
        }
        return 
$services;
    }
    function 
formatspeed($bytes)    {
        
$labels = array('B/s','KB/s','MB/s','GB/s','TB/s');
        for(
$x 0$bytes >= 1024 && $x < (count($labels) - 1); $bytes /= 1024$x++); 
        return 
round($bytes1).$labels[$x];
    }
    function 
time_ago($date,$timestamp=false,$diff=true$granularity=2) {
        
$date $timestamp===true $date strtotime($date);
        
$difference = ($diff === true) ? (time() - $date) : $date;
        
$retval '';
        
$periods = array('decade' => 315360000,
            
'year' => 31536000,
            
'month' => 2628000,
            
'week' => 604800
            
'day' => 86400,
            
'hour' => 3600,
            
'minute' => 60,
            
'second' => 1);
                                     
        foreach (
$periods as $key => $value) {
            if (
$difference >= $value) {
                
$time floor($difference/$value);
                
$difference %= $value;
                
$retval .= ($retval ' ' '').'<span>'.$time.'</span>'.' ';
                
$retval .= (($time 1) ? $key.'s' $key);
                
$granularity--;
            }
            if (
$granularity == '0') { break; }
        }
        return 
$retval;      
    }

}


class 
Linuxinfo extends Systeminfo {
    var 
$ldir "/proc";
    
    function 
getCpuInfo() {
        return 
$this->parsefile($this->ldir."/cpuinfo");
    }
    
    function 
getMemStat() {
        return 
$this->parsefile($this->ldir."/meminfo");
    }
    
    function 
getUptime() {
        
//GET SERVER LOADS 
        
$loadresult shell_exec('uptime');  
        
preg_match("/averages?: ([0-9.]+),[s]+([0-9.]+),[s]+([0-9.]+)/",$loadresult,$avgs); 
        
        
//GET SERVER UPTIME 
        
$uptime explode(' up '$loadresult); 
        
$uptime explode(','$uptime[1]); 
        
$uptime $uptime[0].', '.$uptime[1]; 
        return array(
"load" => $avgs[1].", ".$avgs[2].", ".$avgs[3], "uptime" => $uptime);
    }
    
    function 
getOS() {
        return 
$this->parsefile($this->ldir."/version");
    }
            
    function 
countProcesses() {
        
$processes shell_exec("ps ax -o stat,args |wc -l");
        if (
strtolower(substr(PHP_OS03)) !== 'win') return $processes;
        else return 
0;
    }
    
    function 
listProcesses() {
        
$processes shell_exec("ps -eo pcpu,user,args --sort -c h | head -10");
        
//return $processes;
        
$info=array();
        foreach( 
explode("n",$processes) as $line) {
            
$linedetails explode(" "trim($line));
            if(
$linedetails[0] == "") continue;
            
$info[] = array("cpu" => $linedetails[0], "user" => $linedetails[1], "process" => $linedetails[2]);
        }

        return 
$info;
    }

    function 
parsefile($file) {
        
//$content = file_get_contents($file);
        
$content shell_exec("cat ".$file);
        
$info=array();
        foreach( 
explode("n",$content) as $line) {
            
$pos strpos($line,":");
            
$key trimsubstr($line,0,$pos) );
            
$val trimsubstr($line,$pos+1) );
            if ( 
$key=="") continue;
            
$info[$key] = $val;
        }
        return 
$info;        
    }

    function 
driveSpace() {
        
$dt disk_total_space("/");
        
$df disk_free_space("/");
        return array(
"total" => $dt"free" => $df);
    }

    
// Not used for now, but maybe in the future
    
function getCurrentSpeed($port) {
        
$start $this->parsefile($this->ldir."/net/dev");
        
sleep(3);
        
$end $this->parsefile($this->ldir."/net/dev");
        if(empty(
$start)) return array("rx" => "Could not process""tx" => "Could not process");
        
$interfaces array_keys($start);
        if(!empty(
$start[$port])) {
            
$startoutput preg_replace('!s+!'' '$start[$port]);
            
$endoutput preg_replace('!s+!'' '$end[$port]);
            
$startspeeds explode(" "trim($startoutput));
            
$endspeeds explode(" "trim($endoutput));
            return array(
"rx" => round(($endspeeds[0]-$startspeeds[0])/3,0), "tx" => round(($endspeeds[8]-$startspeeds[8])/3,0), "interfaces" => $interfaces);
        } else return array(
"rx" => "Invalid port""tx" => "Invalid port""interfaces" => $interfaces);
    }
    
}

class 
Wininfo extends Systeminfo {
    
    function 
getCpuInfo() {
        
exec("wmic cpu get name"$output);
        return array(
"model name" => $output[1]);
    }
    
    function 
getMemStat() {
        
exec("wmic ComputerSystem get TotalPhysicalMemory && wmic OS get FreePhysicalMemory"$output);
        return array(
"MemTotal" => $output[1]/1024"MemFree" => $output[4], "Buffers" => 0"Cached" => 0);
    }
    
    function 
getOS() {
        return 
php_uname("v");
    }

    public function 
getUptime()
    {
        
exec("wmic cpu get loadpercentage"$load);
        
exec("net statistics Workstation"$uptime);
        if(isset(
$uptime) && !empty($uptime)) {
            
$uptime $uptime[3];
            
$uptime str_replace("Statistics since"""$uptime);
            
$uptime trim($uptime);
            
$parts explode("/"$uptime);
            
$extra explode(" "$parts[2]);
            
$newuptime strtotime($extra[0]."-".$parts[1]."-".$parts[0]." ".$extra[1]);
            
$uptime $this->time_ago($newuptimetruetrue);
        } else 
$uptime "";
        
$loadamount = (isset($load[1]) && !empty($load[1])) ?  $load[1]."%" "";
        return array(
"load" => $loadamount"uptime" => $uptime);

    }

    function 
driveSpace() {
        
$dt disk_total_space("C:");
        
$df disk_free_space("C:");
        return array(
"total" => $dt"free" => $df);
    }

    function 
countProcesses() {
        
exec("wmic process get name"$output);
        return (
count($output)-5);
    }
    
    function 
listProcesses() {
        return 
false;
    }

}


if(isset(
$_GET["hash"]) && !empty($_GET["hash"])) {
    if(
$_GET["hash"] == $hash) {
        if (
strtolower(substr(PHP_OS03)) === 'win') {
            
$stats = new Wininfo;
        } else {
            
$stats = new Linuxinfo;
        }
        if(
$_GET["type"] == "register") {
            
$_SERVER["SERVER_ADDR"] = (isset($_SERVER["SERVER_ADDR"]) && !empty($_SERVER["SERVER_ADDR"])) ? $_SERVER["SERVER_ADDR"] : $_SERVER["LOCAL_ADDR"];
            
$output["ip"] = sprintf("%u"ip2long($_SERVER["SERVER_ADDR"]));
            
$output["hostname"] = php_uname("n");
            
$output["os"] = $stats->getOS();
            
header("Content-Disposition: inline; filename="server_register.json";");
            
header("content-type: application/json charset=utf-8");
            echo 
json_encode($output);
            exit();
        } elseif(
$_GET["type"] == "response") {
            
header("HTTP/1.1 200");
            
header("Content-Disposition: inline; filename="server_response.json";");
            
header("content-type: application/json charset=utf-8");
        } else {
            
//$port = (isset($_GET["netport"]) && !empty($_GET["netport"])) ? $_GET["netport"] : "eth0";
            
$output["cpu"] = $stats->getCpuInfo();
            
$output["memory"] = $stats->getMemStat();
            
$output["uptime"] = $stats->getUptime();
            
$output["processes"] = $stats->countProcesses();
            
$output["services"] = $stats->getServiceStatus($_GET["services"]);
            
$output["drivespace"] = $stats->driveSpace();
            
//$output["netspeed"] = $stats->getCurrentSpeed($port);
            
header("Content-Disposition: inline; filename="server_status.json";");
            
header("content-type: application/json charset=utf-8");
            echo 
json_encode($output);
        }
    } else 
header("HTTP/1.1 401");
} else {
    
header("HTTP/1.1 404");
}


?>
Онлайн: 0
Реклама