Inodes.php 2.13 KiB
<?php
namespace App\Sensor;
/**
* Description of Update
*
* @author tibo
*/
class Inodes extends \App\AbstractSensor {
const REGEXP = "/\\n([A-z\/0-9\\-\\.]+)\s*([0-9]+)\s*([0-9]+)\s*([0-9]+)\s*([0-9]+)%\s*([A-z\/0-9]+)/";
public function report() {
$record = $this->getLastRecord("inodes");
if ($record == null) {
return "<p>No data availabe...</p>";
}
$disks = $this->parse($record->inodes);
$return = "<table class='table table-sm'>";
$return .= "<tr><th></th><th></th><th>Usage</th></tr>";
foreach ($disks as $disk) {
$return .= "<tr><td>" . $disk->filesystem . "</td><td>" . $disk->mounted . "</td><td>" . $disk->usedPercent() . "%</td></tr>";
}
$return .= "</table>";
return $return;
}
public function status() {
$record = $this->getLastRecord("inodes");
if ($record == null) {
return self::STATUS_UNKNOWN;
}
$all_status = [];
foreach ($this->parse($record->inodes) as $disk) {
/* @var $disk DiskInodes */
$status = self::STATUS_OK;
if ($disk->usedPercent() > 80) {
$status = self::STATUS_WARNING;
} elseif ($disk->usedPercent() > 95) {
$status = self::STATUS_ERROR;
}
$all_status[] = $status;
}
return max($all_status);
}
public function parse($string) {
$values = array();
preg_match_all(self::REGEXP, $string, $values);
$disks = array();
$count = count($values[1]);
for ($i = 0; $i < $count; $i++) {
$disk = new DiskInodes();
$disk->filesystem = $values[1][$i];
$disk->inodes = $values[2][$i];
$disk->used = $values[3][$i];
$disk->mounted = $values[6][$i];
$disks[] = $disk;
}
return $disks;
}
}
class DiskInodes {
public $filesystem = "";
public $inodes = 0;
public $used = 0;
public $mounted = "";
public function usedPercent() {
return round(100.0 * $this->used / $this->inodes);
}
}