icingaweb2-module-graphite/library/Graphite/Web/Widget/IcingadbGraphs.php

106 lines
2.7 KiB
PHP
Raw Normal View History

2022-02-17 05:06:09 -05:00
<?php
/* Icinga Graphite Web | (c) 2022 Icinga GmbH | GPLv2 */
namespace Icinga\Module\Graphite\Web\Widget;
use Icinga\Module\Graphite\Web\Widget\Graphs\Icingadb\IcingadbHost;
use Icinga\Module\Graphite\Web\Widget\Graphs\Icingadb\IcingadbService;
use Icinga\Module\Icingadb\Common\Links;
2022-02-17 05:06:09 -05:00
use Icinga\Module\Icingadb\Model\Host;
use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;
use ipl\Html\HtmlDocument;
2022-02-17 05:06:09 -05:00
use ipl\Html\HtmlString;
use ipl\Orm\ResultSet;
use ipl\Stdlib\BaseFilter;
use ipl\Web\Widget\EmptyState;
2022-02-17 05:06:09 -05:00
use ipl\Web\Widget\Link;
/**
* Class for creating graphs of icingadb objects
2022-02-17 05:06:09 -05:00
*/
class IcingadbGraphs extends BaseHtmlElement
{
use BaseFilter;
2022-02-17 05:06:09 -05:00
protected $defaultAttributes = ['class' => 'grid'];
/** @var Iterable */
protected $objects;
protected $tag = 'div';
/**
* Create a new Graph item
2022-02-17 05:06:09 -05:00
*
* @param ResultSet $objects
2022-02-17 05:06:09 -05:00
*/
public function __construct(ResultSet $objects)
2022-02-17 05:06:09 -05:00
{
$this->objects = $objects;
}
protected function assemble()
{
if (! $this->objects->hasResult()) {
$this->add(new EmptyState(t('No items found.')));
}
foreach ($this->objects as $object) {
$this->add($this->createGridItem($object));
}
$document = new HtmlDocument();
$document->addHtml(Html::tag('div', ['class' => 'graphite-graph-color-registry']), $this);
$this->prependWrapper($document);
2022-02-17 05:06:09 -05:00
}
protected function createGridItem($object)
{
if ($object instanceof Host) {
$graph = new IcingadbHost($object);
$hostObj = $object;
2022-02-17 05:06:09 -05:00
} else {
$graph = new IcingadbService($object);
$hostObj = $object->host;
2022-02-17 05:06:09 -05:00
}
$hostUrl = Links::host($hostObj);
$baseFilter = $this->getBaseFilter();
if ($baseFilter !== null) {
$hostUrl->setFilter($baseFilter);
}
2022-02-17 05:06:09 -05:00
$hostLink = new Link(
$graph->createHostTitle(),
$hostUrl,
2022-02-17 05:06:09 -05:00
['data-base-target' => '_next']
);
$serviceLink = null;
if ($graph->getObjectType() === 'service') {
$serviceUrl = Links::service($object, $hostObj);
if ($baseFilter !== null) {
$serviceUrl->setFilter($baseFilter);
}
$serviceLink = new Link(
2022-02-17 05:06:09 -05:00
$graph->createServiceTitle(),
$serviceUrl,
2022-02-17 05:06:09 -05:00
['data-base-target' => '_next']
);
}
$gridItem = Html::tag('div', ['class' => 'grid-item']);
$header = Html::tag('h2');
2022-02-17 05:06:09 -05:00
$header->add([$hostLink, $serviceLink]);
$gridItem->add($header);
return $gridItem->add(HtmlString::create($graph->setPreloadDummy()->handleRequest()));
2022-02-17 05:06:09 -05:00
}
}