refs #4868
This commit is contained in:
Jannis Moßhammer 2013-10-17 21:40:02 +02:00
parent 7a7c10e8df
commit 6095a71a8d
17 changed files with 70 additions and 85 deletions

View File

@ -15,7 +15,7 @@ abstract class BaseQuery implements Filterable
/** /**
* Sort ascending * Sort ascending
*/ */
const SORT_ASC = 1; const SORT_ASC = 1;
/** /**
* Sort descending * Sort descending
@ -97,7 +97,7 @@ abstract class BaseQuery implements Filterable
* The Query will return the default attribute the attributes parameter is omitted * The Query will return the default attribute the attributes parameter is omitted
* *
* @param String $target The target of this query (tablename, objectname, depends on the concrete implementation) * @param String $target The target of this query (tablename, objectname, depends on the concrete implementation)
* @param array $columns An optional array of columns to select, if none are given the default * @param array $columns An optional array of columns to select, if none are given the default
* columnset is returned * columnset is returned
* *
* @return self Fluent interface * @return self Fluent interface
@ -119,7 +119,7 @@ abstract class BaseQuery implements Filterable
* backend-specific query implementation. * backend-specific query implementation.
* *
* @param string $expression Implementation specific search expression * @param string $expression Implementation specific search expression
* @param mixed $parameters Implementation specific search value to use for query placeholders * @param mixed $parameters Implementation specific search value to use for query placeholders
* *
* @return self Fluent Interface * @return self Fluent Interface
* @see BaseQuery::andWhere() This is an alias to andWhere() * @see BaseQuery::andWhere() This is an alias to andWhere()
@ -136,21 +136,20 @@ abstract class BaseQuery implements Filterable
* backend-specific query implementation. * backend-specific query implementation.
* *
* @param string $expression Implementation specific search expression * @param string $expression Implementation specific search expression
* @param mixed $parameters Implementation specific search value to use for query placeholders * @param mixed $parameters Implementation specific search value to use for query placeholders
* @return self Fluent interface * @return self Fluent interface
*/ */
public function andWhere($expression, $parameters = null) public function andWhere($expression, $parameters = null)
{ {
$node = $this->parseFilterExpression($expression, $parameters); $node = $this->parseFilterExpression($expression, $parameters);
if ($node === null) { if ($node === null) {
Logger::debug('Ignoring invalid filter expression: %s (params: %s)', $expression, $parameters); Logger::debug('Ignoring invalid filter expression: %s (params: %s)', $expression, $parameters);
return $this; return $this;
} }
$this->filter->insert(Node::createAndNode()); $this->filter->insert(Node::createAndNode());
$this->filter->insert($node); $this->filter->insert($node);
return $this; return $this;
} }
/** /**
* Add an lower priority filter expression to be applied on this query * Add an lower priority filter expression to be applied on this query
@ -159,8 +158,7 @@ abstract class BaseQuery implements Filterable
* backend-specific query implementation. * backend-specific query implementation.
* *
* @param string $expression Implementation specific search expression * @param string $expression Implementation specific search expression
* @param mixed $parameters Implementation specific search value to use for query placeholders * @param mixed $parameters Implementation specific search value to use for query placeholders
* @return self Fluent interface * @return self Fluent interface
*/ */
public function orWhere($expression, $parameters = null) public function orWhere($expression, $parameters = null)
@ -256,7 +254,7 @@ abstract class BaseQuery implements Filterable
* </code> * </code>
* *
* @param string $columnOrAlias Column, may contain direction separated by space * @param string $columnOrAlias Column, may contain direction separated by space
* @param int $dir Sort direction * @param int $dir Sort direction
* *
* @return BaseQuery * @return BaseQuery
*/ */
@ -299,7 +297,7 @@ abstract class BaseQuery implements Filterable
*/ */
public function limit($count = null, $offset = null) public function limit($count = null, $offset = null)
{ {
$this->limitCount = $count !== null ? intval($count) : null; $this->limitCount = $count !== null ? intval($count) : null;
$this->limitOffset = intval($offset); $this->limitOffset = intval($offset);
return $this; return $this;

View File

@ -96,6 +96,4 @@ class Query extends BaseQuery
{ {
return null; return null;
} }
} }

