Subversion Repositories ALCASAR

Rev

Rev 3037 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 3037 Rev 3100
Line 32... Line 32...
32
    private $_uptime = null;
32
    private $_uptime = null;
33
 
33
 
34
    /**
34
    /**
35
     * Assoc array of all CPUs loads.
35
     * Assoc array of all CPUs loads.
36
     */
36
     */
37
    private $_cpu_loads = null;
37
    protected $_cpu_loads = null;
38
 
38
 
39
    /**
39
    /**
40
     * Version string.
40
     * Version string.
41
     */
41
     */
42
    private $_kernel_string = null;
42
    private $_kernel_string = null;
Line 194... Line 194...
194
            }
194
            }
195
            if (isset($this->_machine_info['machine'])) {
195
            if (isset($this->_machine_info['machine'])) {
196
                $this->_machine_info['machine'] = trim(preg_replace("/^\/,?/", "", preg_replace("/ ?(To be filled by O\.E\.M\.|System manufacturer|System Product Name|Not Specified|Default string) ?/i", "", $this->_machine_info['machine'])));
196
                $this->_machine_info['machine'] = trim(preg_replace("/^\/,?/", "", preg_replace("/ ?(To be filled by O\.E\.M\.|System manufacturer|System Product Name|Not Specified|Default string) ?/i", "", $this->_machine_info['machine'])));
197
            }
197
            }
198
 
198
 
199
            if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null) && count($vendor_array)>0) {
199
            if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null) && count($vendor_array) > 0) {
200
                $virt = CommonFunctions::decodevirtualizer($vendor_array);
200
                $virt = CommonFunctions::decodevirtualizer($vendor_array);
201
                if ($virt !== null) {
201
                if ($virt !== null) {
202
                    $this->_machine_info['hypervisor'] = $virt;
202
                    $this->_machine_info['hypervisor'] = $virt;
203
                }
203
                }
204
            }
204
            }
Line 214... Line 214...
214
     */
214
     */
215
    private function _get_kernel_string()
215
    private function _get_kernel_string()
