phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] phpsysinfo/includes/os class.BSD.common.inc.php, NONE


From: Dave Hall <address@hidden>
Subject: [Phpgroupware-cvs] phpsysinfo/includes/os class.BSD.common.inc.php, NONE, 1.1.2.1 class.Darwin.inc.php, NONE, 1.1.2.1 class.FreeBSD.inc.php, NONE, 1.1.2.1 class.Linux.inc.php, NONE, 1.1.2.1 class.NetBSD.inc.php, NONE, 1.1.2.1 class.OpenBSD.inc.php, NONE, 1.1.2.1
Date: Sat, 01 Nov 2003 22:08:29 +0000

Update of /cvsroot/phpgroupware/phpsysinfo/includes/os
In directory subversions:/tmp/cvs-serv22972/includes/os

Added Files:
      Tag: Version-0_9_16-branch
        class.BSD.common.inc.php class.Darwin.inc.php 
        class.FreeBSD.inc.php class.Linux.inc.php class.NetBSD.inc.php 
        class.OpenBSD.inc.php 
Log Message:
upstream update with a few little mods


--- NEW FILE: class.NetBSD.inc.php ---
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// $Id: class.NetBSD.inc.php,v 1.1.2.1 2003/11/01 22:08:27 skwashd Exp $
//

require('./includes/os/class.BSD.common.inc.php');

class sysinfo extends bsd_common {
    var $cpu_regexp;
    var $scsi_regexp;

    // Our contstructor
    // this function is run on the initialization of this class
    function sysinfo () {
        $this->cpu_regexp = "^cpu(.*)\, (.*) MHz";
        $this->scsi_regexp = "^(.*) at scsibus.*: <(.*)> .*";
    }

    function get_sys_ticks () {
        $a = $this->grab_key('kern.boottime');
        $sys_ticks = time() - $a;
        return $sys_ticks;
    }

    // get the pci device information out of dmesg
    function pci () {
        $results = array();

        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match('/(.*) at pci[0-9] dev [0-9]* function [0-9]*: 
(.*)$/', $buf, $ar_buf)) {
                $results[$i] = $ar_buf[1] . ": " . $ar_buf[2];
            } elseif (preg_match('/"(.*)" (.*).* at [.0-9]+ irq/', $buf, 
$ar_buf)) {
                $results[$i] = $ar_buf[1] . ": " . $ar_buf[2];
            }
            sort($results);
        }
        return $results;
    }

    function network () {
        $netstat_b = execute_program('netstat', '-nbdi | cut -c1-25,44- | grep 
"^[a-z]*[0-9][ \t].*Link"');
        $netstat_n = execute_program('netstat', '-ndi | cut -c1-25,44- | grep 
"^[a-z]*[0-9][ \t].*Link"');
        $lines_b = split("\n", $netstat_b);
        $lines_n = split("\n", $netstat_n);
        $results = array();
        for ($i = 0; $i < sizeof($lines_b); $i++) {
            $ar_buf_b = preg_split("/\s+/", $lines_b[$i]);
            $ar_buf_n = preg_split("/\s+/", $lines_n[$i]);
            if (!empty($ar_buf_b[0]) && !empty($ar_buf_n[3])) {
                $results[$ar_buf_b[0]] = array();

                $results[$ar_buf_b[0]]['rx_bytes'] = $ar_buf_b[3];
                $results[$ar_buf_b[0]]['rx_packets'] = $ar_buf_n[3];
                $results[$ar_buf_b[0]]['rx_errs'] = $ar_buf_n[4];
                $results[$ar_buf_b[0]]['rx_drop'] = $ar_buf_n[8];

                $results[$ar_buf_b[0]]['tx_bytes'] = $ar_buf_b[4];
                $results[$ar_buf_b[0]]['tx_packets'] = $ar_buf_n[5];
                $results[$ar_buf_b[0]]['tx_errs'] = $ar_buf_n[6];
                $results[$ar_buf_b[0]]['tx_drop'] = $ar_buf_n[8];

                $results[$ar_buf_b[0]]['errs'] = $ar_buf_n[4] + $ar_buf_n[6];
                $results[$ar_buf_b[0]]['drop'] = $ar_buf_n[8];
            }
        }
        return $results;
    }

    function memory () {
        $s = $this->grab_key('hw.physmem');
        $pagesize = $this->grab_key('hw.pagesize');

        $results['ram'] = array();

        $pstat = execute_program('vmstat', '-s');
        $lines = split("\n", $pstat);
        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i], 19);

            if ($i == 2) {
                $results['ram']['free'] = $ar_buf[1] * $pagesize / 1024;
            } elseif ($i == 15) {
                $results['swap']['total'] = $ar_buf[1] * $pagesize / 1024;
            } elseif ($i == 16) {
                $results['swap']['used'] = $ar_buf[1] * $pagesize / 1024;
            }
        }

        $results['ram']['total'] = $s / 1024;
        $results['ram']['shared'] = 0;
        $results['ram']['buffers'] = 0;
        $results['ram']['used'] = $results['ram']['total'] - 
