summaryrefslogtreecommitdiffstats
path: root/library/Businessprocess/Monitoring
diff options
context:
space:
mode:
Diffstat (limited to 'library/Businessprocess/Monitoring')
-rw-r--r--library/Businessprocess/Monitoring/Backend/Ido/Query/CustomVarJoinTemplateOverride.php84
-rw-r--r--library/Businessprocess/Monitoring/Backend/Ido/Query/HostStatusQuery.php8
-rw-r--r--library/Businessprocess/Monitoring/Backend/Ido/Query/ServiceStatusQuery.php8
-rw-r--r--library/Businessprocess/Monitoring/DataView/HostStatus.php16
-rw-r--r--library/Businessprocess/Monitoring/DataView/ServiceStatus.php16
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);
+ }
+}