216
    {
216
    {
217
        if ($this->_kernel_string === null) {
217
        if ($this->_kernel_string === null) {
218
            $this->_kernel_string = "";
218
            $this->_kernel_string = "";
-
 
219
            if ($this->sys->getOS() == 'SSH') {
-
 
220
                if (CommonFunctions::executeProgram('uname', '-s', $strBuf, false) && ($strBuf !== '')) {
-
 
221
                    $this->sys->setOS($strBuf);
-
 
222
                } else {
-
 
223
                    return $this->_kernel_string;
-
 
224
                }
-
 
225
            }
219
            if (CommonFunctions::executeProgram($uname="uptrack-uname", '-r', $strBuf, false) || // show effective kernel if ksplice uptrack is installed
226
            if ((CommonFunctions::executeProgram($uname="uptrack-uname", '-r', $strBuf, false) && ($strBuf !== '')) || // show effective kernel if ksplice uptrack is installed
220
                CommonFunctions::executeProgram($uname="uname", '-r', $strBuf, PSI_DEBUG)) {
227
                (CommonFunctions::executeProgram($uname="uname", '-r', $strBuf, PSI_DEBUG) && ($strBuf !== ''))) {
221
                $this->_kernel_string = $strBuf;
228
                $this->_kernel_string = $strBuf;
222
                if (CommonFunctions::executeProgram($uname, '-v', $strBuf, PSI_DEBUG)) {
229
                if (CommonFunctions::executeProgram($uname, '-v', $strBuf, PSI_DEBUG) && ($strBuf !== '')) {
223
                    if (preg_match('/ SMP /', $strBuf)) {
230
                    if (preg_match('/ SMP /', $strBuf)) {
224
                        $this->_kernel_string .= ' (SMP)';
231
                        $this->_kernel_string .= ' (SMP)';
225
                    }
232
                    }
226
                }
233
                }
227
                if (CommonFunctions::executeProgram($uname, '-m', $strBuf, PSI_DEBUG)) {
234
                if (CommonFunctions::executeProgram($uname, '-m', $strBuf, PSI_DEBUG) && ($strBuf !== '')) {
228
                    $this->_kernel_string .= ' '.$strBuf;
235
                    $this->_kernel_string .= ' '.$strBuf;
229
                }
236
                }
230
            } elseif (CommonFunctions::rfts('/proc/version', $strBuf, 1)) {
237
            } elseif (CommonFunctions::rfts('/proc/version', $strBuf, 1)) {
-
 
238
                if (preg_match('/\/Hurd-([^\)]+)/', $strBuf, $ar_buf)) {
-
 
239
                    $this->_kernel_string = $ar_buf[1];
231
                if (preg_match('/version\s+(\S+)/', $strBuf, $ar_buf)) {
240
                } elseif (preg_match('/version\s+(\S+)/', $strBuf, $ar_buf)) {
232
                    $this->_kernel_string = $ar_buf[1];
241
                    $this->_kernel_string = $ar_buf[1];
233
                    if (preg_match('/ SMP /', $strBuf)) {
242
                    if (preg_match('/ SMP /', $strBuf)) {
234
                        $this->_kernel_string .= ' (SMP)';
243
                        $this->_kernel_string .= ' (SMP)';
235
                    }
244
                    }
236
                }
245
                }
Line 239... Line 248...
239
 
248
 
240
        return $this->_kernel_string;
249
        return $this->_kernel_string;
241
    }
250
    }
242
 
251
 
243
    /**
252
    /**
-
 
253
     * check OS type
-
 
254
     */
-
 
255
    public function __construct($blockname = false)
-
 
256
    {
-
 
257
        parent::__construct($blockname);
-
 
258
        $this->_get_kernel_string();
-
 
259
    }
-
 
260
 
-
 
261
    /**
244
     * Machine
262
     * Machine
245
     *
263
     *
246
     * @return void
264
     * @return void
247
     */
265
     */
248
    private function _machine()
266
    protected function _machine()
249
    {
267
    {
250
        $machine_info = $this->_get_machine_info();
268
        $machine_info = $this->_get_machine_info();
251
        if (isset($machine_info['machine'])) {
269
        if (isset($machine_info['machine'])) {
252
            $machine = $machine_info['machine'];
270
            $machine = $machine_info['machine'];
253
        } else {
271
        } else {
Line 277... Line 295...
277
     *
295
     *
278
     * @return void
296
     * @return void
279
     */
297
     */
280
    protected function _hostname()
298
    protected function _hostname()
281
    {
299
    {
282
        if (PSI_USE_VHOST) {
300
        if (PSI_USE_VHOST && !defined('PSI_EMU_PORT')) {
283
            if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm);
301
            if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm);
284
        } else {
302
        } else {
285
            if (CommonFunctions::rfts('/proc/sys/kernel/hostname', $result, 1, 4096, PSI_DEBUG && (PSI_OS != 'Android'))) {
303
            if (CommonFunctions::rfts('/proc/sys/kernel/hostname', $result, 1, 4096, PSI_DEBUG && (PSI_OS != 'Android'))) {
286
                $result = trim($result);
304
                $result = trim($result);
287
                $ip = gethostbyname($result);
305
                $ip = gethostbyname($result);
Line 297... Line 315...
297
    /**
315
    /**
298
     * Kernel Version
316
     * Kernel Version
299
     *
317
     *
300
     * @return void
318
     * @return void
301
     */
319
     */
302
    private function _kernel()
320
    protected function _kernel()
303
    {
321
    {
304
        if (($verBuf = $this->_get_kernel_string()) != "") {
322
        if (($verBuf = $this->_get_kernel_string()) != "") {
305
            $this->sys->setKernel($verBuf);
323
            $this->sys->setKernel($verBuf);
306
        }
324
        }
307
    }
325
    }
Line 332... Line 350...
332
            $cpuvirt = $this->sys->getVirtualizer(); // previous info from _cpuinfo()
350
            $cpuvirt = $this->sys->getVirtualizer(); // previous info from _cpuinfo()
333
 
351
 
334
            $novm = true;
352
            $novm = true;
335
            // code based on src/basic/virt.c from systemd-detect-virt source code (https://github.com/systemd/systemd)
353
            // code based on src/basic/virt.c from systemd-detect-virt source code (https://github.com/systemd/systemd)
336
 
354
 
337
            // First, try to detect Oracle Virtualbox and Amazon EC2 Nitro, even if they use KVM, as well as Xen even if
355
            // First, try to detect Oracle Virtualbox, Amazon EC2 Nitro and Parallels, even if they use KVM,
338
            // it cloaks as Microsoft Hyper-V. Attempt to detect uml at this stage also since it runs as a user-process
356
            // as well as Xen even if it cloaks as Microsoft Hyper-V. Attempt to detect uml at this stage also
339
            // nested inside other VMs. Also check for Xen now, because Xen PV mode does not override CPUID when nested
357
            // since it runs as a user-process nested inside other VMs. Also check for Xen now, because Xen PV
340
            // inside another hypervisor.
358
            // mode does not override CPUID when nested inside another hypervisor.
341
            $machine_info = $this->_get_machine_info();
359
            $machine_info = $this->_get_machine_info();
342
            if (isset($machine_info['hypervisor'])) {
360
            if (isset($machine_info['hypervisor'])) {
343
                $hypervisor = $machine_info['hypervisor'];
361
                $hypervisor = $machine_info['hypervisor'];
344
                if (($hypervisor === 'oracle') || ($hypervisor === 'amazon') || ($hypervisor === 'xen')) {
362
                if (($hypervisor === 'oracle') || ($hypervisor === 'amazon') || ($hypervisor === 'xen') || ($hypervisor === 'parallels')) {
345
                    $this->sys->setVirtualizer($hypervisor);
363
                    $this->sys->setVirtualizer($hypervisor);
346
                    $novm = false;
364
                    $novm = false;
347
                }
365
                }
348
            }
366
            }
349
 
367
 
Line 518... Line 536...
518
     * UpTime
536
     * UpTime
519
     * time the system is running
537
     * time the system is running
520
     *
538
     *
521
     * @return void
539
     * @return void
522
     */
540
     */
523
    protected function _uptime()
541
    protected function _uptime($bufu = null)
524
    {
542
    {
525
        if (CommonFunctions::rfts('/proc/uptime', $buf, 1, 4096, PSI_OS != 'Android')) {
543
        if (CommonFunctions::rfts('/proc/uptime', $buf, 1, 4096, PSI_OS != 'Android')) {
526
            $ar_buf = preg_split('/ /', $buf);
544
            $ar_buf = preg_split('/ /', $buf);
527
            $this->sys->setUptime(trim($ar_buf[0]));
545
            $this->sys->setUptime(trim($ar_buf[0]));
528
        } elseif (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) {
546
        } elseif (($this->_uptime !== null) || ($bufu !== null) || CommonFunctions::executeProgram('uptime', '', $bufu)) {
-
 
547
            if (($this->_uptime === null) && ($bufu !== null)) {
-
 
548
                $this->_uptime = $bufu;
-
 
549
            }
529
            if (preg_match("/up (\d+) day[s]?,[ ]+(\d+):(\d+),/", $this->_uptime, $ar_buf)) {
550
            if (preg_match("/up (\d+) day[s]?,[ ]+(\d+):(\d+),/", $this->_uptime, $ar_buf)) {
530
                $min = $ar_buf[3];
551
                $min = $ar_buf[3];
531
                $hours = $ar_buf[2];
552
                $hours = $ar_buf[2];
532
                $days = $ar_buf[1];
553
                $days = $ar_buf[1];
533
                $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60);
554
                $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60);
Line 537... Line 558...
537
                $this->sys->setUptime($days * 86400 + $min * 60);
558
                $this->sys->setUptime($days * 86400 + $min * 60);
538
            } elseif (preg_match("/up[ ]+(\d+):(\d+),/", $this->_uptime, $ar_buf)) {
559
            } elseif (preg_match("/up[ ]+(\d+):(\d+),/", $this->_uptime, $ar_buf)) {
539
                $min = $ar_buf[2];
560
                $min = $ar_buf[2];
540
                $hours = $ar_buf[1];
561
                $hours = $ar_buf[1];
541
                $this->sys->setUptime($hours * 3600 + $min * 60);
562
                $this->sys->setUptime($hours * 3600 + $min * 60);
-
 
563
            } elseif (preg_match("/up[ ]+(\d+):(\d+):(\d+)/", $this->_uptime, $ar_buf)) {
-
 
564
                $sec = $ar_buf[3];
-
 
565
                $min = $ar_buf[2];
-
 
566
                $hours = $ar_buf[1];
-
 
567
                $this->sys->setUptime($hours * 3600 + $min * 60 + $sec);
542
            } elseif (preg_match("/up[ ]+(\d+) min,/", $this->_uptime, $ar_buf)) {
568
            } elseif (preg_match("/up[ ]+(\d+) min,/", $this->_uptime, $ar_buf)) {
543
                $min = $ar_buf[1];
569
                $min = $ar_buf[1];
544
                $this->sys->setUptime($min * 60);
570
                $this->sys->setUptime($min * 60);
-
 
571
            } elseif (preg_match("/up[ ]+(\d+) day[s]?,[ ]+(\d+) hour[s]?,[ ]+(\d+) minute[s]?/", $this->_uptime, $ar_buf)) {
-
 
572
                $min = $ar_buf[3];
-
 
573
                $hours = $ar_buf[2];
-
 
574
                $days = $ar_buf[1];
-
 
575
                $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60);
545
            }
576
            }
546
        }
577
        }
547
    }
578
    }
548
 
579
 
549
    /**
580
    /**
550
     * Processor Load
581
     * Processor Load
551
     * optionally create a loadbar
582
     * optionally create a loadbar
552
     *
583
     *
553
     * @return void
584
     * @return void
554
     */
585
     */
555
    protected function _loadavg()
586
    protected function _loadavg($buf = null)
556
    {
587
    {
557
        if (CommonFunctions::rfts('/proc/loadavg', $buf, 1, 4096, PSI_OS != 'Android')) {
588
        if ((($buf !== null) || CommonFunctions::rfts('/proc/loadavg', $buf, 1, 4096, PSI_OS != 'Android')) && preg_match("/^\d/", trim($buf))) {
558
            $result = preg_split("/\s/", $buf, 4);
589
            $result = preg_split("/\s/", $buf, 4);
559
            // don't need the extra values, only first three
590
            // don't need the extra values, only first three
560
            unset($result[3]);
591
            unset($result[3]);
561
            $this->sys->setLoad(implode(' ', $result));
592
            $this->sys->setLoad(implode(' ', $result));
562
        } elseif ((($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) && preg_match("/load average: (.*), (.*), (.*)$/", $this->_uptime, $ar_buf)) {
593
        } elseif (($buf === null) && ((($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) && preg_match("/load average: (.*), (.*), (.*)$/", $this->_uptime, $ar_buf))) {
563
            $this->sys->setLoad($ar_buf[1].' '.$ar_buf[2].' '.$ar_buf[3]);
594
              $this->sys->setLoad($ar_buf[1].' '.$ar_buf[2].' '.$ar_buf[3]);
564
        }
595
        }
565
        if (PSI_LOAD_BAR) {
596
        if (PSI_LOAD_BAR) {
566
            $this->sys->setLoadPercent($this->_parseProcStat('cpu'));
597
            $this->sys->setLoadPercent($this->_parseProcStat('cpu'));
567
        }
598
        }
568
    }
599
    }
Line 639... Line 670...
639
     * CPU information
670
     * CPU information
640
     * All of the tags here are highly architecture dependant.
671
     * All of the tags here are highly architecture dependant.
641
     *
672
     *
642
     * @return void
673
     * @return void
643
     */
674
     */
644
    protected function _cpuinfo()
675
    protected function _cpuinfo($bufr = null)
645
    {
676
    {
646
        if (CommonFunctions::rfts('/proc/cpuinfo', $bufr)) {
677
        if (($bufr !== null) || CommonFunctions::rfts('/proc/cpuinfo', $bufr)) {
647
 
-
 
648
            $cpulist = null;
678
            $cpulist = null;
649
            $raslist = null;
679
            $raslist = null;
650
 
680
 
651
            // sparc
681
            // sparc
652
            if (preg_match('/\nCpu(\d+)Bogo\s*:/i', $bufr)) {
682
            if (preg_match('/\nCpu(\d+)Bogo\s*:/i', $bufr)) {
Line 701... Line 731...
701
                            $_revi = $arrBuff1;
731
                            $_revi = $arrBuff1;
702
                            break;
732
                            break;
703
                        case 'cpu frequency':
733
                        case 'cpu frequency':
704
                            if (preg_match('/^(\d+)\s+Hz/i', $arrBuff1, $bufr2)) {
734
                            if (preg_match('/^(\d+)\s+Hz/i', $arrBuff1, $bufr2)) {
705
                                $_cpus = round($bufr2[1]/1000000);
735
                                $_cpus = round($bufr2[1]/1000000);
-
 
736
                            } elseif (preg_match('/^(\d+)\s+MHz/i', $arrBuff1, $bufr2)) {
-
 
737
                                $_cpus = $bufr2[1];
706
                            }
738
                            }
707
                            break;
739
                            break;
708
                        case 'system bus frequency':
740
                        case 'system bus frequency':
709
                            if (preg_match('/^(\d+)\s+Hz/i', $arrBuff1, $bufr2)) {
741
                            if (preg_match('/^(\d+)\s+Hz/i', $arrBuff1, $bufr2)) {
710
                                $_buss = round($bufr2[1]/1000000);
742
                                $_buss = round($bufr2[1]/1000000);
-
 
743
                            } elseif (preg_match('/^(\d+)\s+MHz/i', $arrBuff1, $bufr2)) {
-
 
744
                                $_buss = $bufr2[1];
711
                            }
745
                            }
712
                            break;
746
                            break;
713
                        case 'bogomips per cpu':
747
                        case 'bogomips per cpu':
714
                            $_bogo = round($arrBuff1);
748
                            $_bogo = round($arrBuff1);
715
                            break;
749
                            break;
Line 739... Line 773...
739
                    if ((count($arrBuff) == 2) && (($arrBuff1 = trim($arrBuff[1])) !== '')) {
773
                    if ((count($arrBuff) == 2) && (($arrBuff1 = trim($arrBuff[1])) !== '')) {
740
                        switch (strtolower($arrBuff[0])) {
774
                        switch (strtolower($arrBuff[0])) {
741
                        case 'processor':
775
                        case 'processor':
742
                            $proc = $arrBuff1;
776
                            $proc = $arrBuff1;
743
                            if (is_numeric($proc)) {
777
                            if (is_numeric($proc)) {
744
                                if (($procname !== null) && (strlen($procname)>0)) {
778
                                if (($procname !== null) && (strlen($procname) > 0)) {
745
                                    $dev->setModel($procname);
779
                                    $dev->setModel($procname);
746
                                }
780
                                }
747
                            } else {
781
                            } else {
748
                                $procname = $proc;
782
                                $procname = $proc;
749
                                $dev->setModel($procname);
783
                                $dev->setModel($procname);
Line 753... Line 787...
753
                        case 'cpu model':
787
                        case 'cpu model':
754
                        case 'cpu type':
788
                        case 'cpu type':
755
                        case 'cpu':
789
                        case 'cpu':
756
                            $dev->setModel($arrBuff1);
790
                            $dev->setModel($arrBuff1);
757
                            break;
791
                            break;
-
 
792
                        case 'cpu frequency':
-
 
793
                            if (preg_match('/^(\d+)\s+Hz/i', $arrBuff1, $bufr2)) {
-
 
794
                                if (($tmpsp = round($bufr2[1]/1000000)) > 0) {
-
 
795
                                    $dev->setCpuSpeed($tmpsp);
-
 
796
                                    $speedset = true;
-
 
797
                                }
-
 
798
                            } elseif (preg_match('/^(\d+)\s+MHz/i', $arrBuff1, $bufr2)) {
-
 
799
                                if ($bufr2[1] > 0) {
-
 
800
                                    $dev->setCpuSpeed($bufr2[1]);
-
 
801
                                    $speedset = true;
-
 
802
                                }
-
 
803
                            }
-
 
804
                            break;
758
                        case 'cpu mhz':
805
                        case 'cpu mhz':
759
                        case 'clock':
806
                        case 'clock':
760
                            if ($arrBuff1 > 0) { // openSUSE fix
807
                            if ($arrBuff1 > 0) {
761
                                $dev->setCpuSpeed($arrBuff1);
808
                                $dev->setCpuSpeed($arrBuff1);
762
                                $speedset = true;
809
                                $speedset = true;
763
                            }
810
                            }
764
                            break;
811
                            break;
765
                        case 'cpu mhz static':
812
                        case 'cpu mhz static':
766
                            if ($arrBuff1 > 0) { // openSUSE fix
-
 
767
                                $dev->setCpuSpeedMax($arrBuff1);
813
                            $dev->setCpuSpeedMax($arrBuff1);
768
                            }
-
 
769
                            break;
814
                            break;
770
                        case 'cycle frequency [hz]':
815
                        case 'cycle frequency [hz]':
-
 
816
                            if (($tmpsp = round($arrBuff1/1000000)) > 0) {
771
                            $dev->setCpuSpeed($arrBuff1 / 1000000);
817
                                $dev->setCpuSpeed($tmpsp);
772
                            $speedset = true;
818
                                $speedset = true;
-
 
819
                            }
773
                            break;
820
                            break;
774
                        case 'cpu0clktck':
821
                        case 'cpu0clktck': // Linux sparc64
775
                            $dev->setCpuSpeed(hexdec($arrBuff1) / 1000000); // Linux sparc64
822
                            if (($tmpsp = round(hexdec($arrBuff1)/1000000)) > 0) {
-
 
823
                                $dev->setCpuSpeed($tmpsp);
776
                            $speedset = true;
824
                                $speedset = true;
-
 
825
                            }
777
                            break;
826
                            break;
778
                        case 'l3 cache':
827
                        case 'l3 cache':
779
                        case 'cache size':
828
                        case 'cache size':
780
                            $dev->setCache(trim(preg_replace("/[a-zA-Z]/", "", $arrBuff1)) * 1024);
829
                            $dev->setCache(trim(preg_replace("/[a-zA-Z]/", "", $arrBuff1)) * 1024);
781
                            break;
830
                            break;
Line 843... Line 892...
843
                    }
892
                    }
844
                }
893
                }
845
                // sparc64 specific code ends
894
                // sparc64 specific code ends
846
 
895
 
847
                // XScale detection code
896
                // XScale detection code
848
                if (($arch === "5TE") && ($dev->getBogomips() !== null)) {
897
                if (($arch === "5TE") && (($bogo = $dev->getBogomips()) !== null) && ($bogo > 0)) {
849
                    $dev->setCpuSpeed($dev->getBogomips()); // BogoMIPS are not BogoMIPS on this CPU, it's the speed
898
                    $dev->setCpuSpeed($bogo); // BogoMIPS are not BogoMIPS on this CPU, it's the speed
850
                    $speedset = true;
899
                    $speedset = true;
851
                    $dev->setBogomips(null); // no BogoMIPS available, unset previously set BogoMIPS
900
                    $dev->setBogomips(null); // no BogoMIPS available, unset previously set BogoMIPS
852
                }
901
                }
853
 
902
 
854
                if (($dev->getBusSpeed() == 0) && ($_buss !== null)) {
903
                if (($dev->getBusSpeed() == 0) && ($_buss !== null)) {
855
                    $dev->setBusSpeed($_buss);
904
                    $dev->setBusSpeed($_buss);
856
                }
905
                }
857
                if (($dev->getCpuSpeed() == 0) && ($_cpus !== null)) {
906
                if (($dev->getCpuSpeed() == 0) && ($_cpus !== null) && ($_cpus > 0)) {
858
                    $dev->setCpuSpeed($_cpus);
907
                    $dev->setCpuSpeed($_cpus);
859
                    $speedset = true;
908
                    $speedset = true;
860
                }
909
                }
861
                if (($dev->getBogomips() == 0) && ($_bogo !== null)) {
910
                if (($dev->getBogomips() == 0) && ($_bogo !== null)) {
862
                    $dev->setBogomips($_bogo);
911
                    $dev->setBogomips($_bogo);
Line 871... Line 920...
871
                if ($proc !== null) {
920
                if ($proc !== null) {
872
                    if (!is_numeric($proc)) {
921
                    if (!is_numeric($proc)) {
873
                        $proc = 0;
922
                        $proc = 0;
874
                    }
923
                    }
875
                    // variable speed processors specific code follows
924
                    // variable speed processors specific code follows
876
                    if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_cur_freq', $buf, 1, 4096, false)) {
925
                    if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_cur_freq', $buf, 1, 4096, false)
877
                        $dev->setCpuSpeed(trim($buf) / 1000);
926
                       || CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_cur_freq', $buf, 1, 4096, false)) {
878
                        $speedset = true;
927
                        if (round(trim($buf)/1000) > 0) {
879
                    } elseif (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_cur_freq', $buf, 1, 4096, false)) {
-
 
880
                        $dev->setCpuSpeed(trim($buf) / 1000);
928
                            $dev->setCpuSpeed(round(trim($buf)/1000));
881
                        $speedset = true;
929
                            $speedset = true;
882
                    }
930
                        }
883
                    if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_max_freq', $buf, 1, 4096, false)) {
-
 
884
                        $dev->setCpuSpeedMax(trim($buf) / 1000);
-
 
885
                    }
931
                    }
-
 
932
                    if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_max_freq', $buf, 1, 4096, false)
-
 
933
                       || CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_max_freq', $buf, 1, 4096, false)) {
-
 
934
                        $dev->setCpuSpeedMax(round(trim($buf)/1000));
-
 
935
                    }
886
                    if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_min_freq', $buf, 1, 4096, false)) {
936
                    if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_min_freq', $buf, 1, 4096, false)
-
 
937
                       || CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_min_freq', $buf, 1, 4096, false)) {
887
                        $dev->setCpuSpeedMin(trim($buf) / 1000);
938
                        $dev->setCpuSpeedMin(round(trim($buf)/1000));
888
                    }
939
                    }
889
                    // variable speed processors specific code ends
940
                    // variable speed processors specific code ends
890
                    if (PSI_LOAD_BAR) {
941
                    if (PSI_LOAD_BAR) {
891
                            $dev->setLoad($this->_parseProcStat('cpu'.$proc));
942
                            $dev->setLoad($this->_parseProcStat('cpu'.$proc));
892
                    }
943
                    }
Line 899... Line 950...
899
                    if (($arch !== null) && ($impl !== null) && ($part !== null)) {
950
                    if (($arch !== null) && ($impl !== null) && ($part !== null)) {
900
                        if (($impl === '0x41')
951
                        if (($impl === '0x41')
901
                           && (($_hard === 'BCM2708') || ($_hard === 'BCM2835') || ($_hard === 'BCM2709') || ($_hard === 'BCM2836') || ($_hard === 'BCM2710') || ($_hard === 'BCM2837') || ($_hard === 'BCM2711') || ($_hard === 'BCM2838'))
952
                           && (($_hard === 'BCM2708') || ($_hard === 'BCM2835') || ($_hard === 'BCM2709') || ($_hard === 'BCM2836') || ($_hard === 'BCM2710') || ($_hard === 'BCM2837') || ($_hard === 'BCM2711') || ($_hard === 'BCM2838'))
902
                           && ($_revi !== null)) { // Raspberry Pi detection (instead of 'cat /proc/device-tree/model')
953
                           && ($_revi !== null)) { // Raspberry Pi detection (instead of 'cat /proc/device-tree/model')
903
                            if ($raslist === null) $raslist = @parse_ini_file(PSI_APP_ROOT."/data/raspberry.ini", true);
954
                            if ($raslist === null) $raslist = @parse_ini_file(PSI_APP_ROOT."/data/raspberry.ini", true);
-
 
955
                            $oldmach = $this->sys->getMachine();
-
 
956
                            if (($oldmach !== '') && preg_match("/^raspberrypi rpi(,.+)/", $oldmach, $machbuf)) {
-
 
957
                                $oldmachend = $machbuf[1];
-
 
958
                            } else {
-
 
959
                                 $oldmachend = '';
-
 
960
                            }
904
                            if ($raslist && !preg_match('/[^0-9a-f]/', $_revi)) {
961
                            if ($raslist && !preg_match('/[^0-9a-f]/', $_revi)) {
905
                                if (($revidec = hexdec($_revi)) & 0x800000) {
962
                                if (($revidec = hexdec($_revi)) & 0x800000) {
906
                                    if ($this->sys->getMachine() === '') {
963
                                    if (($oldmach === '') || ($oldmachend !== '')) {
907
                                        $manufacturer = ($revidec >> 16) & 15;
964
                                        $manufacturer = ($revidec >> 16) & 15;
908
                                        if (isset($raslist['manufacturer'][$manufacturer])) {
965
                                        if (isset($raslist['manufacturer'][$manufacturer])) {
909
                                            $manuf = ' '.$raslist['manufacturer'][$manufacturer];
966
                                            $manuf = ' '.$raslist['manufacturer'][$manufacturer];
910
                                        } else {
967
                                        } else {
911
                                            $manuf = '';
968
                                            $manuf = '';
912
                                        }
969
                                        }
913
                                        $model = ($revidec >> 4) & 255;
970
                                        $model = ($revidec >> 4) & 255;
914
                                        if (isset($raslist['model'][$model])) {
971
                                        if (isset($raslist['model'][$model])) {
915
                                            $this->sys->setMachine('Raspberry Pi '.$raslist['model'][$model].' (PCB 1.'.($revidec & 15).$manuf.')');
972
                                            $this->sys->setMachine('Raspberry Pi '.$raslist['model'][$model].' (PCB 1.'.($revidec & 15).$manuf.')'.$oldmachend);
916
                                        } else {
973
                                        } else {
917
                                            $this->sys->setMachine('Raspberry Pi (PCB 1.'.($revidec & 15).$manuf.')');
974
                                            $this->sys->setMachine('Raspberry Pi (PCB 1.'.($revidec & 15).$manuf.')'.$oldmachend);
918
                                        }
975
                                        }
919
                                    }
976
                                    }
920
                                } else {
977
                                } else {
921
                                    if ($this->sys->getMachine() === '') {
978
                                    if (($oldmach === '') || ($oldmachend !== '')) {
922
                                        if (isset($raslist['old'][$revidec & 0x7fffff])) {
979
                                        if (isset($raslist['old'][$revidec & 0x7fffff])) {
923
                                            $this->sys->setMachine('Raspberry Pi '.$raslist['old'][$revidec & 0x7fffff]);
980
                                            $this->sys->setMachine('Raspberry Pi '.$raslist['old'][$revidec & 0x7fffff].$oldmachend);
924
                                        } else {
981
                                        } else {
925
                                            $this->sys->setMachine('Raspberry Pi');
982
                                            $this->sys->setMachine('Raspberry Pi'.$oldmachend);
926
                                        }
983
                                        }
927
                                    }
984
                                    }
928
                                }
985
                                }
929
                            }
986
                            }
930
                        } elseif (($_hard !== null) && ($this->sys->getMachine() === '')) { // other ARM hardware
987
                        } elseif (($_hard !== null) && ($this->sys->getMachine() === '')) { // other ARM hardware
Line 1117... Line 1174...
1117
    /**
1174
    /**
1118
     * USB devices
1175
     * USB devices
1119
     *
1176
     *
1120
     * @return void
1177
     * @return void
1121
     */
1178
     */
1122
    protected function _usb()
1179
    protected function _usb($bufu = null)
1123
    {
1180
    {
1124
        $usbarray = array();
1181
        $usbarray = array();
-
 
1182
        if ($nobufu = ($bufu === null)) {
1125
        if (CommonFunctions::executeProgram('lsusb', (PSI_OS != 'Android')?'':'2>/dev/null', $bufr, PSI_DEBUG && (PSI_OS != 'Android'), 5) && ($bufr !== "")) {
1183
            if (CommonFunctions::executeProgram('lsusb', (PSI_OS != 'Android')?'':'2>/dev/null', $bufr, PSI_DEBUG && (PSI_OS != 'Android'), 5) && ($bufr !== "")) {
1126
            $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1184
                $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1127
            foreach ($bufe as $buf) {
1185
                foreach ($bufe as $buf) {
1128
                $device = preg_split("/ /", $buf, 7);
1186
                    $device = preg_split("/ /", $buf, 7);
1129
                if (((isset($device[6]) && trim($device[6]) != "")) ||
1187
                    if (((isset($device[6]) && trim($device[6]) != "")) ||
1130
                    ((isset($device[5]) && trim($device[5]) != ""))) {
1188
                        ((isset($device[5]) && trim($device[5]) != ""))) {
1131
                    $usbid = intval($device[1]).'-'.intval(trim($device[3], ':')).' '.$device[5];
1189
                        $usbid = intval($device[1]).'-'.intval(trim($device[3], ':')).' '.$device[5];
1132
                    if ((isset($device[6]) && trim($device[6]) != "")) {
1190
                        if ((isset($device[6]) && trim($device[6]) != "")) {
1133
                        $usbarray[$usbid]['name'] = trim($device[6]);
1191
                            $usbarray[$usbid]['name'] = trim($device[6]);
1134
                    } else {
1192
                        } else {
1135
                        $usbarray[$usbid]['name'] = 'unknown';
1193
                            $usbarray[$usbid]['name'] = 'unknown';
-
 
1194
                        }
1136
                    }
1195
                    }
1137
                }
1196
                }
1138
            }
1197
            }
1139
        }
-
 
1140
 
1198
 
1141
        $usbdevices = CommonFunctions::findglob('/sys/bus/usb/devices/*/idProduct', GLOB_NOSORT);
1199
            $usbdevices = CommonFunctions::findglob('/sys/bus/usb/devices/*/idProduct', GLOB_NOSORT);
1142
        if (is_array($usbdevices) && (($total = count($usbdevices)) > 0)) {
1200
            if (is_array($usbdevices) && (($total = count($usbdevices)) > 0)) {
1143
            for ($i = 0; $i < $total; $i++) {
1201
                for ($i = 0; $i < $total; $i++) {
1144
                if (CommonFunctions::rfts($usbdevices[$i], $idproduct, 1, 4096, false) && (($idproduct=trim($idproduct)) != "")) { // is readable
1202
                    if (CommonFunctions::rfts($usbdevices[$i], $idproduct, 1, 4096, false) && (($idproduct=trim($idproduct)) != "")) { // is readable
1145
                    $busnum = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/busnum');
1203
                        $busnum = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/busnum');
1146
                    $devnum = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/devnum');
1204
                        $devnum = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/devnum');
1147
                    $idvendor = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/idVendor');
1205
                        $idvendor = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/idVendor');
1148
                    if (($busnum!==null) && ($devnum!==null) && ($idvendor!==null)) {
1206
                        if (($busnum!==null) && ($devnum!==null) && ($idvendor!==null)) {
1149
                        $usbid = intval($busnum).'-'.intval($devnum).' '.$idvendor.':'.$idproduct;
1207
                            $usbid = intval($busnum).'-'.intval($devnum).' '.$idvendor.':'.$idproduct;
1150
                        $manufacturer = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/manufacturer');
1208
                            $manufacturer = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/manufacturer');
1151
                        if ($manufacturer!==null) {
1209
                            if ($manufacturer!==null) {
1152
                            $usbarray[$usbid]['manufacturer'] = $manufacturer;
1210
                                $usbarray[$usbid]['manufacturer'] = $manufacturer;
1153
                        }
1211
                            }
1154
                        $product = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/product');
1212
                            $product = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/product');
1155
                        if ($product!==null) {
1213
                            if ($product!==null) {
1156
                            $usbarray[$usbid]['product'] = $product;
1214
                                $usbarray[$usbid]['product'] = $product;
1157
                        }
1215
                            }
1158
                        $speed = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/speed');
1216
                            $speed = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/speed');
1159
                        if ($product!==null) {
1217
                            if ($product!==null) {
1160
                            $usbarray[$usbid]['speed'] = $speed;
1218
                                $usbarray[$usbid]['speed'] = $speed;
1161
                        }
1219
                            }
1162
                        if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS
1220
                            if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS
1163
                           && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) {
1221
                               && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) {
1164
                            $serial = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/serial');
1222
                                $serial = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/serial');
1165
                            if (($serial!==null) && !preg_match('/\W/', $serial)) {
1223
                                if (($serial!==null) && !preg_match('/\W/', $serial)) {
1166
                                $usbarray[$usbid]['serial'] = $serial;
1224
                                    $usbarray[$usbid]['serial'] = $serial;
-
 
1225
                                }
1167
                            }
1226
                            }
1168
                        }
1227
                        }
1169
                    }
1228
                    }
1170
                }
1229
                }
1171
            }
1230
            }
1172
        }
1231
        }
1173
 
1232
 
1174
        if ((count($usbarray) == 0) && CommonFunctions::rfts('/proc/bus/usb/devices', $bufr, 0, 4096, false)) { // usb-devices
1233
        if (!$nobufu || ((count($usbarray) == 0) && CommonFunctions::rfts('/proc/bus/usb/devices', $bufu, 0, 4096, false))) { // usb-devices
1175
            $devnum = -1;
1234
            $devnum = -1;
1176
            $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1235
            $bufe = preg_split("/\n/", $bufu, -1, PREG_SPLIT_NO_EMPTY);
1177
            foreach ($bufe as $buf) {
1236
            foreach ($bufe as $buf) {
1178
                if (preg_match('/^T/', $buf)) {
1237
                if (preg_match('/^T/', $buf)) {
1179
                    $devnum++;
1238
                    $devnum++;
1180
                    if (preg_match('/\sSpd=([\d\.]+)/', $buf, $bufr)
1239
                    if (preg_match('/\sSpd=([\d\.]+)/', $buf, $bufr)
1181
                       && isset($bufr[1]) && ($bufr[1]!=="")) {
1240
                       && isset($bufr[1]) && ($bufr[1]!=="")) {
Line 1200... Line 1259...
1200
                    }
1259
                    }
1201
                }
1260
                }
1202
            }
1261
            }
1203
        }
1262
        }
1204
 
1263
 
1205
        if ((count($usbarray) == 0) && CommonFunctions::rfts('/proc/bus/input/devices', $bufr, 0, 4096, false)) {
1264
        if ($nobufu && (count($usbarray) == 0) && CommonFunctions::rfts('/proc/bus/input/devices', $bufr, 0, 4096, false)) {
1206
            $devnam = "unknown";
1265
            $devnam = "unknown";
1207
            $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1266
            $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1208
            foreach ($bufe as $buf) {
1267
            foreach ($bufe as $buf) {
1209
                if (preg_match('/^I:\s+(.+)/', $buf, $bufr)
1268
                if (preg_match('/^I:\s+(.+)/', $buf, $bufr)
1210
                   && isset($bufr[1]) && (trim($bufr[1])!=="")) {
1269
                   && isset($bufr[1]) && (trim($bufr[1])!=="")) {
Line 1373... Line 1432...
1373
     * Network devices
1432
     * Network devices
1374
     * includes also rx/tx bytes
1433
     * includes also rx/tx bytes
1375
     *
1434
     *
1376
     * @return void
1435
     * @return void
1377
     */
1436
     */
1378
    protected function _network()
1437
    protected function _network($bufr = null)
1379
    {
1438
    {
1380
        if (CommonFunctions::rfts('/proc/net/dev', $bufr, 0, 4096, PSI_DEBUG)) {
1439
        if (($bufr === null) && CommonFunctions::rfts('/proc/net/dev', $bufr, 0, 4096, PSI_DEBUG)) {
1381
            $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1440
            $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1382
            foreach ($bufe as $buf) {
1441
            foreach ($bufe as $buf) {
1383
                if (preg_match('/:/', $buf)) {
1442
                if (preg_match('/:/', $buf)) {
1384
                    list($dev_name, $stats_list) = preg_split('/:/', $buf, 2);
1443
                    list($dev_name, $stats_list) = preg_split('/:/', $buf, 2);
1385
                    $stats = preg_split('/\s+/', trim($stats_list));
1444
                    $stats = preg_split('/\s+/', trim($stats_list));
Line 1418... Line 1477...
1418
                                } elseif ((preg_match('/^\s+inet\saddr:(\S+)/i', $buf2, $ar_buf2)
1477
                                } elseif ((preg_match('/^\s+inet\saddr:(\S+)/i', $buf2, $ar_buf2)
1419
                                   || preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)
1478
                                   || preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)
1420
                                   || preg_match('/^'.trim($dev_name).':\s+ip\s+(\S+)\s+mask/i', $buf2, $ar_buf2)
1479
                                   || preg_match('/^'.trim($dev_name).':\s+ip\s+(\S+)\s+mask/i', $buf2, $ar_buf2)
1421
                                   || preg_match('/^\s+inet6\saddr:\s([^\/\s]+)(.+)\s+Scope:[GH]/i', $buf2, $ar_buf2)
1480
                                   || preg_match('/^\s+inet6\saddr:\s([^\/\s]+)(.+)\s+Scope:[GH]/i', $buf2, $ar_buf2)
1422
                                   || preg_match('/^\s+inet6\s+(\S+)\s+prefixlen(.+)((<global>)|(<host>))/i', $buf2, $ar_buf2)
1481
                                   || preg_match('/^\s+inet6\s+(\S+)\s+prefixlen(.+)((<global>)|(<host>))/i', $buf2, $ar_buf2)
1423
                                   || preg_match('/^\s+inet6?\s+([^\/\s]+).*\s+scope\s((global)|(host))/i', $buf2, $ar_buf2))
1482
                                   || preg_match('/^\s+inet6?\s+([^\/\s]+).*\s+scope\s((global)|(host))/i', $buf2, $ar_buf2)
-
 
1483
                                   || preg_match('/^\s+inet\saddr6:\s+(\S+)\s+prefixlen(.+)/i', $buf2, $ar_buf2))
1424
                                   && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) {
1484
                                   && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) {
1425
                                    $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1]));
1485
                                    $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1]));
1426
                                }
1486
                                }
1427
                            }
1487
                            }
1428
                        }
1488
                        }
Line 1445... Line 1505...
1445
                        }
1505
                        }
1446
                    }
1506
                    }
1447
                    $this->sys->setNetDevices($dev);
1507
                    $this->sys->setNetDevices($dev);
1448
                }
1508
                }
1449
            }
1509
            }
1450
        } elseif (CommonFunctions::executeProgram('ip', 'addr show', $bufr, PSI_DEBUG) && ($bufr!="")) {
1510
        } elseif (($bufr === null) && CommonFunctions::executeProgram('ip', 'addr show', $bufr, PSI_DEBUG) && ($bufr!="")) {
1451
            $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1511
            $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1452
            $was = false;
1512
            $was = false;
1453
            $macaddr = "";
1513
            $macaddr = "";
1454
            $speedinfo = "";
1514
            $speedinfo = "";
1455
            $dev = null;
1515
            $dev = null;
Line 1524... Line 1584...
1524
                if ($speedinfo != "") {
1584
                if ($speedinfo != "") {
1525
                    $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo);
1585
                    $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo);
1526
                }
1586
                }
1527
                $this->sys->setNetDevices($dev);
1587
                $this->sys->setNetDevices($dev);
1528
            }
1588
            }
1529
        } elseif (CommonFunctions::executeProgram('ifconfig', '-a', $bufr, PSI_DEBUG)) {
1589
        } elseif (($bufr !== null) || CommonFunctions::executeProgram('ifconfig', '-a', $bufr, PSI_DEBUG)) {
1530
            $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1590
            $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
1531
            $was = false;
1591
            $was = false;
1532
            $errors = 0;
1592
            $errors = 0;
1533
            $drops = 0;
1593
            $drops = 0;
1534
            $macaddr = "";
1594
            $macaddr = "";
Line 1615... Line 1675...
1615
                                     $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]);
1675
                                     $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]);
1616
                                }
1676
                                }
1617
                            } elseif ((preg_match('/^\s+inet\saddr:(\S+)/i', $line, $ar_buf2)
1677
                            } elseif ((preg_match('/^\s+inet\saddr:(\S+)/i', $line, $ar_buf2)
1618
                                  || preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $line, $ar_buf2)
1678
                                  || preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $line, $ar_buf2)
1619
                                  || preg_match('/^\s+inet6\saddr:\s([^\/\s]+)(.+)\s+Scope:[GH]/i', $line, $ar_buf2)
1679
                                  || preg_match('/^\s+inet6\saddr:\s([^\/\s]+)(.+)\s+Scope:[GH]/i', $line, $ar_buf2)
1620
                                  || preg_match('/^\s+inet6\s+(\S+)\s+prefixlen(.+)((<global>)|(<host>))/i', $line, $ar_buf2))
1680
                                  || preg_match('/^\s+inet6\s+(\S+)\s+prefixlen(.+)((<global>)|(<host>))/i', $line, $ar_buf2)
-
 
1681
                                  || preg_match('/^\s+inet\saddr6:\s+(\S+)\s+prefixlen(.+)/i', $line, $ar_buf2))
1621
                                  && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) {
1682
                                  && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) {
1622
                                $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1]));
