Inodes.php 2.10 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(array $records) : string
{
$record = end($records);
if (! isset($record['inodes'])) {
return "<p>No data available...</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(array $records) : int
{
$record = end($records);
if (! isset($record['inodes'])) {
return \App\Status::UNKNOWN;
}
$all_status = [];
foreach ($this->parse($record->inodes) as $disk) {
/* @var $disk InodesDisk */
$status = \App\Status::OK;
if ($disk->usedPercent() > 80) {
$status = \App\Status::WARNING;
} elseif ($disk->usedPercent() > 95) {
$status = \App\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++) {
$fs = $values[1][$i];
if (Disks::shouldSkip($fs)) {
continue;
}
$disk = new InodesDisk();
$disk->filesystem = $values[1][$i];
$disk->inodes = $values[2][$i];
$disk->used = $values[3][$i];
$disk->mounted = $values[6][$i];
$disks[] = $disk;
}
return $disks;
}
}