$results['ram']['free'];
        $results['ram']['cached'] = 0;
        $results['ram']['t_used'] = $results['ram']['used'];
        $results['ram']['t_free'] = $results['ram']['free'];
        $results['ram']['percent'] = round(($results['ram']['used'] *100) / 
$results['ram']['total']);

        $results['swap']['free'] = $results['swap']['total'] - 
$results['swap']['used'];
        $results['swap']['percent'] = round(($results['swap']['used'] * 100) / 
$results['swap']['total']);

        return $results;
    }

    // get the ide device information out of dmesg
    function ide () {
        $results = array();

        $s = 0;
        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match('/^(.*) at (pciide|wdc)[0-9] (.*): <(.*)>/', $buf, 
$ar_buf)) {
                $s = $ar_buf[1];
                $results[$s]['model'] = $ar_buf[4];
                $results[$s]['media'] = 'Hard Disk';
                // now loop again and find the capacity
                for ($j=0; $j < count($this->read_dmesg()); $j++) {
                    $buf_n = $this->dmesg[$j];
                    if (preg_match("/^($s): (.*), (.*), (.*)MB, .*$/", $buf_n, 
$ar_buf_n)) {
                        $results[$s]['capacity'] = $ar_buf_n[4] * 2048 * 1.049;;
                    }
                }
            }
        }
        return $results;
    }
}

--- NEW FILE: class.Darwin.inc.php ---
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// $Id: class.Darwin.inc.php,v 1.1.2.1 2003/11/01 22:08:27 skwashd Exp $
//

require('./includes/os/class.BSD.common.inc.php');

echo "<p align=center><b>Note: The Darwin version of phpSysInfo is work in 
progress, some things currently don't work</b></p>";

class sysinfo extends bsd_common {
    var $cpu_regexp;
    var $scsi_regexp;

    // Our contstructor
    // this function is run on the initialization of this class
    function sysinfo () {
        //$this->cpu_regexp = "CPU: (.*) \((.*)-MHz (.*)\)";
        //$this->scsi_regexp = "^(.*): <(.*)> .*SCSI.*device";
    }

    function grab_key ($key) {
        $s = execute_program('sysctl', $key);
        $s = ereg_replace($key . ': ', '', $s);
        $s = ereg_replace($key . ' = ', '', $s); // fix Apple set keys

        return $s;
    }

    function grab_ioreg ($key) {
        $s = execute_program('ioreg', '-cls "$key" | grep "$key"'); //ioreg 
-cls "$key" | grep "$key"
        $s = ereg_replace($key . ': ', '', $s);
        $s = ereg_replace($key . ' = ', '', $s); // fix Apple set keys

        return $s;
    }

    function get_sys_ticks () {
        $s = explode(' ', $this->grab_key('kern.boottime'));
        $a = strtotime("$s[2] $s[1] $s[4] $s[3]"); // convert boottime to 
proper value
        $sys_ticks = time() - $a;

        return $sys_ticks;
    }

    function cpu_info () {
        $results = array();

        //$results['model'] = $this->grab_key('hw.model'); // need to expand 
this somehow...
        //$results['model'] = $this->grab_key('hw.machine');
        $results['model'] = ereg_replace('Processor type: ', '', 
execute_program('hostinfo', '| grep "Processor type"')); // get processor type
        $results['cpus']  = $this->grab_key('hw.ncpu');
        $results['mhz'] = round($this->grab_key('hw.cpufrequency') / 1000000); 
// return cpu speed
        $results['cache']  = round($this->grab_key('hw.l2cachesize') / 1024); 
// return l2 cache

        return $results;
    }

    // get the pci device information out of ioreg
    function pci () {
        $results = array();
        $s = execute_program('ioreg', '-cls "IOPCIDevice" | grep 
"IOPCIDevice"');
        $s = ereg_replace('\|', '', $s);
        $s = ereg_replace('\+\-\o', '', $s);
        $s = ereg_replace('[ ]+', '', $s);
        $s = ereg_replace('<classIOPCIDevice>', '', $s);

        $lines = split("\n", $s);
        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i], 19);
            $results[$i] = $ar_buf[0];
        }
        sort($results);
        return array_values(array_unique($results));
    }

    // get the ide device information out of ioreg
    function ide () {
        $results = array();
        // ioreg | grep "Media  <class IOMedia>"
        $s = execute_program('ioreg', '-cls "IOATABlockStorageDevice"'); //  | 
grep "IOATABlockStorageDevice"
        $s = ereg_replace('\|[ ]+', '', $s);
        $s = ereg_replace('\+\-\o', '', $s);
        $s = ereg_replace('<', '//', $s);
        $s = ereg_replace('>', '', $s);

        $lines = split("\n", $s);
        $j = 0;
        for ($i=0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\/\//", $lines[$i], 19);

            if ($ar_buf[1] == 'class IOMedia' && 
preg_match('/Media/',$ar_buf[0])) {
                // echo "$j: ";
                // echo $ar_buf[0];
                // echo "&nbsp;&nbsp;&nbsp;&nbsp;<b>";
                // echo $ar_buf[1];
                // echo "</b><br>\n";
                $results[$j++]['model'] = $ar_buf[0];
            }
        }
        return array_values(array_unique($results));
    }

    function memory () {
        $s = $this->grab_key('hw.physmem');

        $results['ram'] = array();

        $pstat = execute_program('vm_stat'); // use darwin's vm_stat
        $lines = split("\n", $pstat);
        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i], 19);

            if ($i == 1) {
                $results['ram']['free'] = $ar_buf[2] * 4; // calculate free 
memory from page sizes (each page = 4MB)
            }
        }

        $results['ram']['total'] = $s / 1024;
        $results['ram']['shared'] = 0;
        $results['ram']['buffers'] = 0;
        $results['ram']['used'] = $results['ram']['total'] - 
