Dashboard: Display error message on failure

When no (default) configuration is available for dashboards
application dies not very gracefully. Display error message
and guid the user to the solution is a better way.

fixes #6412
This commit is contained in:
Marius Hein 2014-06-05 15:20:54 +02:00
parent 83faa66167
commit 151f058286
3 changed files with 50 additions and 17 deletions

View File

@ -46,6 +46,11 @@ use Icinga\Web\Controller\ActionController;
*/ */
class DashboardController extends ActionController class DashboardController extends ActionController
{ {
/**
* Default configuration
*/
const DEFAULT_CONFIG = 'dashboard/dashboard';
/** /**
* Retrieve a dashboard from the provided config * Retrieve a dashboard from the provided config
* *
@ -53,14 +58,18 @@ class DashboardController extends ActionController
* *
* @return \Icinga\Web\Widget\Dashboard * @return \Icinga\Web\Widget\Dashboard
*/ */
private function getDashboard($config = 'dashboard/dashboard') private function getDashboard($config = self::DEFAULT_CONFIG)
{ {
$dashboard = new Dashboard(); $dashboard = new Dashboard();
try { try {
$dashboardConfig = IcingaConfig::app($config); $dashboardConfig = IcingaConfig::app($config);
if (count($dashboardConfig) === 0) {
return null;
}
$dashboard->readConfig($dashboardConfig); $dashboard->readConfig($dashboardConfig);
} catch (NotReadableError $e) { } catch (NotReadableError $e) {
Logger::error(new Exception('Cannot load dashboard configuration. An exception was thrown:', 0, $e)); Logger::error(new Exception('Cannot load dashboard configuration. An exception was thrown:', 0, $e));
return null;
} }
return $dashboard; return $dashboard;
} }
@ -133,8 +142,15 @@ class DashboardController extends ActionController
$pane = $this->_getParam('pane'); $pane = $this->_getParam('pane');
$dashboard->activate($pane); $dashboard->activate($pane);
} }
$this->view->configPath = IcingaConfig::$configDir . DIRECTORY_SEPARATOR . self::DEFAULT_CONFIG;
if ($dashboard === null) {
$this->view->title = 'Dashboard';
} else {
$this->view->title = $dashboard->getActivePane()->getTitle() . ' :: Dashboard'; $this->view->title = $dashboard->getActivePane()->getTitle() . ' :: Dashboard';
$this->view->tabs = $dashboard->getTabs(); $this->view->tabs = $dashboard->getTabs();
/* Temporarily removed /* Temporarily removed
$this->view->tabs->add( $this->view->tabs->add(
'Add', 'Add',
@ -144,7 +160,10 @@ class DashboardController extends ActionController
) )
); );
*/ */
$this->view->dashboard = $dashboard; $this->view->dashboard = $dashboard;
}
} }
/** /**

View File

@ -1,6 +1,20 @@
<div class="controls"> <div class="controls">
<?= $this->tabs ?> <?= $this->tabs ?>
</div> </div>
<?php if ($this->dashboard): ?>
<div class="dashboard content"> <div class="dashboard content">
<?= $this->dashboard ?> <?= $this->dashboard ?>
</div> </div>
<?php else: ?>
<div class="content">
<h1>No dashboard configuration found!</h1>
<p>
We tried to load a dashboard configuration with no success.
Please have look that the configuration does exist:
<code>
<?= $this->configPath ?>.ini
</code>
</p>
</div>
<?php endif; ?>

View File

@ -305,7 +305,7 @@ class Dashboard extends AbstractWidget
$active = $this->setDefaultPane(); $active = $this->setDefaultPane();
} }
} }
return $this->panes[$active]; return isset($this->panes[$active]) ? $this->panes[$active] : null;
} }
/** /**