Subversion Repositories ALCASAR

Rev

Rev 2976 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 2976 Rev 3037
1
<?php
1
<?php
2
/**
2
/**
3
 * freeipmi sensor class, getting information from ipmi-sensors
3
 * freeipmi sensor class, getting information from ipmi-sensors
4
 *
4
 *
5
 * PHP version 5
5
 * PHP version 5
6
 *
6
 *
7
 * @category  PHP
7
 * @category  PHP
8
 * @package   PSI_Sensor
8
 * @package   PSI_Sensor
9
 * @author    Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
9
 * @author    Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
10
 * @copyright 2014 phpSysInfo
10
 * @copyright 2014 phpSysInfo
11
 * @license   http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version
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   Release: 3.0
12
 * @version   Release: 3.0
13
 * @link      http://phpsysinfo.sourceforge.net
13
 * @link      http://phpsysinfo.sourceforge.net
14
 */
14
 */
15
class FreeIPMI extends Sensors
15
class FreeIPMI extends Sensors
16
{
16
{
17
    /**
17
    /**
18
     * content to parse
18
     * content to parse
19
     *
19
     *
20
     * @var array
20
     * @var array
21
     */
21
     */
22
    private $_lines = array();
22
    private $_lines = array();
23
 
23
 
24
    /**
24
    /**
25
     * fill the private content var through command or data access
25
     * fill the private content var through command or data access
26
     */
26
     */
27
    public function __construct()
27
    public function __construct()
28
    {
28
    {
29
        parent::__construct();
29
        parent::__construct();
30
        if ((PSI_OS != 'WINNT') && !defined('PSI_EMU_HOSTNAME')) switch (defined('PSI_SENSOR_FREEIPMI_ACCESS')?strtolower(PSI_SENSOR_FREEIPMI_ACCESS):'command') {
30
        if ((PSI_OS != 'WINNT') && !defined('PSI_EMU_HOSTNAME')) switch (defined('PSI_SENSOR_FREEIPMI_ACCESS')?strtolower(PSI_SENSOR_FREEIPMI_ACCESS):'command') {
31
        case 'command':
31
        case 'command':
32
            CommonFunctions::executeProgram('ipmi-sensors', '--output-sensor-thresholds', $lines);
32
            CommonFunctions::executeProgram('ipmi-sensors', '--output-sensor-thresholds', $lines);
33
            $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
33
            $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
34
            break;
34
            break;
35
        case 'data':
35
        case 'data':
36
            if (CommonFunctions::rfts(PSI_APP_ROOT.'/data/freeipmi.txt', $lines)) {
36
            if (CommonFunctions::rftsdata('freeipmi.tmp', $lines)) {
37
                $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
37
                $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
38
            }
38
            }
39
            break;
39
            break;
40
        default:
40
        default:
41
            $this->error->addConfigError('__construct()', '[sensor_freeipmi] ACCESS');
41
            $this->error->addConfigError('__construct()', '[sensor_freeipmi] ACCESS');
42
            break;
-
 
43
        }
42
        }
44
    }
43
    }
45
 
44
 
46
    /**
45
    /**
47
     * get temperature information
46
     * get temperature information
48
     *
47
     *
49
     * @return void
48
     * @return void
50
     */
49
     */
51
    private function _temperature()
50
    private function _temperature()
52
    {
51
    {
53
        foreach ($this->_lines as $line) {
52
        foreach ($this->_lines as $line) {
54
            $buffer = preg_split("/\s*\|\s*/", $line);
53
            $buffer = preg_split("/\s*\|\s*/", $line);
55
            if ($buffer[2] == "Temperature" && $buffer[11] != "N/A" && $buffer[4] == "C") {
54
            if ($buffer[2] == "Temperature" && $buffer[11] != "N/A" && $buffer[4] == "C") {
56
                $dev = new SensorDevice();
55
                $dev = new SensorDevice();
57
                $dev->setName($buffer[1]);
56
                $dev->setName($buffer[1]);
58
                $dev->setValue($buffer[3]);
57
                $dev->setValue($buffer[3]);
59
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
58
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
60
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
59
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
61
                $this->mbinfo->setMbTemp($dev);
60
                $this->mbinfo->setMbTemp($dev);
62
            }
61
            }
63
        }
62
        }
64
    }
63
    }
65
 
64
 
66
    /**
65
    /**
67
     * get voltage information
66
     * get voltage information
68
     *
67
     *
69
     * @return void
68
     * @return void
70
     */
69
     */
71
    private function _voltage()
70
    private function _voltage()
72
    {
71
    {
73
        foreach ($this->_lines as $line) {
72
        foreach ($this->_lines as $line) {
74
            $buffer = preg_split("/\s*\|\s*/", $line);
73
            $buffer = preg_split("/\s*\|\s*/", $line);
75
            if ($buffer[2] == "Voltage" && $buffer[11] != "N/A" && $buffer[4] == "V") {
74
            if ($buffer[2] == "Voltage" && $buffer[11] != "N/A" && $buffer[4] == "V") {
76
                $dev = new SensorDevice();
75
                $dev = new SensorDevice();
77
                $dev->setName($buffer[1]);
76
                $dev->setName($buffer[1]);
78
                $dev->setValue($buffer[3]);
77
                $dev->setValue($buffer[3]);
79
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
78
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
80
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
79
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
81
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
80
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
82
                $this->mbinfo->setMbVolt($dev);
81
                $this->mbinfo->setMbVolt($dev);
83
            }
82
            }
84
        }
83
        }
85
    }
84
    }
86
 
85
 
87
    /**
86
    /**
88
     * get fan information
87
     * get fan information
89
     *
88
     *
90
     * @return void
89
     * @return void
91
     */
90
     */
92
    private function _fans()
91
    private function _fans()
93
    {
92
    {
94
        foreach ($this->_lines as $line) {
93
        foreach ($this->_lines as $line) {
95
            $buffer = preg_split("/\s*\|\s*/", $line);
94
            $buffer = preg_split("/\s*\|\s*/", $line);
96
            if ($buffer[2] == "Fan" && $buffer[11] != "N/A" && $buffer[4] == "RPM") {
95
            if ($buffer[2] == "Fan" && $buffer[11] != "N/A" && $buffer[4] == "RPM") {
97
                $dev = new SensorDevice();
96
                $dev = new SensorDevice();
98
                $dev->setName($buffer[1]);
97
                $dev->setName($buffer[1]);
99
                $dev->setValue($buffer[3]);
98
                $dev->setValue($buffer[3]);
100
                if ($buffer[6] != "N/A") {
99
                if ($buffer[6] != "N/A") {
101
                    $dev->setMin($buffer[6]);
100
                    $dev->setMin($buffer[6]);
102
                } elseif (($buffer[9] != "N/A") && ($buffer[9]<$buffer[3])) { //max instead min issue
101
                } elseif (($buffer[9] != "N/A") && ($buffer[9]<$buffer[3])) { //max instead min issue
103
                    $dev->setMin($buffer[9]);
102
                    $dev->setMin($buffer[9]);
104
                }
103
                }
105
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
104
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
106
                $this->mbinfo->setMbFan($dev);
105
                $this->mbinfo->setMbFan($dev);
107
            }
106
            }
108
        }
107
        }
109
    }
108
    }
110
 
109
 
111
    /**
110
    /**
112
     * get power information
111
     * get power information
113
     *
112
     *
114
     * @return void
113
     * @return void
115
     */
114
     */
116
    private function _power()
115
    private function _power()
117
    {
116
    {
118
        foreach ($this->_lines as $line) {
117
        foreach ($this->_lines as $line) {
119
            $buffer = preg_split("/\s*\|\s*/", $line);
118
            $buffer = preg_split("/\s*\|\s*/", $line);
120
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "W") {
119
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "W") {
121
                $dev = new SensorDevice();
120
                $dev = new SensorDevice();
122
                $dev->setName($buffer[1]);
121
                $dev->setName($buffer[1]);
123
                $dev->setValue($buffer[3]);
122
                $dev->setValue($buffer[3]);
124
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
123
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
125
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
124
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
126
                $this->mbinfo->setMbPower($dev);
125
                $this->mbinfo->setMbPower($dev);
127
            }
126
            }
128
        }
127
        }
129
    }
128
    }
