Rev 4 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4 | Rev 74 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | <?php /* <ViaThinkSoftSignature> |
1 | <?php /* <ViaThinkSoftSignature> |
2 | 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 |
23 | Q== |
23 | Q== |
24 | </ViaThinkSoftSignature> */ ?> |
24 | </ViaThinkSoftSignature> */ ?> |
25 | <?php |
25 | <?php |
26 | 26 | ||
27 | /* |
27 | /* |
Line 70... | Line 70... | ||
70 | $level = file_exists($level_file) ? trim(file_get_contents($level_file)) : 'RAID?'; |
70 | $level = file_exists($level_file) ? trim(file_get_contents($level_file)) : 'RAID?'; |
71 | return $level; |
71 | return $level; |
72 | } |
72 | } |
73 | 73 | ||
74 | private function raidState($device) { |
74 | private function raidState($device) { |
- | 75 | // mdadm outputs "clean, degraded", but /sys/block/md0/md/array_state only outputs "clean" |
|
- | 76 | $output = []; |
|
- | 77 | exec("mdadm --detail /dev/".escapeshellarg($device)." | grep -e '^\s*State : '", $output, $ec); |
|
- | 78 | if ($ec == 0) { |
|
- | 79 | $state = trim(implode("\n", $output)); |
|
- | 80 | $state = trim(explode(':', $state)[1]); |
|
- | 81 | return $state; |
|
- | 82 | } |
|
- | 83 | ||
- | 84 | // Fallback |
|
75 | $state_file = "/sys/block/$device/md/array_state"; |
85 | $state_file = "/sys/block/$device/md/array_state"; |
76 | if (!file_exists($state_file)) { |
86 | if (!file_exists($state_file)) { |
77 | throw new VNagException("Kernel too old to fetch state of array $device"); |
87 | throw new VNagException("Kernel too old to fetch state of array $device"); |
78 | } |
88 | } |
79 | $state = trim(file_get_contents($state_file)); |
89 | $state = trim(file_get_contents($state_file)); |
Line 134... | Line 144... | ||
134 | $arrays = $this->get_raid_arrays(); |
144 | $arrays = $this->get_raid_arrays(); |
135 | foreach ($arrays as $array) { |
145 | foreach ($arrays as $array) { |
136 | $level = $this->raidLevel($array); |
146 | $level = $this->raidLevel($array); |
137 | $state = $this->raidState($array); |
147 | $state = $this->raidState($array); |
138 | 148 | ||
- | 149 | if (strpos($state, 'degraded') !== false) $this->setStatus(VNag::STATUS_CRITICAL); |
|
- | 150 | ||
139 | $disk_texts = array(); |
151 | $disk_texts = array(); |
140 | $verbosity = VNag::VERBOSITY_ADDITIONAL_INFORMATION; |
152 | $verbosity = VNag::VERBOSITY_ADDITIONAL_INFORMATION; |
141 | $disks = $this->getDisks($array); |
153 | $disks = $this->getDisks($array); |
142 | foreach ($disks as $disk) { |
154 | foreach ($disks as $disk) { |
143 | $disks_total++; |
155 | $disks_total++; |