monitoring/ido: implement IDO version support

We want to make use of new IDO features without breaking compatibility.
This is a quickfix as otherwise we would currently break everything
below 1.10. Code contains a few TODOs as this needs improvement.
This commit is contained in:
Thomas Gelf 2014-05-20 20:36:39 +00:00
parent 9fbdb65a4b
commit 31fa794440
3 changed files with 44 additions and 1 deletions

View File

@ -35,6 +35,8 @@ use Icinga\Application\Benchmark;
use Icinga\Exception\ProgrammingError;
use Icinga\Filter\Query\Tree;
use Icinga\Module\Monitoring\Filter\UrlViewFilter;
use Icinga\Application\Icinga;
use Icinga\Web\Session;
/**
* Base class for Ido Queries
@ -184,6 +186,18 @@ abstract class IdoQuery extends Query
*/
protected $allowCustomVars = false;
/**
* Current IDO version. This is bullshit and needs to be moved somewhere
* else. As someone decided that we need no Backend-specific connection
* class unfortunately there is no better place right now. And as of the
* 'check_source' patch we need a quick fix immediately. So here you go.
*
* TODO: Fix this.
*
* @var string
*/
protected static $idoVersion;
/**
* Return true when the column is an aggregate column
*
@ -580,4 +594,29 @@ abstract class IdoQuery extends Query
$query = new $class($this->ds, $columns);
return $query;
}
// TODO: Move this away, see note related to $idoVersion var
protected function getIdoVersion()
{
if (self::$idoVersion === null) {
$session = null;
if (Icinga::app()->isWeb()) {
// TODO: Once we have version per connection we should choose a
// namespace based on resource name
$session = Session::getSession()->getNamespace('monitoring/ido');
if (isset($session->version)) {
self::$idoVersion = $session->version;
return self::$idoVersion;
}
}
self::$idoVersion = $this->db->fetchOne(
$this->db->select()->from($this->prefix . 'dbversion', 'version')
);
if ($session !== null) {
$session->version = self::$idoVersion;
$session->write(); // <- WHY? I don't want to care about this!
}
}
return self::$idoVersion;
}
}

View File

@ -305,6 +305,10 @@ class StatusQuery extends IdoQuery
protected function joinBaseTables()
{
if (version_compare($this->getIdoVersion(), '1.10.0', '<')) {
$this->columnMap['hoststatus']['host_check_source'] = '(NULL)';
$this->columnMap['servicestatus']['service_check_source'] = '(NULL)';
}
$this->baseQuery = $this->db->select()->from(
array('ho' => $this->prefix . 'objects'),
array()

View File

@ -103,7 +103,7 @@ class ServiceStatus extends DataView
'service_hard_state',
'service_problem',
'service_perfdata',
'service_check_source',
'service_check_source',
'service_active_checks_enabled',
'service_active_checks_enabled_changed',
'service_passive_checks_enabled',