Change FilterMatch to FilterEqual class for single object filter on object name.
Correspondingly the DbConnection::renderFilter() (as DbQuery::renderFilter() is deprecated and will be removed, hence no modifications here) is also modified to render accordingly. This correctly selects the host, service or contact in case the object name contains wild card characters like "\*".
This commit is contained in:
parent
3edb5c3c94
commit
8898ed85ab
|
@ -6,6 +6,8 @@ namespace Icinga\Data\Db;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use DateTimeZone;
|
use DateTimeZone;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Icinga\Data\Filter\FilterMatch;
|
||||||
|
use Icinga\Data\Filter\FilterMatchNot;
|
||||||
use Icinga\Data\Inspectable;
|
use Icinga\Data\Inspectable;
|
||||||
use Icinga\Data\Inspection;
|
use Icinga\Data\Inspection;
|
||||||
use PDO;
|
use PDO;
|
||||||
|
@ -552,13 +554,13 @@ class DbConnection implements Selectable, Extensible, Updatable, Reducible, Insp
|
||||||
throw new ProgrammingError(
|
throw new ProgrammingError(
|
||||||
'Unable to render array expressions with operators other than equal or not equal'
|
'Unable to render array expressions with operators other than equal or not equal'
|
||||||
);
|
);
|
||||||
} elseif ($sign === '=' && strpos($value, '*') !== false) {
|
} elseif ($filter instanceof FilterMatch && strpos($value, '*') !== false) {
|
||||||
if ($value === '*') {
|
if ($value === '*') {
|
||||||
return $column . ' IS NOT NULL';
|
return $column . ' IS NOT NULL';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $column . ' LIKE ' . $this->dbAdapter->quote(preg_replace('~\*~', '%', $value));
|
return $column . ' LIKE ' . $this->dbAdapter->quote(preg_replace('~\*~', '%', $value));
|
||||||
} elseif ($sign === '!=' && strpos($value, '*') !== false) {
|
} elseif ($filter instanceof FilterMatchNot && strpos($value, '*') !== false) {
|
||||||
if ($value === '*') {
|
if ($value === '*') {
|
||||||
return $column . ' IS NULL';
|
return $column . ' IS NULL';
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
namespace Icinga\Module\Monitoring\Controllers;
|
namespace Icinga\Module\Monitoring\Controllers;
|
||||||
|
|
||||||
|
use Icinga\Data\Filter\FilterEqual;
|
||||||
use Icinga\Module\Monitoring\Backend;
|
use Icinga\Module\Monitoring\Backend;
|
||||||
use Icinga\Module\Monitoring\Controller;
|
use Icinga\Module\Monitoring\Controller;
|
||||||
use Icinga\Security\SecurityException;
|
use Icinga\Security\SecurityException;
|
||||||
|
@ -63,7 +64,7 @@ class ShowController extends Controller
|
||||||
'contact_notify_host_downtime',
|
'contact_notify_host_downtime',
|
||||||
));
|
));
|
||||||
$this->applyRestriction('monitoring/filter/objects', $query);
|
$this->applyRestriction('monitoring/filter/objects', $query);
|
||||||
$query->where('contact_name', $contactName);
|
$query->whereEx(new FilterEqual('contact_name', '=', $contactName));
|
||||||
$contact = $query->getQuery()->fetchRow();
|
$contact = $query->getQuery()->fetchRow();
|
||||||
|
|
||||||
if ($contact) {
|
if ($contact) {
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
|
|
||||||
namespace Icinga\Module\Monitoring\DataView;
|
namespace Icinga\Module\Monitoring\DataView;
|
||||||
|
|
||||||
|
use Icinga\Data\Filter\FilterExpression;
|
||||||
use IteratorAggregate;
|
use IteratorAggregate;
|
||||||
use Icinga\Application\Hook;
|
use Icinga\Application\Hook;
|
||||||
use Icinga\Data\ConnectionInterface;
|
use Icinga\Data\ConnectionInterface;
|
||||||
use Icinga\Data\Filter\Filter;
|
use Icinga\Data\Filter\Filter;
|
||||||
use Icinga\Data\Filter\FilterMatch;
|
|
||||||
use Icinga\Data\FilterColumns;
|
use Icinga\Data\FilterColumns;
|
||||||
use Icinga\Data\PivotTable;
|
use Icinga\Data\PivotTable;
|
||||||
use Icinga\Data\QueryInterface;
|
use Icinga\Data\QueryInterface;
|
||||||
|
@ -456,7 +456,7 @@ abstract class DataView implements QueryInterface, SortRules, FilterColumns, Ite
|
||||||
*/
|
*/
|
||||||
public function validateFilterColumns(Filter $filter)
|
public function validateFilterColumns(Filter $filter)
|
||||||
{
|
{
|
||||||
if ($filter instanceof FilterMatch) {
|
if ($filter instanceof FilterExpression) {
|
||||||
if (! $this->isValidFilterTarget($filter->getColumn())) {
|
if (! $this->isValidFilterTarget($filter->getColumn())) {
|
||||||
throw new QueryException(
|
throw new QueryException(
|
||||||
mt('monitoring', 'The filter column "%s" is not allowed here.'),
|
mt('monitoring', 'The filter column "%s" is not allowed here.'),
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
namespace Icinga\Module\Monitoring\Object;
|
namespace Icinga\Module\Monitoring\Object;
|
||||||
|
|
||||||
|
use Icinga\Data\Filter\FilterEqual;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use Icinga\Module\Monitoring\Backend\MonitoringBackend;
|
use Icinga\Module\Monitoring\Backend\MonitoringBackend;
|
||||||
|
|
||||||
|
@ -142,7 +143,7 @@ class Host extends MonitoredObject
|
||||||
'instance_name'
|
'instance_name'
|
||||||
);
|
);
|
||||||
return $this->backend->select()->from('hoststatus', $columns)
|
return $this->backend->select()->from('hoststatus', $columns)
|
||||||
->where('host_name', $this->host);
|
->whereEx(new FilterEqual('host_name', '=', $this->host));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
namespace Icinga\Module\Monitoring\Object;
|
namespace Icinga\Module\Monitoring\Object;
|
||||||
|
|
||||||
|
use Icinga\Data\Filter\FilterEqual;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use Icinga\Module\Monitoring\Backend\MonitoringBackend;
|
use Icinga\Module\Monitoring\Backend\MonitoringBackend;
|
||||||
|
|
||||||
|
@ -171,8 +172,8 @@ class Service extends MonitoredObject
|
||||||
'service_state',
|
'service_state',
|
||||||
'service_state_type'
|
'service_state_type'
|
||||||
))
|
))
|
||||||
->where('host_name', $this->host->getName())
|
->whereEx(new FilterEqual('host_name', '=', $this->host->getName()))
|
||||||
->where('service_description', $this->service);
|
->whereEx(new FilterEqual('service_description', '=', $this->service));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue