Fetch host and service statistics not until they are required

fixes #9472
This commit is contained in:
Johannes Meyer 2015-06-23 08:49:11 +02:00
parent eabcb6702f
commit 67e31c730a
3 changed files with 59 additions and 56 deletions

View File

@ -111,7 +111,7 @@ class Monitoring_ListController extends Controller
'hosts_pending', 'hosts_pending',
)); ));
$this->applyRestriction('monitoring/filter/objects', $stats); $this->applyRestriction('monitoring/filter/objects', $stats);
$this->view->stats = $stats->fetchRow(); $this->view->stats = $stats;
$this->setupLimitControl(); $this->setupLimitControl();
$this->setupPaginationControl($this->view->hosts); $this->setupPaginationControl($this->view->hosts);
$this->setupSortControl(array( $this->setupSortControl(array(
@ -214,7 +214,7 @@ class Monitoring_ListController extends Controller
'services_warning_unhandled' 'services_warning_unhandled'
)); ));
$this->applyRestriction('monitoring/filter/objects', $stats); $this->applyRestriction('monitoring/filter/objects', $stats);
$this->view->stats = $stats->fetchRow(); $this->view->stats = $stats;
} }
/** /**

View File

@ -12,23 +12,25 @@ function urlAddFilterOptional($url, $filter, $optional) {
return $url->setQueryString($f->toQueryString()); return $url->setQueryString($f->toQueryString());
} }
$this->baseFilter = isset($this->baseFilter) ? $this->baseFilter : null; $this->baseFilter = isset($this->baseFilter) ? $this->baseFilter : null;
$stats = $stats->fetchRow();
$selfUrl = 'monitoring/list/hosts'; $selfUrl = 'monitoring/list/hosts';
$currentUrl = Url::fromRequest()->getRelativeUrl(); $currentUrl = Url::fromRequest()->getRelativeUrl();
?><h1 class="tinystatesummary" <?= $this->compact ? ' data-base-target="col1"' : ''; ?>> ?><h1 class="tinystatesummary" <?= $this->compact ? ' data-base-target="col1"' : ''; ?>>
<?= $this->qlink( <?= $this->qlink(
sprintf($this->translatePlural('%u Host', '%u Hosts', $this->stats->hosts_total), $this->stats->hosts_total), sprintf($this->translatePlural('%u Host', '%u Hosts', $stats->hosts_total), $stats->hosts_total),
$selfUrl, $selfUrl,
null, null,
array('title' => sprintf( array('title' => sprintf(
$this->translatePlural('List %u host', 'List all %u hosts', $this->stats->hosts_total), $this->translatePlural('List %u host', 'List all %u hosts', $stats->hosts_total),
$this->stats->hosts_total $stats->hosts_total
)) ))
) ?>&#58; ) ?>&#58;
<span class="badges"> <span class="badges">
<?php if ($this->stats->hosts_up): ?> <?php if ($stats->hosts_up): ?>
<span class="state ok<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 0))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state ok<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 0))->getRelativeUrl() ? ' active' : ''; ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->hosts_up, $stats->hosts_up,
urlAddFilterOptional( urlAddFilterOptional(
$selfUrl, $selfUrl,
Filter::where('host_state', 0), Filter::where('host_state', 0),
@ -39,19 +41,19 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
$this->translatePlural( $this->translatePlural(
'List %u host that is currently in state UP', 'List %u host that is currently in state UP',
'List %u hosts which are currently in state UP', 'List %u hosts which are currently in state UP',
$this->stats->hosts_up $stats->hosts_up
), ),
$this->stats->hosts_up $stats->hosts_up
) )
) )
); ?> ); ?>
</span> </span>
<?php endif; ?> <?php endif; ?>
<?php if ($this->stats->hosts_down_unhandled): ?> <?php if ($stats->hosts_down_unhandled): ?>
<span class="state critical<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 1, 'host_unhandled' => 1))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state critical<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 1, 'host_unhandled' => 1))->getRelativeUrl() ? ' active' : ''; ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->hosts_down_unhandled, $stats->hosts_down_unhandled,
urlAddFilterOptional( urlAddFilterOptional(
$selfUrl, $selfUrl,
Filter::matchAll(Filter::where('host_state', 1), Filter::where('host_unhandled', 1)), Filter::matchAll(Filter::where('host_state', 1), Filter::where('host_unhandled', 1)),
@ -62,17 +64,17 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
$this->translatePlural( $this->translatePlural(
'List %u host that is currently in state DOWN', 'List %u host that is currently in state DOWN',
'List %u hosts which are currently in state DOWN', 'List %u hosts which are currently in state DOWN',
$this->stats->hosts_down_unhandled $stats->hosts_down_unhandled
), ),
$this->stats->hosts_down_unhandled $stats->hosts_down_unhandled
)) ))
); ?> ); ?>
<?php endif; ?> <?php endif; ?>
<?php if ($this->stats->hosts_down_handled): ?> <?php if ($stats->hosts_down_handled): ?>
<span class="state handled critical<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 1, 'host_unhandled' =>0))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state handled critical<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 1, 'host_unhandled' =>0))->getRelativeUrl() ? ' active' : ''; ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->hosts_down_handled, $stats->hosts_down_handled,
urlAddFilterOptional( urlAddFilterOptional(
$selfUrl, $selfUrl,
Filter::matchAll(Filter::where('host_state', 1), Filter::where('host_unhandled', 0)), Filter::matchAll(Filter::where('host_state', 1), Filter::where('host_unhandled', 0)),
@ -83,22 +85,22 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
$this->translatePlural( $this->translatePlural(
'List %u host that is currently in state DOWN (Acknowledged)', 'List %u host that is currently in state DOWN (Acknowledged)',
'List %u hosts which are currently in state DOWN (Acknowledged)', 'List %u hosts which are currently in state DOWN (Acknowledged)',
$this->stats->hosts_down_handled $stats->hosts_down_handled
), ),
$this->stats->hosts_down_handled $stats->hosts_down_handled
)) ))
); ?> ); ?>
</span> </span>
<?php endif; ?> <?php endif; ?>
<?php if($this->stats->hosts_down): ?> <?php if($stats->hosts_down): ?>
</span> </span>
<?php endif; ?> <?php endif; ?>
<?php if($this->stats->hosts_unreachable_unhandled): ?> <?php if($stats->hosts_unreachable_unhandled): ?>
<span class="state unknown<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 2, 'host_unhandled' => 1))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state unknown<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 2, 'host_unhandled' => 1))->getRelativeUrl() ? ' active' : ''; ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->hosts_unreachable_unhandled, $stats->hosts_unreachable_unhandled,
urlAddFilterOptional( urlAddFilterOptional(
$selfUrl, $selfUrl,
Filter::matchAll(Filter::where('host_state', 2), Filter::where('host_unhandled', 1)), Filter::matchAll(Filter::where('host_state', 2), Filter::where('host_unhandled', 1)),
@ -109,17 +111,17 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
$this->translatePlural( $this->translatePlural(
'List %u host that is currently in state UNREACHABLE', 'List %u host that is currently in state UNREACHABLE',
'List %u hosts which are currently in state UNREACHABLE', 'List %u hosts which are currently in state UNREACHABLE',
$this->stats->hosts_unreachable_unhandled $stats->hosts_unreachable_unhandled
), ),
$this->stats->hosts_unreachable_unhandled $stats->hosts_unreachable_unhandled
)) ))
); ?> ); ?>
<?php endif; ?> <?php endif; ?>
<?php if($this->stats->hosts_unreachable_handled > 0): ?> <?php if($stats->hosts_unreachable_handled > 0): ?>
<span class="state handled unknown<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 2, 'host_unhandled' => 0))->getRelativeUrl() ? ' active' : '' ?>"> <span class="state handled unknown<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 2, 'host_unhandled' => 0))->getRelativeUrl() ? ' active' : '' ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->hosts_unreachable_handled, $stats->hosts_unreachable_handled,
urlAddFilterOptional( urlAddFilterOptional(
$selfUrl, $selfUrl,
Filter::matchAll(Filter::where('host_state', 2), Filter::where('host_unhandled', 0)), Filter::matchAll(Filter::where('host_state', 2), Filter::where('host_unhandled', 0)),
@ -130,22 +132,22 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
$this->translatePlural( $this->translatePlural(
'List %u host that is currently in state UNREACHABLE (Acknowledged)', 'List %u host that is currently in state UNREACHABLE (Acknowledged)',
'List %u hosts which are currently in state UNREACHABLE (Acknowledged)', 'List %u hosts which are currently in state UNREACHABLE (Acknowledged)',
$this->stats->hosts_unreachable_handled $stats->hosts_unreachable_handled
), ),
$this->stats->hosts_unreachable_handled $stats->hosts_unreachable_handled
)) ))
); ?> ); ?>
</span> </span>
<?php endif; ?> <?php endif; ?>
<?php if($this->stats->hosts_unreachable): ?> <?php if($stats->hosts_unreachable): ?>
</span> </span>
<?php endif; ?> <?php endif; ?>
<?php if($this->stats->hosts_pending): ?> <?php if($stats->hosts_pending): ?>
<span class="state pending<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 99))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state pending<?= $currentUrl === Url::fromPath($selfUrl, array('host_state' => 99))->getRelativeUrl() ? ' active' : ''; ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->hosts_pending, $stats->hosts_pending,
urlAddFilterOptional( urlAddFilterOptional(
$selfUrl, $selfUrl,
Filter::where('host_state', 99), Filter::where('host_state', 99),
@ -156,9 +158,9 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
$this->translatePlural( $this->translatePlural(
'List %u host that is currently in state PENDING', 'List %u host that is currently in state PENDING',
'List %u hosts which are currently in state PENDING', 'List %u hosts which are currently in state PENDING',
$this->stats->hosts_pending $stats->hosts_pending
), ),
$this->stats->hosts_pending $stats->hosts_pending
)) ))
); ?> ); ?>
</span> </span>

View File

@ -14,36 +14,37 @@ function urlAddFilterOptional($url, $filter, $optional) {
} }
$this->baseFilter = isset($this->baseFilter) ? $this->baseFilter : null; $this->baseFilter = isset($this->baseFilter) ? $this->baseFilter : null;
$stats = $stats->fetchRow();
$selfUrl = 'monitoring/list/services'; $selfUrl = 'monitoring/list/services';
$currentUrl = Url::fromRequest()->getRelativeUrl(); $currentUrl = Url::fromRequest()->getRelativeUrl();
?><h1 class="tinystatesummary" <?= $this->compact ? ' data-base-target="col1"' : ''; ?>> ?><h1 class="tinystatesummary" <?= $this->compact ? ' data-base-target="col1"' : ''; ?>>
<?= $this->qlink( <?= $this->qlink(
sprintf($this->translatePlural( sprintf($this->translatePlural(
'%u Service', '%u Services', $this->stats->services_total), '%u Service', '%u Services', $stats->services_total),
$this->stats->services_total $stats->services_total
), ),
$selfUrl, $selfUrl,
null, null,
array('title' => sprintf( array('title' => sprintf(
$this->translatePlural('List %u service', 'List all %u services', $this->stats->services_total), $this->translatePlural('List %u service', 'List all %u services', $stats->services_total),
$this->stats->services_total $stats->services_total
)) ))
) ?>&#58; ) ?>&#58;
<span class="badges"> <span class="badges">
<?php if ($this->stats->services_ok): ?> <?php if ($stats->services_ok): ?>
<span class="state ok<?= $currentUrl === Url::fromPath($selfUrl, array('service_state' => 0))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state ok<?= $currentUrl === Url::fromPath($selfUrl, array('service_state' => 0))->getRelativeUrl() ? ' active' : ''; ?>">
<?= <?=
$this->qlink( $this->qlink(
$this->stats->services_ok, $stats->services_ok,
urlAddFilterOptional($selfUrl, Filter::where('service_state', 0), $this->baseFilter), urlAddFilterOptional($selfUrl, Filter::where('service_state', 0), $this->baseFilter),
null, null,
array('title' => sprintf( array('title' => sprintf(
$this->translatePlural( $this->translatePlural(
'List %u service that is currently in state OK', 'List %u service that is currently in state OK',
'List %u services which are currently in state OK', 'List %u services which are currently in state OK',
$this->stats->services_ok $stats->services_ok
), ),
$this->stats->services_ok $stats->services_ok
)) ))
); );
?> ?>
@ -52,7 +53,7 @@ $currentUrl = Url::fromRequest()->getRelativeUrl();
<?php <?php
foreach (array(2 => 'critical', 3 => 'unknown', 1 => 'warning') as $stateId => $state) { foreach (array(2 => 'critical', 3 => 'unknown', 1 => 'warning') as $stateId => $state) {
$pre = 'services_' . $state; $pre = 'services_' . $state;
if ($this->stats->$pre) { if ($stats->$pre) {
$handled = $pre . '_handled'; $handled = $pre . '_handled';
$unhandled = $pre . '_unhandled'; $unhandled = $pre . '_unhandled';
$paramsHandled = Filter::matchAll( $paramsHandled = Filter::matchAll(
@ -63,7 +64,7 @@ foreach (array(2 => 'critical', 3 => 'unknown', 1 => 'warning') as $stateId => $
Filter::where('service_state', $stateId), Filter::where('service_state', $stateId),
Filter::where('service_handled', 0) Filter::where('service_handled', 0)
); );
if ($this->stats->$unhandled) { if ($stats->$unhandled) {
$compareUrl = Url::fromPath($selfUrl)->setQueryString($paramsUnhandled->toQueryString())->getRelativeUrl(); $compareUrl = Url::fromPath($selfUrl)->setQueryString($paramsUnhandled->toQueryString())->getRelativeUrl();
} else { } else {
$compareUrl = Url::fromPath($selfUrl)->setQueryString($paramsUnhandled->toQueryString())->getRelativeUrl(); $compareUrl = Url::fromPath($selfUrl)->setQueryString($paramsUnhandled->toQueryString())->getRelativeUrl();
@ -75,49 +76,49 @@ foreach (array(2 => 'critical', 3 => 'unknown', 1 => 'warning') as $stateId => $
$active = ''; $active = '';
} }
echo '<span class="state ' . $state . $active . ($this->stats->$unhandled ? '' : ' handled') . '">'; echo '<span class="state ' . $state . $active . ($stats->$unhandled ? '' : ' handled') . '">';
if ($this->stats->$unhandled) { if ($stats->$unhandled) {
echo $this->qlink( echo $this->qlink(
$this->stats->$unhandled, $stats->$unhandled,
urlAddFilterOptional($selfUrl, $paramsUnhandled, $this->baseFilter), urlAddFilterOptional($selfUrl, $paramsUnhandled, $this->baseFilter),
null, null,
array('title' => sprintf( array('title' => sprintf(
$this->translatePlural( $this->translatePlural(
'List %u service that is currently in state %s', 'List %u service that is currently in state %s',
'List %u services which are currently in state %s', 'List %u services which are currently in state %s',
$this->stats->$unhandled $stats->$unhandled
), ),
$this->stats->$unhandled, $stats->$unhandled,
Service::getStateText($stateId, true) Service::getStateText($stateId, true)
)) ))
); );
} }
if ($this->stats->$handled) { if ($stats->$handled) {
if (Url::fromPath($selfUrl)->setQueryString($paramsHandled->toQueryString())->getRelativeUrl() === $currentUrl) { if (Url::fromPath($selfUrl)->setQueryString($paramsHandled->toQueryString())->getRelativeUrl() === $currentUrl) {
$active = ' active'; $active = ' active';
} else { } else {
$active = ''; $active = '';
} }
if ($this->stats->$unhandled) { if ($stats->$unhandled) {
echo '<span class="state handled ' . $state . $active . '">'; echo '<span class="state handled ' . $state . $active . '">';
} }
echo $this->qlink( echo $this->qlink(
$this->stats->$handled, $stats->$handled,
urlAddFilterOptional($selfUrl, $paramsHandled, $this->baseFilter), urlAddFilterOptional($selfUrl, $paramsHandled, $this->baseFilter),
null, null,
array('title' => sprintf( array('title' => sprintf(
$this->translatePlural( $this->translatePlural(
'List %u service that is currently in state %s (Acknowledged)', 'List %u service that is currently in state %s (Acknowledged)',
'List %u services which are currently in state %s (Acknowledged)', 'List %u services which are currently in state %s (Acknowledged)',
$this->stats->$handled $stats->$handled
), ),
$this->stats->$handled, $stats->$handled,
Service::getStateText($stateId, true) Service::getStateText($stateId, true)
)) ))
); );
if ($this->stats->$unhandled) { if ($stats->$unhandled) {
echo "</span>\n"; echo "</span>\n";
} }
} }
@ -125,19 +126,19 @@ foreach (array(2 => 'critical', 3 => 'unknown', 1 => 'warning') as $stateId => $
} }
} }
?> ?>
<?php if ($this->stats->services_pending): ?> <?php if ($stats->services_pending): ?>
<span class="state pending<?= $currentUrl === Url::fromPath($selfUrl, array('service_state' => 99))->getRelativeUrl() ? ' active' : ''; ?>"> <span class="state pending<?= $currentUrl === Url::fromPath($selfUrl, array('service_state' => 99))->getRelativeUrl() ? ' active' : ''; ?>">
<?= $this->qlink( <?= $this->qlink(
$this->stats->services_pending, $stats->services_pending,
urlAddFilterOptional($selfUrl, Filter::where('service_state', 99), $this->baseFilter), urlAddFilterOptional($selfUrl, Filter::where('service_state', 99), $this->baseFilter),
null, null,
array('title' => sprintf( array('title' => sprintf(
$this->translatePlural( $this->translatePlural(
'List %u service that is currently in state PENDING', 'List %u service that is currently in state PENDING',
'List %u services which are currently in state PENDING', 'List %u services which are currently in state PENDING',
$this->stats->services_pending $stats->services_pending
), ),
$this->stats->services_pending $stats->services_pending
)) ))
); ?> ); ?>
</span> </span>