1683
                                $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1]));
1623
                            }
1684
                            }
1624
                        }
1685
                        }
1625
                    }
1686
                    }
Line 1642... Line 1703...
1642
    /**
1703
    /**
1643
     * Physical memory information and Swap Space information
1704
     * Physical memory information and Swap Space information
1644
     *
1705
     *
1645
     * @return void
1706
     * @return void
1646
     */
1707
     */
1647
    protected function _memory()
1708
    protected function _memory($mbuf = null, $sbuf = null)
1648
    {
1709
    {
1649
        if (CommonFunctions::rfts('/proc/meminfo', $mbuf)) {
1710
        if (($mbuf !== null) || CommonFunctions::rfts('/proc/meminfo', $mbuf)) {
1650
            $swaptotal = null;
1711
            $swaptotal = null;
1651
            $swapfree = null;
1712
            $swapfree = null;
1652
            $bufe = preg_split("/\n/", $mbuf, -1, PREG_SPLIT_NO_EMPTY);
1713
            $bufe = preg_split("/\n/", $mbuf, -1, PREG_SPLIT_NO_EMPTY);
1653
            foreach ($bufe as $buf) {
1714
            foreach ($bufe as $buf) {
1654
                if (preg_match('/^MemTotal:\s+(\d+)\s*kB/i', $buf, $ar_buf)) {
1715
                if (preg_match('/^MemTotal:\s+(\d+)\s*kB/i', $buf, $ar_buf)) {
Line 1668... Line 1729...
1668
            $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree());
1729
            $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree());
1669
            // values for splitting memory usage
1730
            // values for splitting memory usage
1670
            if (($this->sys->getMemCache() !== null) && ($this->sys->getMemBuffer() !== null)) {
1731
            if (($this->sys->getMemCache() !== null) && ($this->sys->getMemBuffer() !== null)) {
1671
                $this->sys->setMemApplication($this->sys->getMemUsed() - $this->sys->getMemCache() - $this->sys->getMemBuffer());
1732
                $this->sys->setMemApplication($this->sys->getMemUsed() - $this->sys->getMemCache() - $this->sys->getMemBuffer());
1672
            }
1733
            }
1673
            if (CommonFunctions::rfts('/proc/swaps', $sbuf, 0, 4096, false)) {
1734
            if (($sbuf !== null) || CommonFunctions::rfts('/proc/swaps', $sbuf, 0, 4096, false)) {
1674
                $swaps = preg_split("/\n/", $sbuf, -1, PREG_SPLIT_NO_EMPTY);
1735
                $swaps = preg_split("/\n/", $sbuf, -1, PREG_SPLIT_NO_EMPTY);
1675
                unset($swaps[0]);
1736
                unset($swaps[0]);
1676
                foreach ($swaps as $swap) {
1737
                foreach ($swaps as $swap) {
1677
                    $ar_buf = preg_split('/\s+/', $swap, 5);
1738
                    $ar_buf = preg_split('/\s+/', $swap, 5);
1678
                    $dev = new DiskDevice();
1739
                    $dev = new DiskDevice();
Line 1697... Line 1758...
1697
    /**
1758
    /**
1698
     * filesystem information
1759
     * filesystem information
1699
     *
1760
     *
1700
     * @return void
1761
     * @return void
1701
     */
1762
     */
1702
    private function _filesystems()
1763
    protected function _filesystems()
1703
    {
1764
    {
1704
        $df_args = "";
1765
        $df_args = "";
1705
        $hideFstypes = array();
1766
        $hideFstypes = array();
1706
        if (defined('PSI_HIDE_FS_TYPES') && is_string(PSI_HIDE_FS_TYPES)) {
1767
        if (defined('PSI_HIDE_FS_TYPES') && is_string(PSI_HIDE_FS_TYPES)) {
1707
            if (preg_match(ARRAY_EXP, PSI_HIDE_FS_TYPES)) {
1768
            if (preg_match(ARRAY_EXP, PSI_HIDE_FS_TYPES)) {
Line 2037... Line 2098...
2037
                            $this->sys->setDistribution('Debian');
2098
                            $this->sys->setDistribution('Debian');
2038
                        } else {
2099
                        } else {
2039
                            $this->sys->setDistribution(trim($buf));
2100
                            $this->sys->setDistribution(trim($buf));
2040
                        }
2101
                        }
2041
                    }
2102
                    }
-
 
2103
                } elseif (CommonFunctions::fileexists($filename="/etc/slackware-version")) {
-
 
2104
                    if (!CommonFunctions::rfts($filename, $buf, 1, 4096, false)) {
-
 
2105
                        $buf = "";
-
 
2106
                    }
-
 
2107
                    if (isset($list['Slackware']['Image'])) {
-
 
2108
                        $this->sys->setDistributionIcon($list['Slackware']['Image']);
-
 
2109
                    }
-
 
2110
                    if (isset($list['Slackware']['Name'])) {
-
 
2111
                        if (($buf === null) || (trim($buf) == "")) {
-
 
2112
                            $this->sys->setDistribution($list['Slackware']['Name']);
-
 
2113
                        } else {
-
 
2114
                            $this->sys->setDistribution($list['Slackware']['Name']." ".trim($buf));
-
 
2115
                        }
-
 
2116
                    } else {
-
 
2117
                        if (($buf === null) || (trim($buf) == "")) {
-
 
2118
                            $this->sys->setDistribution('Slackware');
-
 
2119
                        } else {
-
 
2120
                            $this->sys->setDistribution(trim($buf));
-
 
2121
                        }
-
 
2122
                    }
2042
                } elseif (CommonFunctions::fileexists($filename="/etc/config/uLinux.conf")
2123
                } elseif (CommonFunctions::fileexists($filename="/etc/config/uLinux.conf")
2043
                   && CommonFunctions::rfts($filename, $buf, 0, 4096, false)
2124
                   && CommonFunctions::rfts($filename, $buf, 0, 4096, false)
2044
                   && preg_match("/^Rsync\sModel\s*=\s*QNAP/m", $buf)
2125
                   && preg_match("/^Rsync\sModel\s*=\s*QNAP/m", $buf)
2045
                   && preg_match("/^Version\s*=\s*([\d\.]+)\r?\nBuild\sNumber\s*=\s*(\S+)/m", $buf, $ver_buf)) {
2126
                   && preg_match("/^Version\s*=\s*([\d\.]+)\r?\nBuild\sNumber\s*=\s*(\S+)/m", $buf, $ver_buf)) {
2046
                    $buf = $ver_buf[1]."-".$ver_buf[2];
2127
                    $buf = $ver_buf[1]."-".$ver_buf[2];