diff options
Diffstat (limited to 'library/Businessprocess/Monitoring')
5 files changed, 132 insertions, 0 deletions
diff --git a/library/Businessprocess/Monitoring/Backend/Ido/Query/CustomVarJoinTemplateOverride.php b/library/Businessprocess/Monitoring/Backend/Ido/Query/CustomVarJoinTemplateOverride.php new file mode 100644 index 0000000..385ca59 --- /dev/null +++ b/library/Businessprocess/Monitoring/Backend/Ido/Query/CustomVarJoinTemplateOverride.php @@ -0,0 +1,84 @@ +<?php + +namespace Icinga\Module\Businessprocess\Monitoring\Backend\Ido\Query; + +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicecommenthistoryQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicecommentQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicedowntimeQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicedowntimestarthistoryQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServiceflappingstarthistoryQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicegroupQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicenotificationQuery; +use Icinga\Module\Monitoring\Backend\Ido\Query\ServicestatehistoryQuery; +use Zend_Db_Select; + +trait CustomVarJoinTemplateOverride +{ + private $customVarsJoinTemplate = '%1$s = %2$s.object_id AND %2$s.varname LIKE %3$s'; + + /** + * This is a 1:1 copy of {@see IdoQuery::joinCustomvar()} to be able to + * adjust {@see IdoQuery::$customVarsJoinTemplate} as it's private + */ + protected function joinCustomvar($customvar) + { + // TODO: This is not generic enough yet + list($type, $name) = $this->customvarNameToTypeName($customvar); + $alias = ($type === 'host' ? 'hcv_' : 'scv_') . preg_replace('~[^a-zA-Z0-9_]~', '_', $name); + + // We're replacing any problematic char with an underscore, which will lead to duplicates, this avoids them + $from = $this->select->getPart(Zend_Db_Select::FROM); + for ($i = 2; array_key_exists($alias, $from); $i++) { + $alias = $alias . '_' . $i; + } + + $this->customVars[strtolower($customvar)] = $alias; + + if ($type === 'host') { + if ($this instanceof ServicecommentQuery + || $this instanceof ServicedowntimeQuery + || $this instanceof ServicecommenthistoryQuery + || $this instanceof ServicedowntimestarthistoryQuery + || $this instanceof ServiceflappingstarthistoryQuery + || $this instanceof ServicegroupQuery + || $this instanceof ServicenotificationQuery + || $this instanceof ServicestatehistoryQuery + || $this instanceof \Icinga\Module\Monitoring\Backend\Ido\Query\ServicestatusQuery + ) { + $this->requireVirtualTable('services'); + $leftcol = 's.host_object_id'; + } else { + $leftcol = 'ho.object_id'; + if (! $this->hasJoinedTable('ho')) { + $this->requireVirtualTable('hosts'); + } + } + } else { // $type === 'service' + $leftcol = 'so.object_id'; + if (! $this->hasJoinedTable('so')) { + $this->requireVirtualTable('services'); + } + } + + $mapped = $this->getMappedField($leftcol); + if ($mapped !== null) { + $this->requireColumn($leftcol); + $leftcol = $mapped; + } + + $joinOn = sprintf( + $this->customVarsJoinTemplate, + $leftcol, + $alias, + $this->db->quote($name) + ); + + $this->select->joinLeft( + array($alias => $this->prefix . 'customvariablestatus'), + $joinOn, + array() + ); + + return $this; + } +} diff --git a/library/Businessprocess/Monitoring/Backend/Ido/Query/HostStatusQuery.php b/library/Businessprocess/Monitoring/Backend/Ido/Query/HostStatusQuery.php new file mode 100644 index 0000000..e6ea238 --- /dev/null +++ b/library/Businessprocess/Monitoring/Backend/Ido/Query/HostStatusQuery.php @@ -0,0 +1,8 @@ +<?php + +namespace Icinga\Module\Businessprocess\Monitoring\Backend\Ido\Query; + +class HostStatusQuery extends \Icinga\Module\Monitoring\Backend\Ido\Query\HoststatusQuery +{ + use CustomVarJoinTemplateOverride; +} diff --git a/library/Businessprocess/Monitoring/Backend/Ido/Query/ServiceStatusQuery.php b/library/Businessprocess/Monitoring/Backend/Ido/Query/ServiceStatusQuery.php new file mode 100644 index 0000000..618f3a1 --- /dev/null +++ b/library/Businessprocess/Monitoring/Backend/Ido/Query/ServiceStatusQuery.php @@ -0,0 +1,8 @@ +<?php + +namespace Icinga\Module\Businessprocess\Monitoring\Backend\Ido\Query; + +class ServiceStatusQuery extends \Icinga\Module\Monitoring\Backend\Ido\Query\ServicestatusQuery +{ + use CustomVarJoinTemplateOverride; +} diff --git a/library/Businessprocess/Monitoring/DataView/HostStatus.php b/library/Businessprocess/Monitoring/DataView/HostStatus.php new file mode 100644 index 0000000..edc1814 --- /dev/null +++ b/library/Businessprocess/Monitoring/DataView/HostStatus.php @@ -0,0 +1,16 @@ +<?php + +namespace Icinga\Module\Businessprocess\Monitoring\DataView; + +use Icinga\Data\ConnectionInterface; +use Icinga\Module\Businessprocess\Monitoring\Backend\Ido\Query\HostStatusQuery; + +class HostStatus extends \Icinga\Module\Monitoring\DataView\Hoststatus +{ + public function __construct(ConnectionInterface $connection, array $columns = null) + { + parent::__construct($connection, $columns); + + $this->query = new HostStatusQuery($connection->getResource(), $columns); + } +} diff --git a/library/Businessprocess/Monitoring/DataView/ServiceStatus.php b/library/Businessprocess/Monitoring/DataView/ServiceStatus.php new file mode 100644 index 0000000..f3a9c3c --- /dev/null +++ b/library/Businessprocess/Monitoring/DataView/ServiceStatus.php @@ -0,0 +1,16 @@ +<?php + +namespace Icinga\Module\Businessprocess\Monitoring\DataView; + +use Icinga\Data\ConnectionInterface; +use Icinga\Module\Businessprocess\Monitoring\Backend\Ido\Query\ServiceStatusQuery; + +class ServiceStatus extends \Icinga\Module\Monitoring\DataView\Servicestatus +{ + public function __construct(ConnectionInterface $connection, array $columns = null) + { + parent::__construct($connection, $columns); + + $this->query = new ServiceStatusQuery($connection->getResource(), $columns); + } +} |