$results['ram']['free'];
        $results['ram']['cached'] = 0;
        $results['ram']['t_used'] = $results['ram']['used'];
        $results['ram']['t_free'] = $results['ram']['free'];

        $results['ram']['percent'] = round(($results['ram']['used'] *100) / 
$results['ram']['total']);

        // need to fix the swap info...
        $pstat = execute_program('swapinfo', '-k');
        $lines = split("\n",$pstat);

        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i], 6);

            if ($i == 0) {
                $results['swap']['total'] = 0;
                $results['swap']['used'] = 0;
                $results['swap']['free'] = 0;
            } else {
                $results['swap']['total'] = $results['swap']['total'] + 
$ar_buf[1];
                $results['swap']['used'] = $results['swap']['used'] + 
$ar_buf[2];
                $results['swap']['free'] = $results['swap']['free'] + 
$ar_buf[3];
            }
        }
        $results['swap']['percent'] = round(($results['swap']['used'] * 100) / 
$results['swap']['total']);

        return $results;
    }

    function network () {
        $netstat = execute_program('netstat', '-nbdi | cut -c1-24,42- | grep 
Link');
        $lines = split("\n", $netstat);
        $results = array();
        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i]);
            if (!empty($ar_buf[0])) {
                $results[$ar_buf[0]] = array();

                $results[$ar_buf[0]]['rx_bytes'] = $ar_buf[5];
                $results[$ar_buf[0]]['rx_packets'] = $ar_buf[3];
                $results[$ar_buf[0]]['rx_errs'] = $ar_buf[4];
                $results[$ar_buf[0]]['rx_drop'] = $ar_buf[10];

                $results[$ar_buf[0]]['tx_bytes'] = $ar_buf[8];
                $results[$ar_buf[0]]['tx_packets'] = $ar_buf[6];
                $results[$ar_buf[0]]['tx_errs'] = $ar_buf[7];
                $results[$ar_buf[0]]['tx_drop'] = $ar_buf[10];

                $results[$ar_buf[0]]['errs'] = $ar_buf[4] + $ar_buf[7];
                $results[$ar_buf[0]]['drop'] = $ar_buf[10];
            }
        }
        return $results;
    }

    function filesystems () {
        $df = execute_program('df', '-k');
        $mounts = split("\n", $df);
        $fstype = array();

        $s     = execute_program('mount');
        $lines = explode("\n", $s);

        $i = 0;
        while (list(,$line) = each($lines)) {
            ereg('(.*) \((.*)\)', $line, $a);

            $m = explode(' ', $a[0]);
            $fsdev[$m[0]] = $a[2];
        }

        for ($i = 1, $j = 0; $i < sizeof($mounts); $i++) {
            $ar_buf = preg_split("/\s+/", $mounts[$i], 6);

            switch ($ar_buf[0]) {
                case 'automount':   // skip the automount entries
                case 'devfs':       // skip the dev filesystem
                case 'fdesc':       // skip the fdesc
                case 'procfs':      // skip the proc filesystem
                case '<volfs>':     // skip the vol filesystem
                    continue 2;
                    break;
            }

            $results[$j] = array();

            $results[$j]['disk'] = $ar_buf[0];
            $results[$j]['size'] = $ar_buf[1];
            $results[$j]['used'] = $ar_buf[2];
            $results[$j]['free'] = $ar_buf[3];
            $results[$j]['percent'] = $ar_buf[4];
            $results[$j]['mount'] = $ar_buf[5];
            ($fstype[$ar_buf[5]]) ? $results[$j]['fstype'] = 
$fstype[$ar_buf[5]] : $results[$j]['fstype'] = $fsdev[$ar_buf[0]];
            $j++;
        }
        return $results;
    }
}

--- NEW FILE: class.BSD.common.inc.php ---
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// $Id: class.BSD.common.inc.php,v 1.1.2.1 2003/11/01 22:08:27 skwashd Exp $
//

class bsd_common {
    var $dmesg;

    // Our constructor
    // this function is run on the initialization of this class
    function bsd_common () {
        // initialize all the variables we need from our parent class
        $this->sysinfo();
    }

    // read /var/run/dmesg.boot, but only if we haven't already.
    function read_dmesg () {
        if (! $this->dmesg) {
            $this->dmesg = file ('/var/run/dmesg.boot');
        }
        return $this->dmesg;
    }

    // grabs a key from sysctl(8)
    function grab_key ($key) {
        return execute_program('sysctl', "-n $key");
    }

    // get our apache SERVER_NAME or vhost
    function hostname () {
        if ( !($result = getenv('SERVER_NAME')) ) {
            $result = "N.A.";
        }
        return $result;
    }

    // get our canonical hostname
    function chostname () {
        return execute_program('hostname');
    }

    // get the IP address of our canonical hostname
    function ip_addr () {
        if (!($result = getenv('SERVER_ADDR'))) {
            $result = gethostbyname($this->chostname());
        }
        return $result;
    }

    function kernel () {
        $s = $this->grab_key('kern.version');
        $a = explode(':', $s);
        return $a[0];
    }

    function uptime () {
        $sys_ticks = $this->get_sys_ticks();

        $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 ) {
            $result = "$days days, ";
        }

        if ( $hours != 0 ) {
            $result .= "$hours hours, ";
        }
        $result .= "$min minutes";

        return $result;
    }

    function users () {
        return execute_program('who', '| wc -l');
    }

    function loadavg () {
        $s = $this->grab_key('vm.loadavg');
        $s = ereg_replace('{ ', '', $s);
        $s = ereg_replace(' }', '', $s);
        $results = explode(' ', $s);

        return $results;
    }

    function cpu_info () {
        $results = array();
        $ar_buf  = array();

        $results['model'] = $this->grab_key('hw.model');
        $results['cpus']  = $this->grab_key('hw.ncpu');

        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match("/$this->cpu_regexp/", $buf, $ar_buf)) {
                $results['mhz'] = round($ar_buf[2]);
                break;
            }
        }
        return $results;
    }

    // get the scsi device information out of dmesg
    function scsi () {
        $results = array();

        $s = 0;
        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match("/$this->scsi_regexp/", $buf, $ar_buf)) {
            $results[$s++] = $ar_buf[1] .": " . $ar_buf[2];
            }
        }
        return array_values(array_unique($results));
    }

    // get the pci device information out of dmesg
    function pci () {
        $results = array();

        $s = 0;
        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match('/(.*): <(.*)>(.*) pci[0-9]$/', $buf, $ar_buf)) {
                $results[$s++] = $ar_buf[1] . ": " . $ar_buf[2];
            } elseif (preg_match('/(.*): <(.*)>.* at [.0-9]+ irq/', $buf, 
$ar_buf)) {
                $results[$s++] = $ar_buf[1] . ": " . $ar_buf[2];
            }
        }
        sort($results);
        return array_values(array_unique($results));
    }

    // get the ide device information out of dmesg
    function ide () {
        $results = array();

        $s = 0;
        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match('/^(ad[0-9]): (.*)MB <(.*)> (.*) (.*)/', $buf, 
$ar_buf)) {
                $s = $ar_buf[1];
                $results[$s]['model'] = $ar_buf[3];
                $results[$s]['media'] = 'Hard Disk';
                $results[$s]['capacity'] = $ar_buf[2] * 2048 * 1.049;
            } else
        if (preg_match('/^(acd[0-9]): (.*) <(.*)> (.*)/', $buf, $ar_buf)) {
                $s = $ar_buf[1];
                $results[$s]['model'] = $ar_buf[3];
                $results[$s]['media'] = 'CD-ROM';
            }
        }
        //return array_values(array_unique($results));
        // 1. more useful to have device names
        // 2. php 4.1.1 array_unique() deletes non-unique values.
        return $results;
    }

    function memory () {
        $s = $this->grab_key('hw.physmem');

        if (PHP_OS == 'FreeBSD' || PHP_OS == 'OpenBSD') {
            # vmstat on fbsd 4.4 or greater outputs kbytes not hw.pagesize
            # I should probably add some version checking here, but for now
            # we only support fbsd 4.4
            $pagesize = 1024;
        } else {
            $pagesize = $this->grab_key('hw.pagesize');
        }

        $results['ram'] = array();

        $pstat = execute_program('vmstat');
        $lines = split("\n", $pstat);
        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i], 19);

            if ($i == 2) {
                $results['ram']['free'] = $ar_buf[5] * $pagesize / 1024;
            }
        }

        $results['ram']['total'] = $s / 1024;
        $results['ram']['shared'] = 0;
        $results['ram']['buffers'] = 0;
        $results['ram']['used'] = $results['ram']['total'] - 