View File

@ -11,5 +11,4 @@ interface DatasourceInterface
* @return BaseQuery * @return BaseQuery
*/ */
public function select(); public function select();
} }

View File

@ -111,7 +111,7 @@ class Query extends BaseQuery
/** /**
* Create the Zend_Db select query for this query * Create the Zend_Db select query for this query
*/ */
private function createSelectQuery() private function createSelectQuery()
{ {
$this->selectQuery = clone($this->baseQuery); $this->selectQuery = clone($this->baseQuery);
$this->selectQuery->columns($this->getColumns()); $this->selectQuery->columns($this->getColumns());
@ -170,7 +170,7 @@ class Query extends BaseQuery
if ($this->useSubqueryCount) { if ($this->useSubqueryCount) {
$this->countQuery = $this->createCountAsSubquery(); $this->countQuery = $this->createCountAsSubquery();
} else { } else {
$this->countQuery =$this->createCustomCountQuery(); $this->countQuery = $this->createCustomCountQuery();
} }
} }
@ -184,6 +184,7 @@ class Query extends BaseQuery
{ {
} }
/** /**
* Create the Zend_Db select and count query objects for this instance * Create the Zend_Db select and count query objects for this instance
*/ */
@ -268,10 +269,10 @@ class Query extends BaseQuery
public function dump() public function dump()
{ {
return "QUERY\n=====\n" return "QUERY\n=====\n"
. $this->getSelectQuery() . $this->getSelectQuery()
. "\n\nCOUNT\n=====\n" . "\n\nCOUNT\n=====\n"
. $this->getCountQuery() . $this->getCountQuery()
. "\n\n"; . "\n\n";
} }
/** /**
@ -310,7 +311,7 @@ class Query extends BaseQuery
} }
} }
return null; return null;
} }
public function applyFilter() public function applyFilter()
{ {
@ -318,6 +319,4 @@ class Query extends BaseQuery
$parser->treeToSql($this->getFilter(), $this->baseQuery); $parser->treeToSql($this->getFilter(), $this->baseQuery);
$this->clearFilter(); $this->clearFilter();
} }
} }

View File

@ -130,7 +130,8 @@ class TreeToSqlParser
if ($this->query->isAggregateColumn($node->left)) { if ($this->query->isAggregateColumn($node->left)) {
$this->type = 'HAVING'; $this->type = 'HAVING';
} }
$queryString .= ' ' . (is_integer($node->right) ? $node->operator : $this->getSqlOperator($node->operator)) . ' '; $queryString .= ' ' . (is_integer($node->right) ?
$node->operator : $this->getSqlOperator($node->operator)) . ' ';
$queryString .= $this->getParameterValue($node); $queryString .= $this->getParameterValue($node);
return $queryString; return $queryString;
} }
@ -152,11 +153,8 @@ class TreeToSqlParser
if ($this->query->isTimestamp($node->left)) { if ($this->query->isTimestamp($node->left)) {
$node->context = Node::CONTEXT_TIMESTRING; $node->context = Node::CONTEXT_TIMESTRING;
} }
switch($node->context) { if ($node->context === Node::CONTEXT_TIMESTRING) {
case Node::CONTEXT_TIMESTRING: $value = strtotime($value);
$value = strtotime($value);
default:
break;
} }
return $this->query->getDatasource()->getConnection()->quote($value); return $this->query->getDatasource()->getConnection()->quote($value);
} }

View File

@ -40,4 +40,4 @@ use Icinga\Filter\Query\Tree;
interface Registry interface Registry
{ {
public static function getUrlForTarget($domain, Tree $filter); public static function getUrlForTarget($domain, Tree $filter);
} }

View File

@ -62,6 +62,4 @@ class Request extends Zend_Controller_Request_Http
{ {
return $this->user; return $this->user;
} }
} }

View File

@ -34,7 +34,6 @@ use Zend_View_Abstract;
use Icinga\Web\Form\Decorator\ConditionalHidden; use Icinga\Web\Form\Decorator\ConditionalHidden;
use Zend_Form_Element_Submit; use Zend_Form_Element_Submit;
/** /**
* Sortbox widget * Sortbox widget
* *

View File

@ -238,7 +238,8 @@ class Tab implements Widget
$tagParams .= ' ' . $key . '="' . $value . '"'; $tagParams .= ' ' . $key . '="' . $value . '"';
} }
} }
$tab = '<a' . $tagParams .' href="' . $this->url->getAbsoluteUrl() . '" data-icinga-target="self">' . $caption . '</a>'; $tab = '<a' . $tagParams .' href="' . $this->url->getAbsoluteUrl()
. '" data-icinga-target="self">' . $caption . '</a>';
} else { } else {
$tab = $caption; $tab = $caption;
} }

View File

@ -19,4 +19,3 @@ class CommenthistoryQuery extends IdoQuery
) )
); );
} }

View File

@ -80,8 +80,7 @@ class Controller extends ActionController
exit; exit;
} }
if ($this->_getParam('format') === 'json' if ($this->_getParam('format') === 'json'
|| $this->_request->getHeader('Accept') === 'application/json') || $this->_request->getHeader('Accept') === 'application/json') {
{
header('Content-type: application/json'); header('Content-type: application/json');
echo json_encode($query->fetchAll()); echo json_encode($query->fetchAll());
exit; exit;

View File

@ -71,5 +71,4 @@ class Hostgroup extends DataView
) )
); );
} }
} }

View File

@ -65,6 +65,4 @@ class Servicegroup extends DataView
) )
); );
} }
}
}

View File

@ -79,9 +79,9 @@ class Registry implements FilterRegistry
$type = new TimeRangeSpecifier(); $type = new TimeRangeSpecifier();
$type->setOperator( $type->setOperator(
array( array(
'Older Than' => Node::OPERATOR_LESS_EQ, 'Older Than' => Node::OPERATOR_LESS_EQ,
'Is Older Than' => Node::OPERATOR_LESS_EQ, 'Is Older Than' => Node::OPERATOR_LESS_EQ,
'Newer Than' => Node::OPERATOR_GREATER_EQ, 'Newer Than' => Node::OPERATOR_GREATER_EQ,
'Is Newer Than' => Node::OPERATOR_GREATER_EQ, 'Is Newer Than' => Node::OPERATOR_GREATER_EQ,
) )
)->setForcePastValue(true); )->setForcePastValue(true);
@ -101,21 +101,23 @@ class Registry implements FilterRegistry
FilterAttribute::create(new TextFilter()) FilterAttribute::create(new TextFilter())
->setHandledAttributes('Name', 'Hostname') ->setHandledAttributes('Name', 'Hostname')
->setField('host_name') ->setField('host_name')
)->registerAttribute(
FilterAttribute::create(StatusFilter::createForHost())
->setField('host_state')
)->registerAttribute( )->registerAttribute(
FilterAttribute::create(StatusFilter::createForHost()) FilterAttribute::create(
->setField('host_state') new BooleanFilter(
)->registerAttribute( array(
FilterAttribute::create(new BooleanFilter( 'host_is_flapping' => 'Flapping',
array( 'host_problem' => 'In Problem State',
'host_is_flapping' => 'Flapping', 'host_notifications_enabled' => 'Sending Notifications',
'host_problem' => 'In Problem State', 'host_active_checks_enabled' => 'Active',
'host_notifications_enabled' => 'Sending Notifications', 'host_passive_checks_enabled' => 'Accepting Passive Checks',
'host_active_checks_enabled' => 'Active', 'host_handled' => 'Handled',
'host_passive_checks_enabled' => 'Accepting Passive Checks', 'host_in_downtime' => 'In Downtime',
'host_handled' => 'Handled', )
'host_in_downtime' => 'In Downtime',
) )
)) )
)->registerAttribute( )->registerAttribute(
FilterAttribute::create(self::getLastCheckFilterType()) FilterAttribute::create(self::getLastCheckFilterType())
->setHandledAttributes('Last Check', 'Check') ->setHandledAttributes('Last Check', 'Check')
@ -141,26 +143,28 @@ class Registry implements FilterRegistry
FilterAttribute::create(new TextFilter()) FilterAttribute::create(new TextFilter())
->setHandledAttributes('Name', 'Servicename') ->setHandledAttributes('Name', 'Servicename')
->setField('service_name') ->setField('service_name')
)->registerAttribute( )->registerAttribute(
FilterAttribute::create(StatusFilter::createForService()) FilterAttribute::create(StatusFilter::createForService())
->setField('service_state') ->setField('service_state')
)->registerAttribute( )->registerAttribute(
FilterAttribute::create(StatusFilter::createForHost()) FilterAttribute::create(StatusFilter::createForHost())
->setHandledAttributes('Host') ->setHandledAttributes('Host')
->setField('host_state') ->setField('host_state')
)->registerAttribute( )->registerAttribute(
FilterAttribute::create(new BooleanFilter( FilterAttribute::create(
new BooleanFilter(
array( array(
'service_is_flapping' => 'Flapping', 'service_is_flapping' => 'Flapping',
'service_problem' => 'In Problem State', 'service_problem' => 'In Problem State',
'service_notifications_enabled' => 'Sending Notifications', 'service_notifications_enabled' => 'Sending Notifications',
'service_active_checks_enabled' => 'Active', 'service_active_checks_enabled' => 'Active',
'service_passive_checks_enabled' => 'Accepting Passive Checks', 'service_passive_checks_enabled' => 'Accepting Passive Checks',
'service_handled' => 'Handled', 'service_handled' => 'Handled',
'service_in_downtime' => 'In Downtime', 'service_in_downtime' => 'In Downtime',
'host_in_downtime' => 'In Host Downtime' 'host_in_downtime' => 'In Host Downtime'
) )
)) )
)
)->registerAttribute( )->registerAttribute(
FilterAttribute::create(self::getLastCheckFilterType()) FilterAttribute::create(self::getLastCheckFilterType())
->setHandledAttributes('Last Check', 'Check') ->setHandledAttributes('Last Check', 'Check')
@ -201,7 +205,7 @@ class Registry implements FilterRegistry
} }
$urlParser = new UrlViewFilter($view); $urlParser = new UrlViewFilter($view);
$lastQuery = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY); $lastQuery = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
$lastPath = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH); $lastPath = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH);
$lastFilter = $urlParser->parseUrl($lastQuery); $lastFilter = $urlParser->parseUrl($lastQuery);
$lastParameters = array(); $lastParameters = array();
@ -226,5 +230,4 @@ class Registry implements FilterRegistry
$urlString .= $urlParser->fromTree($filter); $urlString .= $urlParser->fromTree($filter);
return '/' . $urlString; return '/' . $urlString;
} }
} }

View File

@ -26,10 +26,8 @@
*/ */
// {{{ICINGA_LICENSE_HEADER}}} // {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Module\Monitoring\Filter; namespace Icinga\Module\Monitoring\Filter;
use Icinga\Filter\Filterable; use Icinga\Filter\Filterable;
use Icinga\Filter\Query\Tree; use Icinga\Filter\Query\Tree;
use Icinga\Filter\Query\Node; use Icinga\Filter\Query\Node;
@ -117,7 +115,7 @@ class UrlViewFilter
public function fromRequest($request) public function fromRequest($request)
{ {
if($request->getParam('query')) { if ($request->getParam('query')) {
return $this->parseUrl(urldecode($request->getParam('query'))); return $this->parseUrl(urldecode($request->getParam('query')));
} else { } else {
return $this->parseUrl(parse_url($request->getBaseUrl(), PHP_URL_QUERY)); return $this->parseUrl(parse_url($request->getBaseUrl(), PHP_URL_QUERY));

View File

@ -181,7 +181,7 @@ abstract class AbstractObject
{ {
if ($request->has('service') && $request->has('host')) { if ($request->has('service') && $request->has('host')) {
return new Service($request); return new Service($request);
} else if ($request->has('host')) { } elseif ($request->has('host')) {
return new Host($request); return new Host($request);
} }
} }

View File

@ -27,5 +27,4 @@ class Host extends AbstractObject
$this->view = HostStatus::fromRequest($this->getRequest()); $this->view = HostStatus::fromRequest($this->getRequest());
return $this->view->getQuery()->fetchRow(); return $this->view->getQuery()->fetchRow();
} }
} }