<?
class loadavg {
private $divisor, $status;
public function __construct($set_divisor = 1){
$this->divisor = $set_divisor;
}
public function __toString(){
return $this->load(1).', '.$this->load(5).', '.$this->load(15)."\n";
}
public function load($time = 1){
//$loadfile = shell_exec('cat /proc/loadavg');
$loadfile = '1.5 1.5 1.5';
$split = preg_split('/ /', $loadfile);
if ($split[1] > (2 * $this->divisor)){
$this->status = 3;
} else if ($split[1] > $this->divisor){
$this->status = 2;
} else {
$this->status = 1;
}
switch($time){
case 1:
return $split[0];
case 5:
return $split[1];
case 15:
return $split[2];
}
}
public function status_name(){
switch ($this->status){
case 3:
return 'critical';
case 2:
return 'warn';
case 1:
return 'ok';
case 0:
return 'error';
}
}
}
$la = new loadavg();
print($la);
print($la->status_name());
Я только что выполнил это и получил вывод:
1.5, 1.5, 1.5
warn
Разве это не то, что ожидается? Если я возьму оператор print ($ la), получится следующее:
error
это потому, что функция load () никогда не вызывается для установки статуса. Если вы хотите правильно распечатать статус, сначала нужно запустить load (). Я предполагаю, что вы захотите добавить параметр времени к status_name и вызвать load перед возвратом, например:
public function status_name($time =1){
$this->load($time);
switch ($this->status){
case 3:
return 'critical';
case 2:
return 'warn';
case 1:
return 'ok';
case 0:
return 'error';
}
}
, который теперь позволит вам сделать это:
$la = new loadavg();
print($la->status_name(5));