| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- <?php
- namespace App\Http\Controllers\Admin\Config;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- class ServerController extends Controller
- {
- public function index()
- {
- $this->server();
- }
- /**
- * 서버 상태
- * @method GET
- * @see /admin/config/server
- */
- public function server()
- {
- // 서버 자원 정보
- return view('admin.config.server.index', [
- 'subject' => '서버상태',
- 'networkInfo' => $this->getNetworkInfo(),
- 'memInfo' => $this->getMemoryInfo(),
- 'cpuInfo' => $this->getCpuInfo(),
- 'sysInfo' => $this->getSysInfo(),
- 'os' => explode(" ", php_uname()) // 서버 운영체제 정보
- ]);
- }
- /**
- * 관리자 페이지 메인 ajax 호출
- */
- public function ajaxData(Request $request)
- {
- if (!$request->ajax()) {
- exit('No direct script access allowed');
- }
- $sysInfo = $this->getSysInfo();
- echo json_encode([
- 'networkInfo' => $this->getNetworkInfo(),
- 'sysInfo' => $sysInfo,
- 'upTime' => $sysInfo['uptime'],
- 'sTime' => date('Y-m-d H:i:s'),
- 'cpuInfo' => $this->getCpuInfo(),
- 'memInfo' => $this->getMemoryInfo()
- ]);
- }
- /**
- * 운영체제 및 서버 시스템 정보
- */
- private function getSysInfo()
- {
- $sysInfo = [null];
- switch (PHP_OS) {
- case "Linux":
- // CPU
- if (false === ($str = @file("/proc/cpuinfo"))) {
- return false;
- }
- $str = implode("", $str);
- @preg_match_all("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s", $str, $model);
- @preg_match_all("/cpu\s+MHz\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $mhz);
- @preg_match_all("/cache\s+size\s{0,}\:+\s{0,}([\d\.]+\s{0,}[A-Z]+[\r\n]+)/", $str, $cache);
- @preg_match_all("/bogomips\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $bogomips);
- if (false !== is_array($model[1])) {
- $sysInfo['cpu']['num'] = sizeof($model[1]);
- for ($i = 0; $i < $sysInfo['cpu']['num']; $i++) {
- $sysInfo['cpu']['model'][] = $model[1][$i] . ' (' . $mhz[1][$i] . ')';
- $sysInfo['cpu']['mhz'][] = $mhz[1][$i];
- $sysInfo['cpu']['cache'][] = $cache[1][$i];
- $sysInfo['cpu']['bogomips'][] = $bogomips[1][$i];
- }
- if ($sysInfo['cpu']['num'] == 1) {
- $x1 = '';
- } else {
- $x1 = ' Г—' . $sysInfo['cpu']['num'];
- }
- $mhz[1][0] = ' | Frequency:' . $mhz[1][0];
- $cache[1][0] = ' | Secondary cache:' . $cache[1][0];
- $bogomips[1][0] = ' | Bogomips:' . $bogomips[1][0];
- $sysInfo['cpu']['model'][] = $model[1][0] . $mhz[1][0] . $cache[1][0] . $bogomips[1][0] . $x1;
- if (false !== is_array($sysInfo['cpu']['model'])) $sysInfo['cpu']['model'] = implode("<br />", $sysInfo['cpu']['model']);
- if (false !== is_array($sysInfo['cpu']['mhz'])) $sysInfo['cpu']['mhz'] = implode("<br />", $sysInfo['cpu']['mhz']);
- if (false !== is_array($sysInfo['cpu']['cache'])) $sysInfo['cpu']['cache'] = implode("<br />", $sysInfo['cpu']['cache']);
- if (false !== is_array($sysInfo['cpu']['bogomips'])) $sysInfo['cpu']['bogomips'] = implode("<br />", $sysInfo['cpu']['bogomips']);
- }
- // NETWORK, UPTIME
- if (false === ($str = @file("/proc/uptime"))) {
- return false;
- }
- $str = explode(" ", implode("", $str));
- $str = trim($str[0]);
- $min = $str / 60;
- $hours = $min / 60;
- $days = floor($hours / 24);
- $hours = floor($hours - ($days * 24));
- $min = floor($min - ($days * 60 * 24) - ($hours * 60));
- if ($days !== 0) $sysInfo['uptime'] = $days . " Day";
- if ($hours !== 0) $sysInfo['uptime'] .= $hours . " Hour";
- $sysInfo['uptime'] .= $min . " Minute";
- // MEMORY
- if (false === ($str = @file("/proc/meminfo"))) {
- return false;
- }
- $str = implode("", $str);
- preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buf);
- preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers);
- $sysInfo['memTotal'] = round($buf[1][0] / 1024, 2);
- $sysInfo['memFree'] = round($buf[2][0] / 1024, 2);
- $sysInfo['memBuffers'] = round($buffers[1][0] / 1024, 2);
- $sysInfo['memCached'] = round($buf[3][0] / 1024, 2);
- $sysInfo['memUsed'] = $sysInfo['memTotal'] - $sysInfo['memFree'];
- $sysInfo['memPercent'] = (floatval($sysInfo['memTotal']) != 0) ? round($sysInfo['memUsed'] / $sysInfo['memTotal'] * 100, 2) : 0;
- $sysInfo['memRealUsed'] = $sysInfo['memTotal'] - $sysInfo['memFree'] - $sysInfo['memCached'] - $sysInfo['memBuffers'];
- $sysInfo['memRealFree'] = $sysInfo['memTotal'] - $sysInfo['memRealUsed'];
- $sysInfo['memRealPercent'] = (floatval($sysInfo['memTotal']) != 0) ? round($sysInfo['memRealUsed'] / $sysInfo['memTotal'] * 100, 2) : 0;
- $sysInfo['memCachedPercent'] = (floatval($sysInfo['memCached']) != 0) ? round($sysInfo['memCached'] / $sysInfo['memTotal'] * 100, 2) : 0;
- $sysInfo['swapTotal'] = round($buf[4][0] / 1024, 2);
- $sysInfo['swapFree'] = round($buf[5][0] / 1024, 2);
- $sysInfo['swapUsed'] = round($sysInfo['swapTotal'] - $sysInfo['swapFree'], 2);
- $sysInfo['swapPercent'] = (floatval($sysInfo['swapTotal']) != 0) ? round($sysInfo['swapUsed'] / $sysInfo['swapTotal'] * 100, 2) : 0;
- // LOAD AVG
- if (false === ($str = @file("/proc/loadavg"))) {
- return false;
- }
- $str = explode(" ", implode("", $str));
- $str = array_chunk($str, 4);
- $sysInfo['loadAvg'] = implode(" ", $str[0]);
- break;
- case "FreeBSD":
- // CPU
- if (false === ($sysInfo['cpu']['num'] = getKey("hw.ncpu"))) {
- return false;
- }
- $sysInfo['cpu']['model'] = getKey("hw.model");
- // LOAD AVG
- if (false === ($sysInfo['loadAvg'] = getKey("vm.loadavg"))) {
- return false;
- }
- // UPTIME
- if (false === ($buf = getKey("kern.boottime"))) {
- return false;
- }
- $buf = explode(' ', $buf);
- $sys_ticks = time() - intval($buf[3]);
- $min = $sys_ticks / 60;
- $hours = $min / 60;
- $days = floor($hours / 24);
- $hours = floor($hours - ($days * 24));
- $min = floor($min - ($days * 60 * 24) - ($hours * 60));
- if ($days !== 0) $sysInfo['uptime'] = $days . " Day";
- if ($hours !== 0) $sysInfo['uptime'] .= $hours . " Hour";
- $sysInfo['uptime'] .= $min . " Minute";
- // MEMORY
- if (false === ($buf = getKey("hw.physmem"))) {
- return false;
- }
- $sysInfo['memTotal'] = round($buf / 1024 / 1024, 2);
- $str = getKey("vm.vmtotal");
- preg_match_all("/\nVirtual Memory[\:\s]*\(Total[\:\s]*([\d]+)K[\,\s]*Active[\:\s]*([\d]+)K\)\n/i", $str, $buff, PREG_SET_ORDER);
- preg_match_all("/\nReal Memory[\:\s]*\(Total[\:\s]*([\d]+)K[\,\s]*Active[\:\s]*([\d]+)K\)\n/i", $str, $buf, PREG_SET_ORDER);
- $sysInfo['memRealUsed'] = round($buf[0][2] / 1024, 2);
- $sysInfo['memCached'] = round($buff[0][2] / 1024, 2);
- $sysInfo['memUsed'] = round($buf[0][1] / 1024, 2) + $sysInfo['memCached'];
- $sysInfo['memFree'] = $sysInfo['memTotal'] - $sysInfo['memUsed'];
- $sysInfo['memPercent'] = (floatval($sysInfo['memTotal']) != 0) ? round($sysInfo['memUsed'] / $sysInfo['memTotal'] * 100, 2) : 0;
- $sysInfo['memRealPercent'] = (floatval($sysInfo['memTotal']) != 0) ? round($sysInfo['memRealUsed'] / $sysInfo['memTotal'] * 100, 2) : 0;
- break;
- default:
- break;
- }
- if(in_array(PHP_OS, ['Linux', 'FreeBSD'])) {
- if ($sysInfo['memTotal'] < 1024) {
- $memTotal = $sysInfo['memTotal'] . " M";
- $mt = $sysInfo['memTotal'] . " M";
- $mu = $sysInfo['memUsed'] . " M";
- $mf = $sysInfo['memFree'] . " M";
- $mc = $sysInfo['memCached'] . " M";
- $mb = $sysInfo['memBuffers'] . " M";
- $st = $sysInfo['swapTotal'] . " M";
- $su = $sysInfo['swapUsed'] . " M";
- $sf = $sysInfo['swapFree'] . " M";
- $swapPercent = ($sysInfo['swapPercent']);
- $memRealUsed = $sysInfo['memRealUsed'] . " M";
- $memRealFree = $sysInfo['memRealFree'] . " M";
- $memRealPercent = ($sysInfo['memRealPercent']);
- $memPercent = ($sysInfo['memPercent']);
- $memCachedPercent = ($sysInfo['memCachedPercent']);
- } else {
- $memTotal = round($sysInfo['memTotal'] / 1024, 3) . " G";
- $mt = round($sysInfo['memTotal'] / 1024, 3) . " G";
- $mu = round($sysInfo['memUsed'] / 1024, 3) . " G";
- $mf = round($sysInfo['memFree'] / 1024, 3) . " G";
- $mc = round($sysInfo['memCached'] / 1024, 3) . " G";
- $mb = round($sysInfo['memBuffers'] / 1024, 3) . " G";
- $st = round($sysInfo['swapTotal'] / 1024, 3) . " G";
- $su = round($sysInfo['swapUsed'] / 1024, 3) . " G";
- $sf = round($sysInfo['swapFree'] / 1024, 3) . " G";
- $swapPercent = ($sysInfo['swapPercent']);
- $memRealUsed = round($sysInfo['memRealUsed'] / 1024, 3) . " G";
- $memRealFree = round($sysInfo['memRealFree'] / 1024, 3) . " G";
- $memRealPercent = ($sysInfo['memRealPercent']);
- $memPercent = ($sysInfo['memPercent']);
- $memCachedPercent = ($sysInfo['memCachedPercent']);
- }
- $sysInfo = array_merge($sysInfo, [
- 'memTotal' => $memTotal,
- 'mt' => $mt,
- 'mu' => $mu,
- 'mf' => $mf,
- 'mc' => $mc,
- 'mb' => $mb,
- 'st' => $st,
- 'su' => $su,
- 'sf' => $sf,
- 'swapPercent' => $swapPercent,
- 'memRealUsed' => $memRealUsed,
- 'memRealFree' => $memRealFree,
- 'memRealPercent' => $memRealPercent,
- 'memPercent' => $memPercent,
- 'memCachedPercent' => $memCachedPercent
- ]);
- }
- return $sysInfo;
- }
- /**
- * CPU 상세정보
- */
- private function getCpuInfo(): string
- {
- $stat1 = GetCoreInformation();
- sleep(1);
- $stat2 = GetCoreInformation();
- $data = GetCpuPercentages($stat1, $stat2);
- $ret = '';
- if(isset($data['cpu0']['user'])) {
- $ret .= $data['cpu0']['user'] . "%us, ";
- }
- if(isset($data['cpu0']['sys'])) {
- $ret .= $data['cpu0']['sys'] . "%sy, ";
- }
- if(isset($data['cpu0']['nice'])) {
- $ret .= $data['cpu0']['nice'] . "%ni, ";
- }
- if(isset($data['cpu0']['idle'])) {
- $ret .= $data['cpu0']['idle'] . "%id, ";
- }
- if(isset($data['cpu0']['iowait'])) {
- $ret .= $data['cpu0']['iowait'] . "%wa, ";
- }
- if(isset($data['cpu0']['irq'])) {
- $ret .= $data['cpu0']['irq'] . "%irq, ";
- }
- if(isset($data['cpu0']['softirq'])) {
- $ret .= $data['cpu0']['softirq'] . "%softirq";
- }
- return $ret;
- }
- /**
- * 사용 메모리 정보
- */
- private function getMemoryInfo(): array
- {
- $dt = round(@disk_total_space(".") / (1024 * 1024 * 1024), 3);
- $df = round(@disk_free_space(".") / (1024 * 1024 * 1024), 3);
- $du = ($dt - $df); //е·Із”Ё
- $hdPercent = ((floatval($dt) != 0) ? round($du / $dt * 100, 2) : 0);
- return ['dt' => $dt, 'df' => $df, 'du' => $du, 'hdPercent' => $hdPercent];
- }
- /**
- * 네트워크 정보 조회
- */
- private function getNetworkInfo(): array
- {
- // 네트워크 정보 조회
- $networkResult = [];
- $networkData = @file("/proc/net/dev");
- if($networkData) {
- for ($i = 2; $i < count($networkData); $i++) {
- preg_match_all("/([^\s]+):[\s]{0,}(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/", $networkData[$i], $info);
- $networkResult[$i - 2] = [
- 'networkName' => $info[1][0],
- 'NetOutSpeed' => $info[10][0],
- 'NetInputSpeed' => $info[2][0],
- 'NetInput' => byteFormat($info[2][0]),
- 'NetOut' => byteFormat($info[10][0]),
- ];
- }
- }
- return $networkResult;
- }
- /**
- * PHP 정보
- * @method GET
- * @see /admin/config/server/php
- */
- public function php()
- {
- ob_start();
- phpinfo();
- $phpinfo = ob_get_contents();
- ob_end_clean();
- $phpinfo = preg_replace('%^.*<body>(.*)</body>.*$%ms', '$1', $phpinfo);
- ob_clean();
- return view('admin.config.php.index', [
- 'subject' => 'PHP 정보',
- 'phpinfo' => $phpinfo
- ]);
- }
- /**
- * DB 정보
- * @method GET
- * @see /admin/config/server/db
- */
- public function db()
- {
- return view('admin.config.db.index', [
- 'subject' => 'DB 정보',
- 'database' => config('database'),
- 'drivers' => join(', ', \Illuminate\Support\Facades\DB::availableDrivers())
- ]);
- }
- }
|