130
 
129
 
131
    /**
130
    /**
132
     * get current information
131
     * get current information
133
     *
132
     *
134
     * @return void
133
     * @return void
135
     */
134
     */
136
    private function _current()
135
    private function _current()
137
    {
136
    {
138
        foreach ($this->_lines as $line) {
137
        foreach ($this->_lines as $line) {
139
            $buffer = preg_split("/\s*\|\s*/", $line);
138
            $buffer = preg_split("/\s*\|\s*/", $line);
140
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "A") {
139
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "A") {
141
                $dev = new SensorDevice();
140
                $dev = new SensorDevice();
142
                $dev->setName($buffer[1]);
141
                $dev->setName($buffer[1]);
143
                $dev->setValue($buffer[3]);
142
                $dev->setValue($buffer[3]);
144
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
143
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
145
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
144
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
146
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
145
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
147
                $this->mbinfo->setMbCurrent($dev);
146
                $this->mbinfo->setMbCurrent($dev);
148
            }
147
            }
149
        }
148
        }
150
    }
149
    }
151
 
150
 
152
    /**
151
    /**
153
     * get other information
152
     * get other information
154
     *
153
     *
155
     * @return void
154
     * @return void
156
     */
155
     */
157
    private function _other()
156
    private function _other()
158
    {
157
    {
159
        foreach ($this->_lines as $line) {
158
        foreach ($this->_lines as $line) {
160
            $buffer = preg_split("/\s*\|\s*/", $line);
159
            $buffer = preg_split("/\s*\|\s*/", $line);
161
             if ($buffer[4] == "N/A"
160
             if ($buffer[4] == "N/A"
162
                && $buffer[2] != "OEM Reserved" && $buffer[11] != "N/A") {
161
                && $buffer[2] != "OEM Reserved" && $buffer[11] != "N/A") {
163
                $dev = new SensorDevice();
162
                $dev = new SensorDevice();
164
                $dev->setName($buffer[1].' ('.$buffer[2].')');
163
                $dev->setName($buffer[1].' ('.$buffer[2].')');
165
                $dev->setValue(trim($buffer[11], '\''));
164
                $dev->setValue(trim($buffer[11], '\''));
166
                $this->mbinfo->setMbOther($dev);
165
                $this->mbinfo->setMbOther($dev);
167
            }
166
            }
168
        }
167
        }
169
    }
168
    }
170
 
169
 
171
    /**
170
    /**
172
     * get the information
171
     * get the information
173
     *
172
     *
174
     * @see PSI_Interface_Sensor::build()
173
     * @see PSI_Interface_Sensor::build()
175
     *
174
     *
176
     * @return Void
175
     * @return void
177
     */
176
     */
178
    public function build()
177
    public function build()
179
    {
178
    {
180
        $this->_temperature();
179
        $this->_temperature();
181
        $this->_voltage();
180
        $this->_voltage();
182
        $this->_fans();
181
        $this->_fans();
183
        $this->_power();
182
        $this->_power();
184
        $this->_current();
183
        $this->_current();
185
        $this->_other();
184
        $this->_other();
186
    }
185
    }
187
}
186
}
188
 
187