mirror of
https://github.com/Icinga/icingadb-web.git
synced 2026-02-03 20:40:15 -05:00
150 lines
6.1 KiB
PHTML
150 lines
6.1 KiB
PHTML
<?php
|
|
use Icinga\Data\Filter\Filter;
|
|
use Icinga\Module\Icingadb\Common\ServiceStates;
|
|
use Icinga\Web\Url;
|
|
|
|
if (! $this->compact): ?>
|
|
<?= $this->controls ?>
|
|
<?php endif ?>
|
|
<div class="content" data-base-target="_next" id="<?= $this->protectId('content') ?>">
|
|
<?php if (empty($pivotData)): ?>
|
|
<div class="item-list">
|
|
<div class="empty-state-bar"><?= $this->translate('No services found matching the filter.') ?></div>
|
|
</div>
|
|
</div>
|
|
<?php return; endif;
|
|
$hostFilter = Filter::matchAny();
|
|
foreach ($pivotData as $hostName => $_) {
|
|
$hostFilter->orFilter(Filter::where('host.name', $hostName));
|
|
}
|
|
?>
|
|
<table class="service-grid-table">
|
|
<thead>
|
|
<tr>
|
|
<th><?= $this->partial(
|
|
'joystickPagination-icingadb.phtml',
|
|
'default',
|
|
array(
|
|
'flippable' => true,
|
|
'baseUrl' => $baseUrl,
|
|
'xAxisPaginator' => $horizontalPaginator,
|
|
'yAxisPaginator' => $verticalPaginator
|
|
)
|
|
); ?></th>
|
|
<?php foreach ($pivotHeader['cols'] as $serviceDescription => $serviceDisplayName):?>
|
|
<th class="rotate-45"><div><span><?= $this->qlink(
|
|
$this->ellipsis($serviceDisplayName, 24),
|
|
Url::fromPath('icingadb/services')->addFilter(
|
|
Filter::matchAll($hostFilter, Filter::where('service.name', $serviceDescription))
|
|
),
|
|
null,
|
|
array('title' => sprintf(
|
|
$this->translate('List all services with the name "%s" on all reported hosts'),
|
|
$serviceDisplayName
|
|
)),
|
|
false
|
|
) ?></span></div></th>
|
|
<?php endforeach ?>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<?php $i = 0 ?>
|
|
<?php foreach ($pivotHeader['rows'] as $hostName => $hostDisplayName): ?>
|
|
<tr>
|
|
<th><?php
|
|
$serviceFilter = Filter::matchAny();
|
|
foreach ($pivotData[$hostName] as $serviceName => $_) {
|
|
$serviceFilter->orFilter(Filter::where('service.name', $serviceName));
|
|
}
|
|
echo $this->qlink(
|
|
$hostDisplayName,
|
|
Url::fromPath('icingadb/services')->addFilter(
|
|
Filter::matchAll($serviceFilter, Filter::where('host.name', $hostName))
|
|
),
|
|
null,
|
|
array('title' => sprintf($this->translate('List all reported services on host %s'), $hostDisplayName))
|
|
);
|
|
?></th>
|
|
<?php foreach (array_keys($pivotHeader['cols']) as $serviceDescription): ?>
|
|
<td>
|
|
<?php
|
|
$service = $pivotData[$hostName][$serviceDescription];
|
|
if ($service === null): ?>
|
|
<span aria-hidden="true">·</span>
|
|
<?php continue; endif ?>
|
|
<?php
|
|
$ariaDescribedById = $this->protectId($service->host_name . '_' . $service->name . '_desc') ?>
|
|
<span class="sr-only" id="<?= $ariaDescribedById ?>">
|
|
<?= $this->escape($service->state->output) ?>
|
|
</span>
|
|
<?= $this->qlink(
|
|
'',
|
|
'icingadb/service',
|
|
array(
|
|
'host.name' => $hostName,
|
|
'name' => $serviceDescription
|
|
),
|
|
array(
|
|
'aria-describedby' => $ariaDescribedById,
|
|
'aria-label' => sprintf(
|
|
$this->translate('Show detailed information for service %s on host %s'),
|
|
$service->display_name,
|
|
$service->host_display_name
|
|
),
|
|
'class' => 'service-grid-link state-' . $service->state->getStateText() . ($service->state->is_handled ? ' handled' : ''),
|
|
'title' => $service->state->output
|
|
)
|
|
) ?>
|
|
</td>
|
|
<?php endforeach ?>
|
|
<?php
|
|
$horizontalTotalItems = $this->horizontalPaginator->count();
|
|
$horizontalItemsPerPage = $this->horizontalPaginator->getLimit() ?? $horizontalTotalItems;
|
|
$horizontalTotalPages = ceil($horizontalTotalItems / $horizontalItemsPerPage);
|
|
|
|
$verticalTotalItems = $this->verticalPaginator->count();
|
|
$verticalItemsPerPage = $this->verticalPaginator->getLimit() ?? $verticalTotalItems;
|
|
$verticalTotalPages = ceil($verticalTotalItems / $verticalItemsPerPage);
|
|
|
|
if (! $this->compact && $horizontalTotalPages > 1): ?>
|
|
<td>
|
|
<?php $expandLink = $this->qlink(
|
|
$this->translate('Load more'),
|
|
$baseUrl,
|
|
array(
|
|
'limit' => (
|
|
$horizontalItemsPerPage + 20) . ','
|
|
. $verticalItemsPerPage
|
|
),
|
|
array(
|
|
'class' => 'action-link',
|
|
'data-base-target' => '_self'
|
|
)
|
|
) ?>
|
|
<?= ++$i === (int) (count($pivotHeader['rows']) / 2) ? $expandLink : '' ?>
|
|
</td>
|
|
<?php endif ?>
|
|
</tr>
|
|
<?php endforeach ?>
|
|
<?php if (! $this->compact && $verticalTotalPages > 1): ?>
|
|
<tr>
|
|
<td colspan="<?= count($pivotHeader['cols']) + 1?>" class="service-grid-table-more">
|
|
<?php echo $this->qlink(
|
|
$this->translate('Load more'),
|
|
$baseUrl,
|
|
array(
|
|
'limit' => $horizontalItemsPerPage . ',' .
|
|
($verticalItemsPerPage + 20)
|
|
),
|
|
array(
|
|
'class' => 'action-link',
|
|
'data-base-target' => '_self'
|
|
)
|
|
) ?>
|
|
</td>
|
|
</tr>
|
|
<?php endif ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|