$results['ram']['free'];
        $results['ram']['cached'] = 0;
        $results['ram']['t_used'] = $results['ram']['used'];
        $results['ram']['t_free'] = $results['ram']['free'];

        $results['ram']['percent'] = round(($results['ram']['used'] * 100) / 
$results['ram']['total']);

        if (PHP_OS == 'OpenBSD') {
            $pstat = execute_program('swapctl', '-l -k');
        } else {
            $pstat = execute_program('swapinfo', '-k');
        }

        $lines = split("\n",$pstat);

        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i], 6);

            if ($i == 0) {
                $results['swap']['total'] = 0;
                $results['swap']['used'] = 0;
                $results['swap']['free'] = 0;
            } else {
                $results['swap']['total'] = $results['swap']['total'] + 
$ar_buf[1];
                $results['swap']['used'] = $results['swap']['used'] + 
$ar_buf[2];
                $results['swap']['free'] = $results['swap']['free'] + 
$ar_buf[3];
            }
        }
        $results['swap']['percent'] = round(($results['swap']['used'] * 100) / 
$results['swap']['total']);

        return $results;
    }

    function filesystems () {
        $df = execute_program('df', '-k');
        $mounts = split("\n", $df);
        $fstype = array();

        $s     = execute_program('mount');
        $lines = explode("\n", $s);

        $i = 0;
        while (list(,$line) = each($lines)) {
            ereg('(.*) \((.*)\)', $line, $a);

            $m = explode(' ', $a[0]);
            $fsdev[$m[0]] = $a[2];
        }

        for ($i = 1, $j = 0; $i < sizeof($mounts); $i++) {
            $ar_buf = preg_split("/\s+/", $mounts[$i], 6);

            // skip the proc filesystem
            if ($ar_buf[0] == 'procfs' || $ar_buf[0] == 'linprocfs') {
                continue;
            }

            $results[$j] = array();

            $results[$j]['disk'] = $ar_buf[0];
            $results[$j]['size'] = $ar_buf[1];
            $results[$j]['used'] = $ar_buf[2];
            $results[$j]['free'] = $ar_buf[3];
            $results[$j]['percent'] = $ar_buf[4];
            $results[$j]['mount'] = $ar_buf[5];
            ($fstype[$ar_buf[5]]) ? $results[$j]['fstype'] = 
$fstype[$ar_buf[5]] : $results[$j]['fstype'] = $fsdev[$ar_buf[0]];
            $j++;
        }
        return $results;
    }
}

--- NEW FILE: class.FreeBSD.inc.php ---
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// $Id: class.FreeBSD.inc.php,v 1.1.2.1 2003/11/01 22:08:27 skwashd Exp $
//

require('./includes/os/class.BSD.common.inc.php');

class sysinfo extends bsd_common {
    var $cpu_regexp;
    var $scsi_regexp;

    // Our contstructor
    // this function is run on the initialization of this class
    function sysinfo () {
        $this->cpu_regexp = "CPU: (.*) \((.*)-MHz (.*)\)";
        $this->scsi_regexp = "^(.*): <(.*)> .*SCSI.*device";
    }

    function get_sys_ticks () {
        $s = explode(' ', $this->grab_key('kern.boottime'));
        $a = ereg_replace('{ ', '', $s[3]);
        $sys_ticks = time() - $a;
        return $sys_ticks;
    }

    function network () {
        $netstat = execute_program('netstat', '-nbdi | cut -c1-24,42- | grep 
Link');
        $lines = split("\n", $netstat);
        $results = array();
        for ($i = 0; $i < sizeof($lines); $i++) {
            $ar_buf = preg_split("/\s+/", $lines[$i]);
            if (!empty($ar_buf[0]) && !empty($ar_buf[3])) {
                $results[$ar_buf[0]] = array();

                $results[$ar_buf[0]]['rx_bytes'] = $ar_buf[5];
                $results[$ar_buf[0]]['rx_packets'] = $ar_buf[3];
                $results[$ar_buf[0]]['rx_errs'] = $ar_buf[4];
                $results[$ar_buf[0]]['rx_drop'] = $ar_buf[10];

                $results[$ar_buf[0]]['tx_bytes'] = $ar_buf[8];
                $results[$ar_buf[0]]['tx_packets'] = $ar_buf[6];
                $results[$ar_buf[0]]['tx_errs'] = $ar_buf[7];
                $results[$ar_buf[0]]['tx_drop'] = $ar_buf[10];

                $results[$ar_buf[0]]['errs'] = $ar_buf[4] + $ar_buf[7];
                $results[$ar_buf[0]]['drop'] = $ar_buf[10];
            }
        }
        return $results;
    }
}

--- NEW FILE: class.Linux.inc.php ---
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// $Id: class.Linux.inc.php,v 1.1.2.1 2003/11/01 22:08:27 skwashd Exp $
//

class sysinfo {
    // get our apache SERVER_NAME or vhost
    function vhostname () {
        if (! ($result = getenv('SERVER_NAME'))) {
            $result = 'N.A.';
        }
        return $result;
    }

    // get our canonical hostname
    function chostname () {
        if ($fp = fopen('/proc/sys/kernel/hostname','r')) {
            $result = trim(fgets($fp, 4096));
            fclose($fp);
            $result = gethostbyaddr(gethostbyname($result));
        } else {
            $result = 'N.A.';
        }
        return $result;
    }

    // get the IP address of our canonical hostname
    function ip_addr () {
        if (!($result = getenv('SERVER_ADDR'))) {
            $result = gethostbyname($this->chostname());
        }
        return $result;
    }

    function kernel () {
        if ($fd = fopen('/proc/version', 'r')) {
            $buf = fgets($fd, 4096);
            fclose($fd);

            if (preg_match('/version (.*?) /', $buf, $ar_buf)) {
                $result = $ar_buf[1];

                if (preg_match('/SMP/', $buf)) {
                    $result .= ' (SMP)';
                }
            } else {
                $result = 'N.A.';
            }
        } else {
            $result = 'N.A.';
        }
        return $result;
    }

    function uptime () {
        global $text;
        $fd = fopen('/proc/uptime', 'r');
        $ar_buf = split(' ', fgets($fd, 4096));
        fclose($fd);

        $sys_ticks = trim($ar_buf[0]);

        $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) {
            $result = "$days " . $text['days'] . " ";
        }

