mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-28 16:24:05 +02:00
ServicetemplateController: reorganize it, add usage
This commit is contained in:
parent
f7cbe4a3be
commit
25f8d075ed
@ -3,84 +3,145 @@
|
|||||||
namespace Icinga\Module\Director\Controllers;
|
namespace Icinga\Module\Director\Controllers;
|
||||||
|
|
||||||
use Icinga\Module\Director\Objects\IcingaService;
|
use Icinga\Module\Director\Objects\IcingaService;
|
||||||
use Icinga\Module\Director\Web\Controller\SimpleController;
|
use Icinga\Module\Director\Web\Controller\Extension\DirectorDb;
|
||||||
use Icinga\Module\Director\Web\Table\ServicesOnHostsTable;
|
use Icinga\Module\Director\Web\Table\ObjectsTableService;
|
||||||
|
use Icinga\Module\Director\Web\Table\TemplateUsageTable;
|
||||||
|
use ipl\Html\FormattedString;
|
||||||
use ipl\Html\Html;
|
use ipl\Html\Html;
|
||||||
|
use ipl\Html\Link;
|
||||||
|
use ipl\Web\CompatController;
|
||||||
|
use ipl\Web\Component\UnorderedList;
|
||||||
|
|
||||||
class ServicetemplateController extends SimpleController
|
class ServicetemplateController extends CompatController
|
||||||
{
|
{
|
||||||
public function hostsAction()
|
use DirectorDb;
|
||||||
{
|
|
||||||
$this->addSingleTab($this->translate('Hosts using this service Template'));
|
|
||||||
$this->content()->add(
|
|
||||||
new ServicesOnHostsTable($this->db())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function servicesAction()
|
public function objectsAction()
|
||||||
{
|
{
|
||||||
$template = $this->requireTemplate();
|
$template = $this->requireTemplate();
|
||||||
$this->addSingleTab(
|
$this
|
||||||
$this->translate('Single Services')
|
->addSingleTab($this->translate('Single Services'))
|
||||||
)->addTitle(
|
->addTitle(
|
||||||
$this->translate('Services based on %s'),
|
$this->translate('Services based on %s'),
|
||||||
$template->getObjectName()
|
$template->getObjectName()
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->actions()->add(
|
||||||
|
Link::create(
|
||||||
|
$this->translate('Back'),
|
||||||
|
'director/servicetemplate/usage',
|
||||||
|
['name' => $template->getObjectName()],
|
||||||
|
['class' => 'icon-left-big']
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->content()->add(
|
$table = new ObjectsTableService($this->db());
|
||||||
new ServicesOnHostsTable($this->db())
|
$table->setAuth($this->Auth());
|
||||||
);
|
$table->filterTemplate($template, $this->params->get('inheritance', 'direct'));
|
||||||
|
$table->renderTo($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function applyrulesAction()
|
||||||
|
{
|
||||||
|
$template = $this->requireTemplate();
|
||||||
|
$this
|
||||||
|
->addSingleTab($this->translate('Single Services'))
|
||||||
|
->addTitle(
|
||||||
|
$this->translate('Services based on %s'),
|
||||||
|
$template->getObjectName()
|
||||||
|
);
|
||||||
|
|
||||||
|
$table = new ObjectsTableService($this->db());
|
||||||
|
$table->filterTemplate($template);
|
||||||
|
$this->content()->add($table);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function usageAction()
|
public function usageAction()
|
||||||
{
|
{
|
||||||
$template = $this->requireTemplate();
|
$template = $this->requireTemplate();
|
||||||
|
$templateName = $template->getObjectName();
|
||||||
|
|
||||||
$this->addSingleTab(
|
$this->addSingleTab(
|
||||||
$this->translate('Service Template Usage')
|
$this->translate('Service Template Usage')
|
||||||
)->addTitle(
|
)->addTitle(
|
||||||
$this->translate('Template: %s'),
|
$this->translate('Template: %s'),
|
||||||
$template->getObjectName()
|
$templateName
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->actions()->add([
|
||||||
|
Link::create(
|
||||||
|
$this->translate('Modify'),
|
||||||
|
'director/service/edit',
|
||||||
|
['name' => $templateName],
|
||||||
|
['class' => 'icon-edit']
|
||||||
|
),
|
||||||
|
Link::create(
|
||||||
|
$this->translate('Preview'),
|
||||||
|
'director/service/render',
|
||||||
|
['name' => $templateName],
|
||||||
|
[
|
||||||
|
'title' => $this->translate('Template rendering preview'),
|
||||||
|
'class' => 'icon-doc-text'
|
||||||
|
]
|
||||||
|
),
|
||||||
|
Link::create(
|
||||||
|
$this->translate('History'),
|
||||||
|
'director/service/history',
|
||||||
|
['name' => $templateName],
|
||||||
|
[
|
||||||
|
'title' => $this->translate('Template history'),
|
||||||
|
'class' => 'icon-history'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->content()->addPrintf(
|
||||||
|
$this->translate(
|
||||||
|
'This is the "%s" Service Template. Based on this, you might want to:'
|
||||||
|
),
|
||||||
|
$templateName
|
||||||
|
)->add(
|
||||||
|
new UnorderedList([
|
||||||
|
new FormattedString($this->translate('Create new Service Checks for %s'), [
|
||||||
|
Link::create(
|
||||||
|
$this->translate('specific Hosts'),
|
||||||
|
'director/servicetemplate/addhost',
|
||||||
|
['name' => $templateName]
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
new FormattedString($this->translate('Assign this Template multiple times using %s'), [
|
||||||
|
Link::create(
|
||||||
|
$this->translate('Apply Rules'),
|
||||||
|
'director/service/add',
|
||||||
|
['apply' => $templateName]
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
new FormattedString($this->translate('Create a new %s inheriting from this one'), [
|
||||||
|
Link::create(
|
||||||
|
$this->translate('Template'),
|
||||||
|
'director/servicetemplate/addhost',
|
||||||
|
['name' => $templateName]
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
new FormattedString($this->translate('Make a Service based on this Template member of a %s'), [
|
||||||
|
Link::create(
|
||||||
|
$this->translate('Service Set'),
|
||||||
|
'director/servicetemplate/addtoset',
|
||||||
|
['name' => $templateName]
|
||||||
|
),
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
'class' => 'vertical-action-list'
|
||||||
|
])
|
||||||
|
)->add(
|
||||||
|
Html::tag('h2', null, $this->translate('Current Template Usage'))
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->content()->add(
|
$this->content()->add(
|
||||||
Html::tag('pre', null, print_r(
|
TemplateUsageTable::forTemplate($template)
|
||||||
$this->getUsageSummary($template),
|
|
||||||
1
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getUsageSummary(IcingaService $template)
|
|
||||||
{
|
|
||||||
$ids = $template->templateResolver()->listInheritancePathIds();
|
|
||||||
$db = $this->db()->getDbAdapter();
|
|
||||||
|
|
||||||
$query = $db->select()->from(
|
|
||||||
['s' => 'icinga_service'],
|
|
||||||
[
|
|
||||||
'cnt_templates' => $this->getSummaryLine('template'),
|
|
||||||
'cnt_objects' => $this->getSummaryLine('object'),
|
|
||||||
'cnt_apply_rules' => $this->getSummaryLine('apply', 's.service_set_id IS NULL'),
|
|
||||||
'cnt_set_members' => $this->getSummaryLine('apply', 's.service_set_id IS NOT NULL'),
|
|
||||||
]
|
|
||||||
)->joinLeft(
|
|
||||||
['ps' => 'icinga_service_inheritance'],
|
|
||||||
'ps.service_id = s.id',
|
|
||||||
[]
|
|
||||||
)->where('ps.parent_service_id IN (?)', $ids);
|
|
||||||
|
|
||||||
return $db->fetchRow($query);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getSummaryLine($type, $extra = null)
|
|
||||||
{
|
|
||||||
if ($extra !== null) {
|
|
||||||
$extra = " AND $extra";
|
|
||||||
}
|
|
||||||
return "COALESCE(SUM(CASE WHEN s.object_type = '${type}'${extra} THEN 1 ELSE 0 END), 0)";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function requireTemplate()
|
protected function requireTemplate()
|
||||||
{
|
{
|
||||||
return IcingaService::load([
|
return IcingaService::load([
|
||||||
|
Loading…
x
Reference in New Issue
Block a user