Explorar o código

Change getting data about server load

Visman %!s(int64=5) %!d(string=hai) anos
pai
achega
2f479bef61
Modificáronse 1 ficheiros con 30 adicións e 25 borrados
  1. 30 25
      app/Models/Pages/Admin/Statistics.php

+ 30 - 25
app/Models/Pages/Admin/Statistics.php

@@ -81,31 +81,36 @@ class Statistics extends Admin
         $this->linkInfo  = $this->c->Router->link('AdminInfo');
 
         // Get the server load averages (if possible)
-        if (
-            @\file_exists('/proc/loadavg')
-            && \is_readable('/proc/loadavg')
-        ) {
-            // We use @ just in case
-            $fh  = @\fopen('/proc/loadavg', 'r');
-            $ave = @\fread($fh, 64);
-            @\fclose($fh);
-
-            if (($fh = @\fopen('/proc/loadavg', 'r'))) {
-                $ave = \fread($fh, 64);
-                \fclose($fh);
-            } else {
-                $ave = '';
-            }
-
-            $ave = @\explode(' ', $ave);
-            $this->serverLoad = isset($ave[2]) ? $ave[0].' '.$ave[1].' '.$ave[2] : __('Not available');
-        } elseif (
-            ! \in_array(\PHP_OS, ['WINNT', 'WIN32'])
-            && \preg_match('%averages?: ([\d\.]+),?\s+([\d\.]+),?\s+([\d\.]+)%i', @\exec('uptime'), $ave)
-        ) {
-            $this->serverLoad = $ave[1].' '.$ave[2].' '.$ave[3];
-        } else {
-            $this->serverLoad = __('Not available');
+        $this->serverLoad = __('Not available');
+        switch (\PHP_OS_FAMILY) {
+            case 'Windows':
+                @\exec('wmic cpu get loadpercentage /all', $output);
+                if (
+                    ! empty($output)
+                    && \preg_match('%(?:^|==)(\d+)(?:$|==)%', \implode('==', $output) , $loadPercentage)
+                ) {
+                    $this->serverLoad = $loadPercentage[1] . ' %';
+                }
+                break;
+            default:
+                if (\function_exists('\\sys_getloadavg')) {
+                    $loadAverages     = \sys_getloadavg();
+                    $this->serverLoad = $loadAverages[0] . ' ' . $loadAverages[1] . ' ' . $loadAverages[2];
+                    break;
+                }
+
+                @\exec('uptime', $output);
+                if (
+                    ! empty($output)
+                    && \preg_match(
+                        '%averages?: ([0-9\.]+),?\s+([0-9\.]+),?\s+([0-9\.]+)%i',
+                        \implode(' ', $output) ,
+                        $loadAverages
+                    )
+                ) {
+                    $this->serverLoad = $loadAverages[1] . ' ' . $loadAverages[2] . ' ' . $loadAverages[3];
+                    break;
+                }
         }
 
         // Get number of current visitors