mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-09-25 18:59:05 +02:00
Monitoring/CustomVarRenderer: Look for the service in all of its types
The service could be directly created, or applied through an apply rule or could be an inherited service or a service applied through service set.
This commit is contained in:
parent
c78979b24a
commit
743997cb57
@ -6,9 +6,12 @@ use Icinga\Application\Config;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\Exception\NotFoundError;
|
||||
use Icinga\Module\Director\Db;
|
||||
use Icinga\Module\Director\Db\AppliedServiceSetLoader;
|
||||
use Icinga\Module\Director\Objects\IcingaHost;
|
||||
use Icinga\Module\Director\Objects\IcingaService;
|
||||
use Icinga\Module\Director\Objects\IcingaTemplateResolver;
|
||||
use Icinga\Module\Director\Web\Form\IcingaObjectFieldLoader;
|
||||
use Icinga\Module\Director\Web\Table\IcingaHostAppliedServicesTable;
|
||||
use Icinga\Module\Monitoring\Hook\CustomVarRendererHook;
|
||||
use Icinga\Module\Monitoring\Object\Host;
|
||||
use Icinga\Module\Monitoring\Object\MonitoredObject;
|
||||
@ -74,10 +77,83 @@ class CustomVarRenderer extends CustomVarRendererHook
|
||||
try {
|
||||
$directorHostObj = IcingaHost::load($host->getName(), $db);
|
||||
if ($service !== null) {
|
||||
$directorServiceObj = IcingaService::load([
|
||||
'host_id' => $directorHostObj->get('id'),
|
||||
'object_name' => $service->getName()
|
||||
], $db);
|
||||
$serviceOrigin = ['direct', 'inherited', 'applied', 'service-set'];
|
||||
$serviceName = $service->getName();
|
||||
$i = 0;
|
||||
$directorServiceObj = null;
|
||||
do {
|
||||
if ($i > 3) {
|
||||
return false;
|
||||
} elseif ($serviceOrigin[$i] === 'direct') {
|
||||
$directorServiceObj = IcingaService::loadOptional([
|
||||
'host_id' => $directorHostObj->get('id'),
|
||||
'object_name' => $serviceName
|
||||
], $db);
|
||||
} elseif ($serviceOrigin[$i] == 'inherited') {
|
||||
$templateResolver = new IcingaTemplateResolver($directorHostObj);
|
||||
|
||||
$parentIds = $templateResolver->listParentIds();
|
||||
|
||||
$query = $db->getDbAdapter()->select()->from('icinga_service')
|
||||
->where('object_name = ?', $serviceName)
|
||||
->where('host_id IN (?)', $parentIds);
|
||||
|
||||
$directorServices = IcingaService::loadAll(
|
||||
$db,
|
||||
$query,
|
||||
'object_name'
|
||||
);
|
||||
|
||||
$directorServiceObj = current($directorServices);
|
||||
} elseif ($serviceOrigin[$i] === 'applied') {
|
||||
$appliedFilterQuery = IcingaHostAppliedServicesTable::load($directorHostObj)->getQuery();
|
||||
|
||||
foreach ($appliedFilterQuery->fetchAll() as $appliedService) {
|
||||
if ($appliedService->name === $serviceName) {
|
||||
$query = $db->getDbAdapter()->select()->from('icinga_service')
|
||||
->where('object_name = ?', $serviceName)
|
||||
->where("object_type = 'apply'")
|
||||
->where('assign_filter = ?', $appliedService->assign_filter);
|
||||
|
||||
$directorAppliedServices = IcingaService::loadAll(
|
||||
$db,
|
||||
$query,
|
||||
'object_name'
|
||||
);
|
||||
|
||||
$directorServiceObj = current($directorAppliedServices);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
} elseif ($serviceOrigin[$i] === 'service-set') {
|
||||
$templateResolver = new IcingaTemplateResolver($directorHostObj);
|
||||
|
||||
$hostServiceSets = $directorHostObj->fetchServiceSets()
|
||||
+ AppliedServiceSetLoader::fetchForHost($directorHostObj);
|
||||
|
||||
$parents = $templateResolver->fetchParents();
|
||||
|
||||
foreach ($parents as $parent) {
|
||||
$hostServiceSets += $parent->fetchServiceSets();
|
||||
$hostServiceSets += AppliedServiceSetLoader::fetchForHost($parent);
|
||||
}
|
||||
|
||||
foreach ($hostServiceSets as $hostServiceSet) {
|
||||
foreach ($hostServiceSet->getServiceObjects() as $setServiceObject) {
|
||||
if ($setServiceObject->getObjectName() === $serviceName) {
|
||||
$directorServiceObj = $setServiceObject;
|
||||
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
$i++;
|
||||
} while (! $directorServiceObj);
|
||||
}
|
||||
} catch (NotFoundError $_) {
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user