        if ($hours != 0) {
            $result .= "$hours " . $text['hours'] . " ";
        }
        $result .= "$min " . $text['minutes'];

        return $result;
    }

    function users () {
        $who = split('=', execute_program('who', '-q'));
        $result = $who[1];
        return $result;
    }

    function loadavg () {
        if ($fd = fopen('/proc/loadavg', 'r')) {
            $results = split(' ', fgets($fd, 4096));
            fclose($fd);
        } else {
            $results = array('N.A.','N.A.','N.A.');
        }
        return $results;
    }

    function cpu_info () {
        $results = array();
        $ar_buf = array();

        if ($fd = fopen('/proc/cpuinfo', 'r')) {
            while ($buf = fgets($fd, 4096)) {
                list($key, $value) = preg_split('/\s+:\s+/', trim($buf), 2);

                // All of the tags here are highly architecture dependant.
                // the only way I could reconstruct them for machines I don't
                // have is to browse the kernel source.  So if your arch isn't
                // supported, tell me you want it written in.
                switch ($key) {
                    case 'model name':
                        $results['model'] = $value;
                        break;
                    case 'cpu MHz':
                        $results['mhz'] = sprintf('%.2f', $value);
                        break;
                    case 'cycle frequency [Hz]': // For Alpha arch - 2.2.x
                        $results['mhz'] = sprintf('%.2f', $value/1000000);
                        break;
                    case 'clock': // For PPC arch (damn borked POS)
                        $results['mhz'] = sprintf('%.2f', $value);
                        break;
                    case 'cpu': // For PPC arch (damn borked POS)
                        $results['model'] = $value;
                        break;
                    case 'revision': // For PPC arch (damn borked POS)
                        $results['model'] .= ' ( rev: ' . $value . ')';
                        break;
                    case 'cpu model': // For Alpha arch - 2.2.x
                        $results['model'] .= ' (' . $value . ')';
                        break;
                    case 'cache size':
                        $results['cache'] = $value;
                        break;
                    case 'bogomips':
                        $results['bogomips'] += $value;
                        break;
                    case 'BogoMIPS': // For alpha arch - 2.2.x
                        $results['bogomips'] += $value;
                        break;
                    case 'BogoMips': // For sparc arch
                        $results['bogomips'] += $value;
                        break;
                    case 'cpus detected': // For Alpha arch - 2.2.x
                        $results['cpus'] += 1;
                        break;
                    case 'system type': // Alpha arch - 2.2.x
                        $results['model'] .= ', ' . $value . ' ';
                        break;
                    case 'platform string': // Alpha arch - 2.2.x
                        $results['model'] .= ' (' . $value . ')';
                        break;
                    case 'processor':
                        $results['cpus'] += 1;
                        break;
                }
            }
            fclose($fd);
        }

        $keys = array_keys($results);
        $keys2be = array('model', 'mhz', 'cache', 'bogomips', 'cpus');

        while ($ar_buf = each($keys2be)) {
            if (! in_array($ar_buf[1], $keys)) {
                $results[$ar_buf[1]] = 'N.A.';
            }
        }
        return $results;

    }

    function pci () {
        $results = array();

        if ($fd = fopen('/proc/pci', 'r')) {
            while ($buf = fgets($fd, 4096)) {
                if (preg_match('/Bus/', $buf)) {
                    $device = 1;
                    continue;
                }

                if ($device) {
                    list($key, $value) = split(': ', $buf, 2);

                    if (!preg_match('/bridge/i', $key) && !preg_match('/USB/i', 
$key)) {
                        $results[] = preg_replace('/\([^\)]+\)\.$/', '', 
trim($value));
                    }
                    $device = 0;
                }
            }
        }
        return $results;
    }

    function ide () {
        $results = array();

        $handle = opendir('/proc/ide');

        while ($file = readdir($handle)) {
            if (preg_match('/^hd/', $file)) {
                $results[$file] = array();

                // Check if device is CD-ROM (CD-ROM capacity shows as 1024 GB)
                if ($fd = fopen("/proc/ide/$file/media", 'r')) {
                    $results[$file]['media'] = trim(fgets($fd, 4096));
                    if ($results[$file]['media'] == 'disk') {
                        $results[$file]['media'] = 'Hard Disk';
                    }

                    if ($results[$file]['media'] == 'cdrom') {
                        $results[$file]['media'] = 'CD-ROM';
                    }
                    fclose($fd);
                }

                if ($fd = fopen("/proc/ide/$file/model", 'r')) {
                    $results[$file]['model'] = trim(fgets($fd, 4096));
                    if (preg_match('/WDC/', $results[$file]['model'])) {
                        $results[$file]['manufacture'] = 'Western Digital';

                    } elseif (preg_match('/IBM/', $results[$file]['model'])) {
                        $results[$file]['manufacture'] = 'IBM';

                    } elseif (preg_match('/FUJITSU/', 
$results[$file]['model'])) {
                        $results[$file]['manufacture'] = 'Fujitsu';

                    } else {
                        $results[$file]['manufacture'] = 'Unknown';
                    }

                    fclose($fd);
                }

                if ($fd = fopen("/proc/ide/$file/capacity", 'r')) {
                    $results[$file]['capacity'] = trim(fgets($fd, 4096));
                    if ($results[$file]['media'] == 'CD-ROM') {
                        unset($results[$file]['capacity']);
                    }
                    fclose($fd);
                }
            }
        }
        closedir($handle); 

        return $results;
    }

    function scsi () {
        $results    = array();
        $dev_vendor = '';
        $dev_model  = '';
        $dev_rev    = '';
        $dev_type   = '';

        if ($fd = fopen('/proc/scsi/scsi', 'r')) {
            while ($buf = fgets($fd, 4096)) {
                if (preg_match('/Vendor/', $buf)) {
                    preg_match('/Vendor: (.*) Model: (.*) Rev: (.*)/i', $buf, 
$dev);
                    list($key, $value) = split(': ', $buf, 2);
                    $dev_str  = $value;
                    $get_type = 1;
                    continue;
                }

                if ($get_type) {
                    preg_match('/Type:\s+(\S+)/i', $buf, $dev_type);
                    $results[] = "$dev[1] $dev[2] ( $dev_type[1] )";
                    $get_type = 0;
                }
            }
        }
        return $results;
    }

    function network () {
        $results = array();

        if ($fd = fopen('/proc/net/dev', 'r')) {
            while ($buf = fgets($fd, 4096)) {
                if (preg_match('/:/', $buf)) {
                    list($dev_name, $stats_list) = preg_split('/:/', $buf, 2);
                    $stats = preg_split('/\s+/', trim($stats_list));
                    $results[$dev_name] = array();

                    $results[$dev_name]['rx_bytes']   = $stats[0];
                    $results[$dev_name]['rx_packets'] = $stats[1];
                    $results[$dev_name]['rx_errs']    = $stats[2];
                    $results[$dev_name]['rx_drop']    = $stats[3];

                    $results[$dev_name]['tx_bytes']   = $stats[8];
                    $results[$dev_name]['tx_packets'] = $stats[9];
                    $results[$dev_name]['tx_errs']    = $stats[10];
                    $results[$dev_name]['tx_drop']    = $stats[11];

                    $results[$dev_name]['errs']       = $stats[2] + $stats[10];
                    $results[$dev_name]['drop']       = $stats[3] + $stats[11];
                }
            }
        }
        return $results;
    }

    function memory () {
        if ($fd = fopen('/proc/meminfo', 'r')) {
            while ($buf = fgets($fd, 4096)) {
                if (preg_match('/Mem:\s+(.*)$/', $buf, $ar_buf)) {
                    $ar_buf = preg_split('/\s+/', $ar_buf[1], 6);

                    $results['ram'] = array();

                    $results['ram']['total']   = $ar_buf[0] / 1024;
                    $results['ram']['used']    = $ar_buf[1] / 1024;
                    $results['ram']['free']    = $ar_buf[2] / 1024;
                    $results['ram']['shared']  = $ar_buf[3] / 1024;
                    $results['ram']['buffers'] = $ar_buf[4] / 1024;
                    $results['ram']['cached']  = $ar_buf[5] / 1024;

                    // I don't like this since buffers and cache really aren't 
                    // 'used' per say, but I get too many emails about it.
                    $results['ram']['t_used']  = $results['ram']['used'];
                    $results['ram']['t_free']  = $results['ram']['total'] - 
$results['ram']['t_used'];
                    $results['ram']['percent'] = 
round(($results['ram']['t_used'] * 100) / $results['ram']['total']);
                }

                if (preg_match('/Swap:\s+(.*)$/', $buf, $ar_buf)) {
                    $ar_buf = preg_split('/\s+/', $ar_buf[1], 3);

                    $results['swap'] = array();

                    $results['swap']['total']   = $ar_buf[0] / 1024;
                    $results['swap']['used']    = $ar_buf[1] / 1024;
                    $results['swap']['free']    = $ar_buf[2] / 1024;
                    $results['swap']['percent'] = round(($ar_buf[1] * 100) / 
$ar_buf[0]);

                    // Get info on individual swap files
                    $swaps = file ('/proc/swaps');
                    $swapdevs = split("\n", $swaps);

                    for ($i = 1; $i < (sizeof($swapdevs) - 1); $i++) {
                        $ar_buf = preg_split('/\s+/', $swapdevs[$i], 6);

                        $results['devswap'][$i - 1] = array();
                        $results['devswap'][$i - 1]['dev']     = $ar_buf[0];
                        $results['devswap'][$i - 1]['total']   = $ar_buf[2];
                        $results['devswap'][$i - 1]['used']    = $ar_buf[3];
                        $results['devswap'][$i - 1]['free']    = 
($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']);
                        $results['devswap'][$i - 1]['percent'] = 
round(($ar_buf[3] * 100) / $ar_buf[2]);
                    }
                    break;
                }
            }
            fclose($fd);
        } else {
            $results['ram'] = array();
            $results['swap'] = array();
            $results['devswap'] = array();
        }
        return $results;
    }

    function filesystems () {
        $df = execute_program('df', '-kP');
        $mounts = split("\n", $df);
        $fstype = array();

        if ($fd = fopen('/proc/mounts', 'r')) {
            while ($buf = fgets($fd, 4096)) {
                list($dev, $mpoint, $type) = preg_split('/\s+/', trim($buf), 4);
                $fstype[$mpoint] = $type;
                $fsdev[$dev] = $type;
            }
            fclose($fd);
        }

        for ($i = 1; $i < sizeof($mounts); $i++) {
            $ar_buf = preg_split('/\s+/', $mounts[$i], 6);

            $results[$i - 1] = array();

            $results[$i - 1]['disk'] = $ar_buf[0];
            $results[$i - 1]['size'] = $ar_buf[1];
            $results[$i - 1]['used'] = $ar_buf[2];
            $results[$i - 1]['free'] = $ar_buf[3];
            $results[$i - 1]['percent'] = round(($results[$i - 1]['used'] * 
100) / $results[$i - 1]['size']) . '%';
            $results[$i - 1]['mount'] = $ar_buf[5];
            ($fstype[$ar_buf[5]]) ? $results[$i - 1]['fstype'] = 
$fstype[$ar_buf[5]] : $results[$i - 1]['fstype'] = $fsdev[$ar_buf[0]];
        }
        return $results;
    }
}

--- NEW FILE: class.OpenBSD.inc.php ---
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// $Id: class.OpenBSD.inc.php,v 1.1.2.1 2003/11/01 22:08:27 skwashd Exp $
//

echo "<center><b>Note: The Net/OpenBSD version of phpSysInfo is work in 
progress, some things currently don't work</b></center>";

require('./includes/os/class.BSD.common.inc.php');

class sysinfo extends bsd_common {
    var $cpu_regexp;
    var $scsi_regexp;

