/usr/share/icingaweb2/modules/monitoring/library/Monitoring/Object/Macro.php is in icingaweb2-module-monitoring 2.1.0-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | <?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Module\Monitoring\Object;
use Exception;
use Icinga\Application\Logger;
/**
* Expand macros in string in the context of MonitoredObjects
*/
class Macro
{
/**
* Known icinga macros
*
* @var array
*/
private static $icingaMacros = array(
'HOSTNAME' => 'host_name',
'HOSTADDRESS' => 'host_address',
'HOSTADDRESS6' => 'host_address6',
'SERVICEDESC' => 'service_description',
'host.name' => 'host_name',
'host.address' => 'host_address',
'host.address6' => 'host_address6',
'service.description' => 'service_description'
);
/**
* Return the given string with macros being resolved
*
* @param string $input The string in which to look for macros
* @param MonitoredObject|stdClass $object The host or service used to resolve macros
*
* @return string The substituted or unchanged string
*/
public static function resolveMacros($input, $object)
{
$matches = array();
if (preg_match_all('@\$([^\$\s]+)\$@', $input, $matches)) {
foreach ($matches[1] as $key => $value) {
$newValue = self::resolveMacro($value, $object);
if ($newValue !== $value) {
$input = str_replace($matches[0][$key], $newValue, $input);
}
}
}
return $input;
}
/**
* Resolve a macro based on the given object
*
* @param string $macro The macro to resolve
* @param MonitoredObject|stdClass $object The object used to resolve the macro
*
* @return string The new value or the macro if it cannot be resolved
*/
public static function resolveMacro($macro, $object)
{
if (isset(self::$icingaMacros[$macro]) && isset($object->{self::$icingaMacros[$macro]})) {
return $object->{self::$icingaMacros[$macro]};
}
try {
$value = $object->$macro;
} catch (Exception $e) {
$value = null;
Logger::debug('Unable to resolve macro "%s". An error occured: %s', $macro, $e);
}
return $value !== null ? $value : $macro;
}
}
|