Subversion Repositories ALCASAR

Rev

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

Rev 2770 Rev 2976
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
        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("/\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::rfts(PSI_APP_ROOT.'/data/freeipmi.txt', $lines)) {
37
                $this->_lines = preg_split("/\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;
42
            break;
43
        }
43
        }
44
    }
44
    }
45
 
45
 
46
    /**
46
    /**
47
     * get temperature information
47
     * get temperature information
48
     *
48
     *
49
     * @return void
49
     * @return void
50
     */
50
     */
51
    private function _temperature()
51
    private function _temperature()
52
    {
52
    {
53
        foreach ($this->_lines as $line) {
53
        foreach ($this->_lines as $line) {
54
            $buffer = preg_split("/\s*\|\s*/", $line);
54
            $buffer = preg_split("/\s*\|\s*/", $line);
55
            if ($buffer[2] == "Temperature" && $buffer[11] != "N/A" && $buffer[4] == "C") {
55
            if ($buffer[2] == "Temperature" && $buffer[11] != "N/A" && $buffer[4] == "C") {
56
                $dev = new SensorDevice();
56
                $dev = new SensorDevice();
57
                $dev->setName($buffer[1]);
57
                $dev->setName($buffer[1]);
58
                $dev->setValue($buffer[3]);
58
                $dev->setValue($buffer[3]);
59
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
59
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
60
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
60
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
61
                $this->mbinfo->setMbTemp($dev);
61
                $this->mbinfo->setMbTemp($dev);
62
            }
62
            }
63
        }
63
        }
64
    }
64
    }
65
 
65
 
66
    /**
66
    /**
67
     * get voltage information
67
     * get voltage information
68
     *
68
     *
69
     * @return void
69
     * @return void
70
     */
70
     */
71
    private function _voltage()
71
    private function _voltage()
72
    {
72
    {
73
        foreach ($this->_lines as $line) {
73
        foreach ($this->_lines as $line) {
74
            $buffer = preg_split("/\s*\|\s*/", $line);
74
            $buffer = preg_split("/\s*\|\s*/", $line);
75
            if ($buffer[2] == "Voltage" && $buffer[11] != "N/A" && $buffer[4] == "V") {
75
            if ($buffer[2] == "Voltage" && $buffer[11] != "N/A" && $buffer[4] == "V") {
76
                $dev = new SensorDevice();
76
                $dev = new SensorDevice();
77
                $dev->setName($buffer[1]);
77
                $dev->setName($buffer[1]);
78
                $dev->setValue($buffer[3]);
78
                $dev->setValue($buffer[3]);
79
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
79
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
80
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
80
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
81
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
81
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
82
                $this->mbinfo->setMbVolt($dev);
82
                $this->mbinfo->setMbVolt($dev);
83
            }
83
            }
84
        }
84
        }
85
    }
85
    }
86
 
86
 
87
    /**
87
    /**
88
     * get fan information
88
     * get fan information
89
     *
89
     *
90
     * @return void
90
     * @return void
91
     */
91
     */
92
    private function _fans()
92
    private function _fans()
93
    {
93
    {
94
        foreach ($this->_lines as $line) {
94
        foreach ($this->_lines as $line) {
95
            $buffer = preg_split("/\s*\|\s*/", $line);
95
            $buffer = preg_split("/\s*\|\s*/", $line);
96
            if ($buffer[2] == "Fan" && $buffer[11] != "N/A" && $buffer[4] == "RPM") {
96
            if ($buffer[2] == "Fan" && $buffer[11] != "N/A" && $buffer[4] == "RPM") {
97
                $dev = new SensorDevice();
97
                $dev = new SensorDevice();
98
                $dev->setName($buffer[1]);
98
                $dev->setName($buffer[1]);
99
                $dev->setValue($buffer[3]);
99
                $dev->setValue($buffer[3]);
100
                if ($buffer[6] != "N/A") {
100
                if ($buffer[6] != "N/A") {
101
                    $dev->setMin($buffer[6]);
101
                    $dev->setMin($buffer[6]);
102
                } elseif (($buffer[9] != "N/A") && ($buffer[9]<$buffer[3])) { //max instead min issue
102
                } elseif (($buffer[9] != "N/A") && ($buffer[9]<$buffer[3])) { //max instead min issue
103
                    $dev->setMin($buffer[9]);
103
                    $dev->setMin($buffer[9]);
104
                }
104
                }
105
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
105
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
106
                $this->mbinfo->setMbFan($dev);
106
                $this->mbinfo->setMbFan($dev);
107
            }
107
            }
108
        }
108
        }
109
    }
109
    }
