monitoring/timeline: should benefit from new filter
Different changes have been applied: * Allow integer unix timestamps as parameters for timestamp columns * Remove alias-rewriting from Url class * Remove all traces of raw_timestamp * Use new filters
This commit is contained in:
parent
78193137f0
commit
b3cdeee35d
|
@ -165,6 +165,25 @@ class DbQuery extends SimpleQuery
|
|||
return preg_replace('/\*/', '%', $value);
|
||||
}
|
||||
|
||||
protected function valueToTimestamp($value)
|
||||
{
|
||||
// We consider integers as valid timestamps. Does not work for URL params
|
||||
if (ctype_digit($value)) {
|
||||
return $value;
|
||||
}
|
||||
$value = strtotime($value);
|
||||
if (! $value) {
|
||||
/*
|
||||
NOTE: It's too late to throw exceptions, we might finish in __toString
|
||||
throw new \Exception(sprintf(
|
||||
'"%s" is not a valid time expression',
|
||||
$value
|
||||
));
|
||||
*/
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
protected function timestampForSql($value)
|
||||
{
|
||||
// TODO: do this db-aware
|
||||
|
@ -174,7 +193,7 @@ class DbQuery extends SimpleQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($this->isTimestamp($col)) {
|
||||
$expression = strtotime($expression);
|
||||
$expression = $this->valueToTimestamp($expression);
|
||||
}
|
||||
if (is_array($expression) && $sign === '=') {
|
||||
// TODO: Should we support this? Doesn't work for blub*
|
||||
|
|
|
@ -51,13 +51,6 @@ class Url
|
|||
*/
|
||||
protected $params;
|
||||
|
||||
/**
|
||||
* An array to map aliases to valid parameters
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aliases = array();
|
||||
|
||||
/**
|
||||
* The site anchor after the '#'
|
||||
*
|
||||
|
@ -215,33 +208,6 @@ class Url
|
|||
return preg_replace('/#.*$/', '', $url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the array to be used to map aliases to valid parameters
|
||||
* TODO: Kill this
|
||||
*
|
||||
* @param array $aliases The array to be used (alias => param)
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setAliases(array $aliases)
|
||||
{
|
||||
$this->aliases = $aliases;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the parameter for the given alias
|
||||
* TODO: Kill this
|
||||
*
|
||||
* @param string $alias The alias to translate
|
||||
*
|
||||
* @return string The parameter name
|
||||
*/
|
||||
public function translateAlias($alias)
|
||||
{
|
||||
return array_key_exists($alias, $this->aliases) ? $this->aliases[$alias] : $alias;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite the baseUrl
|
||||
*
|
||||
|
|
|
@ -9,13 +9,13 @@ use Icinga\Web\Url;
|
|||
use Icinga\Util\Format;
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Util\DateTimeFactory;
|
||||
use Icinga\Web\Controller\ActionController;
|
||||
use Icinga\Module\Monitoring\Controller;
|
||||
use Icinga\Module\Monitoring\Timeline\TimeLine;
|
||||
use Icinga\Module\Monitoring\Timeline\TimeRange;
|
||||
use Icinga\Module\Monitoring\Web\Widget\TimelineIntervalBox;
|
||||
use Icinga\Module\Monitoring\DataView\EventHistory as EventHistoryView;
|
||||
|
||||
class Monitoring_TimelineController extends ActionController
|
||||
class Monitoring_TimelineController extends Controller
|
||||
{
|
||||
public function indexAction()
|
||||
{
|
||||
|
@ -23,23 +23,13 @@ class Monitoring_TimelineController extends ActionController
|
|||
$this->setupIntervalBox();
|
||||
list($displayRange, $forecastRange) = $this->buildTimeRanges();
|
||||
|
||||
$detailUrl = Url::fromPath(
|
||||
'/monitoring/list/eventhistory',
|
||||
Url::fromRequest()->getParams()
|
||||
)->setAliases(
|
||||
array(
|
||||
'name' => 'type',
|
||||
'end' => 'raw_timestamp>',
|
||||
'start' => 'raw_timestamp<'
|
||||
)
|
||||
)->remove(array('start', 'end', 'extend', 'interval'));
|
||||
$detailUrl = Url::fromPath('monitoring/list/eventhistory');
|
||||
|
||||
$timeline = new TimeLine(
|
||||
EventHistoryView::fromRequest(
|
||||
$this->getRequest(),
|
||||
$this->backend->select()->from('eventHistory',
|
||||
array(
|
||||
'name' => 'type',
|
||||
'time' => 'raw_timestamp'
|
||||
'time' => 'timestamp'
|
||||
)
|
||||
),
|
||||
array(
|
||||
|
|
|
@ -32,8 +32,8 @@ $firstRow = !$beingExtended;
|
|||
<a href="<?= $this->href(
|
||||
'/monitoring/list/eventhistory',
|
||||
array(
|
||||
'raw_timestamp<' => $timeInfo[0]->start->getTimestamp(),
|
||||
'raw_timestamp>' => $timeInfo[0]->end->getTimestamp()
|
||||
'timestamp<' => $timeInfo[0]->start->getTimestamp(),
|
||||
'timestamp>' => $timeInfo[0]->end->getTimestamp()
|
||||
)
|
||||
); ?>">
|
||||
<?= $timeInfo[0]->end->format($intervalFormat); ?>
|
||||
|
@ -69,9 +69,9 @@ $extrapolatedCircleWidth = $timeline->getExtrapolatedCircleWidth($timeInfo[1][$g
|
|||
$circleWidth
|
||||
); ?>" href="<?= $timeInfo[1][$groupName]->getDetailUrl()->overwriteParams(
|
||||
array(
|
||||
'start' => $timeInfo[0]->start->getTimestamp(),
|
||||
'end' => $timeInfo[0]->end->getTimestamp(),
|
||||
'name' => $groupName
|
||||
'timestamp<' => $timeInfo[0]->start->getTimestamp(),
|
||||
'timestamp>' => $timeInfo[0]->end->getTimestamp(),
|
||||
'type' => $groupName
|
||||
)
|
||||
); ?>" title="<?= $timeInfo[1][$groupName]->getValue(); ?> <?= $labelAndColor['label']; ?>"></a>
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,7 @@ class CommentdeletionhistoryQuery extends IdoQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($col === 'UNIX_TIMESTAMP(h.deletion_time)') {
|
||||
return 'h.deletion_time ' . $sign . ' ' . $this->timestampForSql(strtotime($expression));
|
||||
return 'h.deletion_time ' . $sign . ' ' . $this->timestampForSql($this->valueToTimestamp($expression));
|
||||
} else {
|
||||
return parent::whereToSql($col, $sign, $expression);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class CommenthistoryQuery extends IdoQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($col === 'UNIX_TIMESTAMP(h.comment_time)') {
|
||||
return 'h.comment_time ' . $sign . ' ' . $this->timestampForSql(strtotime($expression));
|
||||
return 'h.comment_time ' . $sign . ' ' . $this->timestampForSql($this->valueToTimestamp($expression));
|
||||
} else {
|
||||
return parent::whereToSql($col, $sign, $expression);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class DowntimeendhistoryQuery extends IdoQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($col === 'UNIX_TIMESTAMP(h.actual_end_time)') {
|
||||
return 'h.actual_end_time ' . $sign . ' ' . $this->timestampForSql(strtotime($expression));
|
||||
return 'h.actual_end_time ' . $sign . ' ' . $this->timestampForSql($this->valueToTimestamp($expression));
|
||||
} else {
|
||||
return parent::whereToSql($col, $sign, $expression);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class DowntimestarthistoryQuery extends IdoQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($col === 'UNIX_TIMESTAMP(h.actual_start_time)') {
|
||||
return 'h.actual_start_time ' . $sign . ' ' . $this->timestampForSql(strtotime($expression));
|
||||
return 'h.actual_start_time ' . $sign . ' ' . $this->timestampForSql($this->valueToTimestamp($expression));
|
||||
} else {
|
||||
return parent::whereToSql($col, $sign, $expression);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class NotificationhistoryQuery extends IdoQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($col === 'UNIX_TIMESTAMP(n.start_time)') {
|
||||
return 'n.start_time ' . $sign . ' ' . $this->timestampForSql(strtotime($expression));
|
||||
return 'n.start_time ' . $sign . ' ' . $this->timestampForSql($this->valueToTimestamp($expression));
|
||||
} else {
|
||||
return parent::whereToSql($col, $sign, $expression);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class StatehistoryQuery extends IdoQuery
|
|||
public function whereToSql($col, $sign, $expression)
|
||||
{
|
||||
if ($col === 'UNIX_TIMESTAMP(sh.state_time)') {
|
||||
return 'sh.state_time ' . $sign . ' ' . $this->timestampForSql(strtotime($expression));
|
||||
return 'sh.state_time ' . $sign . ' ' . $this->timestampForSql($this->valueToTimestamp($expression));
|
||||
} else {
|
||||
return parent::whereToSql($col, $sign, $expression);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ use \DateTime;
|
|||
use \Exception;
|
||||
use \ArrayIterator;
|
||||
use \IteratorAggregate;
|
||||
use Icinga\Data\Filter\Filter;
|
||||
use Icinga\Web\Hook;
|
||||
use Icinga\Web\Session;
|
||||
use Icinga\Web\Session\SessionNamespace;
|
||||
|
@ -344,15 +345,14 @@ class TimeLine implements IteratorAggregate
|
|||
}
|
||||
}
|
||||
|
||||
$query = $this->dataview->getQuery();
|
||||
$queryColumns = $query->getColumns();
|
||||
$query->where(
|
||||
$query->isValidFilterTarget('name') ? 'name' : $queryColumns['name'],
|
||||
array_keys($this->identifiers)
|
||||
)->where('raw_timestamp <= ?', $this->displayRange->getStart()->getTimestamp())
|
||||
->where('raw_timestamp > ?', $this->forecastRange->getEnd()->getTimestamp());
|
||||
|
||||
return array_merge($query->fetchAll(), $hookResults);
|
||||
$query = $this->dataview;
|
||||
$filter = Filter::matchAll(
|
||||
Filter::where('type', array_keys($this->identifiers)),
|
||||
Filter::expression('timestamp', '<=', $this->displayRange->getStart()->getTimestamp()),
|
||||
Filter::expression('timestamp', '>', $this->displayRange->getEnd()->getTimestamp())
|
||||
);
|
||||
$query->applyFilter($filter);
|
||||
return array_merge($query->getQuery()->fetchAll(), $hookResults);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -144,36 +144,6 @@ class UrlTest extends BaseTestCase
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testWhetherFromPathProperlyRecognizesAndDecodesQueryParameters
|
||||
*/
|
||||
public function testWhetherTranslateAliasTranslatesKnownAliases()
|
||||
{
|
||||
$url = Url::fromPath('/my/test/url.html');
|
||||
$url->setAliases(array('foo' => 'bar'));
|
||||
|
||||
$this->assertEquals(
|
||||
'bar',
|
||||
$url->translateAlias('foo'),
|
||||
'Url::translateAlias does not translate a known alias'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testWhetherFromPathProperlyRecognizesAndDecodesQueryParameters
|
||||
*/
|
||||
public function testWhetherTranslateAliasDoesNotTranslateUnknownAliases()
|
||||
{
|
||||
$url = Url::fromPath('/my/test/url.html');
|
||||
$url->setAliases(array('foo' => 'bar'));
|
||||
|
||||
$this->assertEquals(
|
||||
'fo',
|
||||
$url->translateAlias('fo'),
|
||||
'Url::translateAlias does translate an unknown alias'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testWhetherFromPathProperlyRecognizesAndDecodesQueryParameters
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue