Subversion Repositories ALCASAR

Rev

Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
2770 rexy 1
<?php
2
/**
3
 * QNX System Class
4
 *
5
 * PHP version 5
6
 *
7
 * @category  PHP
8
 * @package   PSI QNX OS class
9
 * @author    Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
10
 * @copyright 2012 phpSysInfo
11
 * @license   http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version
12
 * @version   SVN: $Id: class.QNX.inc.php 687 2012-09-06 20:54:49Z namiltd $
13
 * @link      http://phpsysinfo.sourceforge.net
14
 */
15
 /**
16
 * QNX sysinfo class
17
 * get all the required information from QNX system
18
 *
19
 * @category  PHP
20
 * @package   PSI QNX OS class
21
 * @author    Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
22
 * @copyright 2012 phpSysInfo
23
 * @license   http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version
24
 * @version   Release: 3.0
25
 * @link      http://phpsysinfo.sourceforge.net
26
 */
27
class QNX extends OS
28
{
29
    /**
30
     * get the cpu information
31
     *
32
     * @return void
33
     */
34
    protected function _cpuinfo()
35
    {
36
        if (CommonFunctions::executeProgram('pidin', 'info', $buf)
37
           && preg_match('/^Processor\d+: (.*)/m', $buf)) {
38
            $lines = preg_split("/\n/", $buf, -1, PREG_SPLIT_NO_EMPTY);
39
            foreach ($lines as $line) {
40
                if (preg_match('/^Processor\d+: (.+)/', $line, $proc)) {
41
                    $dev = new CpuDevice();
42
                    $dev->SetModel(trim($proc[1]));
43
                    if (preg_match('/(\d+)MHz/', $proc[1], $mhz)) {
44
                        $dev->setCpuSpeed($mhz[1]);
45
                    }
46
                    $this->sys->setCpus($dev);
47
                }
48
            }
49
        }
50
    }
51
 
52
    /**
53
     * QNX Version
54
     *
55
     * @return void
56
     */
57
    private function _kernel()
58
    {
59
        if (CommonFunctions::executeProgram('uname', '-rvm', $ret)) {
60
            $this->sys->setKernel($ret);
61
        }
62
    }
63
 
64
    /**
65
     * Distribution
66
     *
67
     * @return void
68
     */
69
    protected function _distro()
70
    {
71
        if (CommonFunctions::executeProgram('uname', '-sr', $ret))
72
            $this->sys->setDistribution($ret);
73
        else
74
            $this->sys->setDistribution('QNX');
75
 
76
        $this->sys->setDistributionIcon('QNX.png');
77
    }
78
 
79
    /**
80
     * UpTime
81
     * time the system is running
82
     *
83
     * @return void
84
     */
85
    private function _uptime()
86
    {
87
 
88
        if (CommonFunctions::executeProgram('pidin', 'info', $buf)
89
           && preg_match('/^.* BootTime:(.*)/', $buf, $bstart)
90
           && CommonFunctions::executeProgram('date', '', $bstop)) {
91
            /* default error handler */
92
            if (function_exists('errorHandlerPsi')) {
93
                restore_error_handler();
94
            }
95
            /* fatal errors only */
96
            $old_err_rep = error_reporting();
97
            error_reporting(E_ERROR);
98
 
99
            $uptime = strtotime($bstop)-strtotime($bstart[1]);
100
            if ($uptime > 0) $this->sys->setUptime($uptime);
101
 
102
            /* restore error level */
103
            error_reporting($old_err_rep);
104
            /* restore error handler */
105
            if (function_exists('errorHandlerPsi')) {
106
                set_error_handler('errorHandlerPsi');
107
            }
108
        }
109
    }
110
 
111
    /**
112
     * Number of Users
113
     *
114
     * @return void
115
     */
116
    protected function _users()
117
    {
118
        $this->sys->setUsers(1);
119
    }
120
 
121
    /**
122
     * Virtual Host Name
123
     *
124
     * @return void
125
     */
126
    private function _hostname()
127
    {
128
        if (PSI_USE_VHOST === true) {
129
            if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm);
130
        } else {
131
            if (CommonFunctions::executeProgram('uname', '-n', $result, PSI_DEBUG)) {
132
                $ip = gethostbyname($result);
133
                if ($ip != $result) {
134
                    $this->sys->setHostname(gethostbyaddr($ip));
135
                }
136
            }
137
        }
138
    }
139
 
140
    /**
141
     *  Physical memory information and Swap Space information
142
     *
143
     *  @return void
144
     */
145
    private function _memory()
146
    {
147
        if (CommonFunctions::executeProgram('pidin', 'info', $buf)
148
           && preg_match('/^.* FreeMem:(\S+)Mb\/(\S+)Mb/', $buf, $memm)) {
149
            $this->sys->setMemTotal(1024*1024*$memm[2]);
150
            $this->sys->setMemFree(1024*1024*$memm[1]);
151
            $this->sys->setMemUsed(1024*1024*($memm[2]-$memm[1]));
152
        }
153
    }
154
 
155
    /**
156
     * filesystem information
157
     *
158
     * @return void
159
     */
160
    private function _filesystems()
161
    {
162
        $arrResult = Parser::df("-P 2>/dev/null");
163
        foreach ($arrResult as $dev) {
164
            $this->sys->setDiskDevices($dev);
165
        }
166
    }
167
 
168
    /**
169
     * network information
170
     *
171
     * @return void
172
     */
173
    private function _network()
174
    {
175
        if (CommonFunctions::executeProgram('ifconfig', '', $bufr, PSI_DEBUG)) {
176
            $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY);
177
            $was = false;
178
            $dev = null;
179
            foreach ($lines as $line) {
180
                if (preg_match("/^([^\s:]+)/", $line, $ar_buf)) {
181
                    if ($was) {
182
                        $this->sys->setNetDevices($dev);
183
                    }
184
                    $dev = new NetDevice();
185
                    $dev->setName($ar_buf[1]);
186
                    $was = true;
187
                } else {
188
                    if ($was) {
189
                        if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) {
190
                            if (preg_match('/^\s+address:\s*(\S+)/i', $line, $ar_buf2)) {
191
                                if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1])));
192
                            } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $line, $ar_buf2))
193
                                $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]);
194
 
195
                        }
196
                    }
197
                }
198
            }
199
            if ($was) {
200
                $this->sys->setNetDevices($dev);
201
            }
202
        }
203
    }
204
 
205
    /**
206
     * get the information
207
     *
208
     * @return Void
209
     */
210
    public function build()
211
    {
212
        $this->error->addError("WARN", "The QNX version of phpSysInfo is a work in progress, some things currently don't work");
213
        if (!$this->blockname || $this->blockname==='vitals') {
214
            $this->_distro();
215
            $this->_hostname();
216
            $this->_kernel();
217
            $this->_uptime();
218
            $this->_users();
219
        }
220
        if (!$this->blockname || $this->blockname==='hardware') {
221
            $this->_cpuinfo();
222
        }
223
        if (!$this->blockname || $this->blockname==='network') {
224
            $this->_network();
225
        }
226
        if (!$this->blockname || $this->blockname==='memory') {
227
            $this->_memory();
228
        }
229
        if (!$this->blockname || $this->blockname==='filesystem') {
230
            $this->_filesystems();
231
        }
232
    }
233
}