IcingaConfigHelper: provide helpers for intervals
This commit is contained in:
parent
59317ae9ff
commit
3ee9841bc7
|
@ -151,4 +151,83 @@ class IcingaConfigHelper
|
||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function isValidInterval($interval)
|
||||||
|
{
|
||||||
|
if (ctype_digit($interval)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = preg_split('/\s+/', $interval, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
$value = 0;
|
||||||
|
foreach ($parts as $part) {
|
||||||
|
if (! preg_match('/^(\d+)([dhms]?)$/', $part)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function parseInterval($interval)
|
||||||
|
{
|
||||||
|
if (ctype_digit($interval)) {
|
||||||
|
return (int) $interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = preg_split('/\s+/', $interval, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
$value = 0;
|
||||||
|
foreach ($parts as $part) {
|
||||||
|
if (! preg_match('/^(\d+)([dhms]?)$/', $part, $m)) {
|
||||||
|
throw new ProgrammingError(
|
||||||
|
'"%s" is not a valid time (duration) definition',
|
||||||
|
$interval
|
||||||
|
);
|
||||||
|
}
|
||||||
|
switch ($m[2]) {
|
||||||
|
case 'd':
|
||||||
|
$value += $m[1] * 86400;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
$value += $m[1] * 3600;
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
$value += $m[1] * 60;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$value += (int) $m[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function renderInterval($interval)
|
||||||
|
{
|
||||||
|
// TODO: compat only, do this at munge time. All db fields should be int
|
||||||
|
$seconds = self::parseInterval($interval);
|
||||||
|
if ($seconds === 0) {
|
||||||
|
return '0s';
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = array();
|
||||||
|
$steps = array(
|
||||||
|
'd' => 86400,
|
||||||
|
'h' => 3600,
|
||||||
|
'm' => 60,
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($steps as $unit => $duration) {
|
||||||
|
if ($seconds > $duration) {
|
||||||
|
$parts[] = (int) floor($seconds / $duration) . $unit;
|
||||||
|
$seconds = $seconds % $duration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($seconds > 0) {
|
||||||
|
$parts[] = $seconds . 's';
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode(' ', $parts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -849,41 +849,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
|
||||||
|
|
||||||
protected function renderPropertyAsSeconds($key)
|
protected function renderPropertyAsSeconds($key)
|
||||||
{
|
{
|
||||||
// TODO: db field should be int
|
return c::renderKeyValue($key, c::renderInterval($this->$key));
|
||||||
if (ctype_digit($this->$key)) {
|
|
||||||
$value = (int) $this->$key;
|
|
||||||
} else {
|
|
||||||
// TODO: do this at munge time
|
|
||||||
$parts = preg_split('/\s+/', $this->$key, -1, PREG_SPLIT_NO_EMPTY);
|
|
||||||
$value = 0;
|
|
||||||
foreach ($parts as $part) {
|
|
||||||
if (! preg_match('/^(\d+)([dhms]?)$/', $part, $m)) {
|
|
||||||
throw new ConfigurationError(
|
|
||||||
'"%s" is not a valid time (duration) definition',
|
|
||||||
$this->$key
|
|
||||||
);
|
|
||||||
}
|
|
||||||
switch ($m[2]) {
|
|
||||||
case 'd':
|
|
||||||
$value += $m[1] * 86400;
|
|
||||||
break;
|
|
||||||
case 'h':
|
|
||||||
$value += $m[1] * 3600;
|
|
||||||
break;
|
|
||||||
case 'm':
|
|
||||||
$value += $m[1] * 60;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$value += (int) $m[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($value > 0 && $value % 60 === 0) {
|
|
||||||
$value = (int) ($value / 60) . 'm';
|
|
||||||
}
|
|
||||||
|
|
||||||
return c::renderKeyValue($key, $value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function renderSuffix()
|
protected function renderSuffix()
|
||||||
|
|
Loading…
Reference in New Issue