view->tickets = Hook::first('ticket'); } if (Hook::has('grapher')) { $this->view->graphers = Hook::all('grapher'); } } /** * Show a host or service */ public function showAction() { $this->setAutorefreshInterval(10); $this->setupQuickActionForms(); $auth = $this->Auth(); $this->object->populate(); $this->handleFormatRequest(); $toggleFeaturesForm = new ToggleObjectFeaturesCommandForm(array( 'backend' => $this->backend, 'objects' => $this->object )); $toggleFeaturesForm ->load($this->object) ->handleRequest(); $this->view->toggleFeaturesForm = $toggleFeaturesForm; if (! empty($this->object->comments) && $auth->hasPermission('monitoring/command/comment/delete')) { $delCommentForm = new DeleteCommentCommandForm(); $delCommentForm->handleRequest(); $this->view->delCommentForm = $delCommentForm; } if (! empty($this->object->downtimes) && $auth->hasPermission('monitoring/command/downtime/delete')) { $delDowntimeForm = new DeleteDowntimeCommandForm(); $delDowntimeForm->handleRequest(); $this->view->delDowntimeForm = $delDowntimeForm; } $this->view->showInstance = $this->backend->select()->from('instance')->count() > 1; $this->view->object = $this->object; $this->view->extensionsHtml = array(); foreach (Hook::all('Monitoring\DetailviewExtension') as $hook) { /** @var DetailviewExtensionHook $hook */ try { $html = $hook->setView($this->view)->getHtmlForObject($this->object); } catch (Exception $e) { $html = $this->view->escape($e->getMessage()); } if ($html) { $module = $this->view->escape($hook->getModule()->getName()); $this->view->extensionsHtml[] = '
' . $html . '
'; } } } /** * Show the history for a host or service */ public function historyAction() { $this->getTabs()->activate('history'); $this->view->history = $this->object->fetchEventHistory()->eventhistory; $this->applyRestriction('monitoring/filter/objects', $this->view->history); $this->setupLimitControl(50); $this->setupPaginationControl($this->view->history, 50); $this->view->object = $this->object; $this->render('object/detail-history', null, true); } /** * Show the content of a custom tab */ public function tabhookAction() { $hookName = $this->params->get('hook'); $this->getTabs()->activate($hookName); $hook = $this->tabHooks[$hookName]; $this->view->header = $hook->getHeader($this->object, $this->getRequest()); $this->view->content = $hook->getContent($this->object, $this->getRequest()); $this->view->object = $this->object; $this->render('object/detail-tabhook', null, true); } /** * Handle a command form * * @param ObjectsCommandForm $form * * @return ObjectsCommandForm */ protected function handleCommandForm(ObjectsCommandForm $form) { $form ->setBackend($this->backend) ->setObjects($this->object) ->setRedirectUrl(Url::fromPath($this->commandRedirectUrl)->setParams($this->params)) ->handleRequest(); $this->view->form = $form; $this->view->object = $this->object; $this->view->tabs->remove('dashboard'); $this->view->tabs->remove('menu-entry'); $this->_helper->viewRenderer('partials/command/object-command-form', null, true); $this->setupQuickActionForms(); return $form; } /** * Export to JSON if requested */ protected function handleFormatRequest($query = null) { if ($this->params->get('format') === 'json' || $this->getRequest()->getHeader('Accept') === 'application/json' ) { $payload = (array) $this->object->properties; $payload['vars'] = $this->object->customvars; if ($this->hasPermission('*') || ! $this->hasPermission('no-monitoring/contacts')) { $payload['contacts'] = $this->object->contacts->fetchPairs(); $payload['contact_groups'] = $this->object->contactgroups->fetchPairs(); } else { $payload['contacts'] = []; $payload['contact_groups'] = []; } $groupName = $this->object->getType() . 'groups'; $payload[$groupName] = $this->object->$groupName; $this->getResponse()->json() ->setSuccessData($payload) ->setAutoSanitize() ->sendResponse(); } } /** * Acknowledge a problem */ abstract public function acknowledgeProblemAction(); /** * Add a comment */ abstract public function addCommentAction(); /** * Reschedule a check */ abstract public function rescheduleCheckAction(); /** * Schedule a downtime */ abstract public function scheduleDowntimeAction(); /** * Create tabs */ protected function createTabs() { $tabs = $this->getTabs(); $object = $this->object; if ($object->getType() === $object::TYPE_HOST) { $isService = false; $params = array( 'host' => $object->getName() ); if ($this->params->has('service')) { $params['service'] = $this->params->get('service'); } } else { $isService = true; $params = array( 'host' => $object->getHost()->getName(), 'service' => $object->getName() ); } $tabs->add( 'host', array( 'title' => sprintf( $this->translate('Show detailed information for host %s'), $isService ? $object->getHost()->getName() : $object->getName() ), 'label' => $this->translate('Host'), 'url' => 'monitoring/host/show', 'urlParams' => $params ) ); if ($isService || $this->params->has('service')) { $tabs->add( 'service', array( 'title' => sprintf( $this->translate('Show detailed information for service %s on host %s'), $isService ? $object->getName() : $this->params->get('service'), $isService ? $object->getHost()->getName() : $object->getName() ), 'label' => $this->translate('Service'), 'url' => 'monitoring/service/show', 'urlParams' => $params ) ); } $tabs->add( 'services', array( 'title' => sprintf( $this->translate('List all services on host %s'), $isService ? $object->getHost()->getName() : $object->getName() ), 'label' => $this->translate('Services'), 'url' => 'monitoring/host/services', 'urlParams' => $params ) ); if ($this->backend->hasQuery('eventhistory')) { $tabs->add( 'history', array( 'title' => $isService ? sprintf( $this->translate('Show all event records of service %s on host %s'), $object->getName(), $object->getHost()->getName() ) : sprintf($this->translate('Show all event records of host %s'), $object->getName()) , 'label' => $this->translate('History'), 'url' => $isService ? 'monitoring/service/history' : 'monitoring/host/history', 'urlParams' => $params ) ); } /** @var ObjectDetailsTabHook $hook */ foreach (Hook::all('Monitoring\\ObjectDetailsTab') as $hook) { $hookName = $hook->getName(); if ($hook->shouldBeShown($object, $this->Auth())) { $this->tabHooks[$hookName] = $hook; $tabs->add($hookName, [ 'label' => $hook->getLabel(), 'url' => $isService ? 'monitoring/service/tabhook' : 'monitoring/host/tabhook', 'urlParams' => $params + [ 'hook' => $hookName ] ]); } } $tabs->extend(new DashboardAction())->extend(new MenuAction()); } /** * Create quick action forms and pass them to the view */ protected function setupQuickActionForms() { $auth = $this->Auth(); if ($auth->hasPermission('monitoring/command/schedule-check') || ($auth->hasPermission('monitoring/command/schedule-check/active-only') && $this->object->active_checks_enabled ) ) { $this->view->checkNowForm = $checkNowForm = new CheckNowCommandForm(); $checkNowForm ->setObjects($this->object) ->handleRequest(); } if (! in_array((int) $this->object->state, array(0, 99)) && $this->object->acknowledged && $auth->hasPermission('monitoring/command/remove-acknowledgement') ) { $this->view->removeAckForm = $removeAckForm = new RemoveAcknowledgementCommandForm(); $removeAckForm ->setObjects($this->object) ->handleRequest(); } } }