110
 
110
 
111
    /**
111
    /**
112
     * get power information
112
     * get power information
113
     *
113
     *
114
     * @return void
114
     * @return void
115
     */
115
     */
116
    private function _power()
116
    private function _power()
117
    {
117
    {
118
        foreach ($this->_lines as $line) {
118
        foreach ($this->_lines as $line) {
119
            $buffer = preg_split("/\s*\|\s*/", $line);
119
            $buffer = preg_split("/\s*\|\s*/", $line);
120
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "W") {
120
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "W") {
121
                $dev = new SensorDevice();
121
                $dev = new SensorDevice();
122
                $dev->setName($buffer[1]);
122
                $dev->setName($buffer[1]);
123
                $dev->setValue($buffer[3]);
123
                $dev->setValue($buffer[3]);
124
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
124
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
125
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
125
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
126
                $this->mbinfo->setMbPower($dev);
126
                $this->mbinfo->setMbPower($dev);
127
            }
127
            }
128
        }
128
        }
129
    }
129
    }
130
 
130
 
131
    /**
131
    /**
132
     * get current information
132
     * get current information
133
     *
133
     *
134
     * @return void
134
     * @return void
135
     */
135
     */
136
    private function _current()
136
    private function _current()
137
    {
137
    {
138
        foreach ($this->_lines as $line) {
138
        foreach ($this->_lines as $line) {
139
            $buffer = preg_split("/\s*\|\s*/", $line);
139
            $buffer = preg_split("/\s*\|\s*/", $line);
140
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "A") {
140
            if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "A") {
141
                $dev = new SensorDevice();
141
                $dev = new SensorDevice();
142
                $dev->setName($buffer[1]);
142
                $dev->setName($buffer[1]);
143
                $dev->setValue($buffer[3]);
143
                $dev->setValue($buffer[3]);
144
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
144
                if ($buffer[6] != "N/A") $dev->setMin($buffer[6]);
145
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
145
                if ($buffer[9] != "N/A") $dev->setMax($buffer[9]);
146
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
146
                if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'"));
147
                $this->mbinfo->setMbCurrent($dev);
147
                $this->mbinfo->setMbCurrent($dev);
148
            }
148
            }
149
        }
149
        }
150
    }
150
    }
151
 
151
 
152
    /**
152
    /**
153
     * get other information
153
     * get other information
154
     *
154
     *
155
     * @return void
155
     * @return void
156
     */
156
     */
157
    private function _other()
157
    private function _other()
158
    {
158
    {
159
        foreach ($this->_lines as $line) {
159
        foreach ($this->_lines as $line) {
160
            $buffer = preg_split("/\s*\|\s*/", $line);
160
            $buffer = preg_split("/\s*\|\s*/", $line);
161
             if ($buffer[4] == "N/A"
161
             if ($buffer[4] == "N/A"
162
                && $buffer[2] != "OEM Reserved" && $buffer[11] != "N/A") {
162
                && $buffer[2] != "OEM Reserved" && $buffer[11] != "N/A") {
163
                $dev = new SensorDevice();
163
                $dev = new SensorDevice();
164
                $dev->setName($buffer[1].' ('.$buffer[2].')');
164
                $dev->setName($buffer[1].' ('.$buffer[2].')');
165
                $dev->setValue(trim($buffer[11], '\''));
165
                $dev->setValue(trim($buffer[11], '\''));
166
                $this->mbinfo->setMbOther($dev);
166
                $this->mbinfo->setMbOther($dev);
167
            }
167
            }
168
        }
168
        }
169
    }
169
    }
170
 
170
 
171
    /**
171
    /**
172
     * get the information
172
     * get the information
173
     *
173
     *
174
     * @see PSI_Interface_Sensor::build()
174
     * @see PSI_Interface_Sensor::build()
175
     *
175
     *
176
     * @return Void
176
     * @return Void
177
     */
177
     */
178
    public function build()
178
    public function build()
179
    {
179
    {
180
        $this->_temperature();
180
        $this->_temperature();
181
        $this->_voltage();
181
        $this->_voltage();
182
        $this->_fans();
182
        $this->_fans();
183
        $this->_power();
183
        $this->_power();
184
        $this->_current();
184
        $this->_current();
185
        $this->_other();
185
        $this->_other();
186
    }
186
    }
187
}
187
}
188
 
188