    // Our contstructor
    // this function is run on the initialization of this class
    function sysinfo () {
        $this->cpu_regexp = "^cpu(.*) (.*) MHz";
        $this->scsi_regexp = "^(.*) at scsibus.*: <(.*)> .*";
    }

    function get_sys_ticks () {
        $a = $this->grab_key('kern.boottime');
        $sys_ticks = time() - $a;
        return $sys_ticks;
    }

    // get the pci device information out of dmesg
    function pci () {
        $results = array();

        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match('/(.*) at pci[0-9] (.*) "(.*)" (.*)$/', $buf, 
$ar_buf)) {
                $results[$i] = $ar_buf[1] . ": " . $ar_buf[3];
            } elseif (preg_match('/"(.*)" (.*).* at [.0-9]+ irq/', $buf, 
$ar_buf)) {
                $results[$i] = $ar_buf[1] . ": " . $ar_buf[2];
            }
            sort($results);
        }
        return $results;
    }

    function network () {
        $netstat_b = execute_program('netstat', '-nbdi | cut -c1-25,44- | grep 
Link | grep -v \'* \'');
        $netstat_n = execute_program('netstat', '-ndi | cut -c1-25,44- | grep 
Link | grep -v \'* \'');
        $lines_b = split("\n", $netstat_b);
        $lines_n = split("\n", $netstat_n);
        $results = array();
        for ($i = 0; $i < sizeof($lines_b); $i++) {
            $ar_buf_b = preg_split("/\s+/", $lines_b[$i]);
            $ar_buf_n = preg_split("/\s+/", $lines_n[$i]);
            if (!empty($ar_buf_b[0]) && !empty($ar_buf_n[3])) {
                $results[$ar_buf_b[0]] = array();

                $results[$ar_buf_b[0]]['rx_bytes'] = $ar_buf_b[3];
                $results[$ar_buf_b[0]]['rx_packets'] = $ar_buf_n[3];
                $results[$ar_buf_b[0]]['rx_errs'] = $ar_buf_n[4];
                $results[$ar_buf_b[0]]['rx_drop'] = $ar_buf_n[8];

                $results[$ar_buf_b[0]]['tx_bytes'] = $ar_buf_b[4];
                $results[$ar_buf_b[0]]['tx_packets'] = $ar_buf_n[5];
                $results[$ar_buf_b[0]]['tx_errs'] = $ar_buf_n[6];
                $results[$ar_buf_b[0]]['tx_drop'] = $ar_buf_n[8];

                $results[$ar_buf_b[0]]['errs'] = $ar_buf_n[4] + $ar_buf_n[6];
                $results[$ar_buf_b[0]]['drop'] = $ar_buf_n[8];
            }
        }
        return $results;
    }

    // get the ide device information out of dmesg
    function ide () {
        $results = array();

        $s = 0;
        for ($i=0; $i < count($this->read_dmesg()); $i++) {
            $buf = $this->dmesg[$i];
            if (preg_match('/^(.*) at pciide[0-9] (.*): <(.*)>/', $buf, 
$ar_buf)) {
                $s = $ar_buf[1];
                $results[$s]['model'] = $ar_buf[3];
                $results[$s]['media'] = 'Hard Disk';
                // now loop again and find the capacity
                for ($j=0; $j < count($this->read_dmesg()); $j++) {
                    $buf_n = $this->dmesg[$j];
                    if (preg_match("/^($s): (.*), (.*), (.*)MB, .*$/", $buf_n, 
$ar_buf_n)) {
                        $results[$s]['capacity'] = $ar_buf_n[4] * 2048 * 1.049;;
                    }
                }
            }
        }
        return $results;
    }
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]