monitoring: Remove the MultiController

The controller is no longer used.
This commit is contained in:
Eric Lippmann 2014-12-30 10:38:43 +01:00
parent 8594ff6843
commit b7d6ee75f2
1 changed files with 0 additions and 282 deletions

View File

@ -1,282 +0,0 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
use Icinga\Module\Monitoring\Controller;
use Icinga\Web\Widget\Chart\InlinePie;
use Icinga\Module\Monitoring\Forms\Command\MultiCommandFlagForm;
use Icinga\Web\Widget;
use Icinga\Data\Filter\Filter;
/**
* Displays aggregations collections of multiple objects.
*/
class Monitoring_MultiController extends Controller
{
public function hostAction()
{
$errors = array();
$query = $this->backend->select()->from(
'hostStatus',
array(
'host_name',
'host_in_downtime',
'host_passive_checks_enabled',
'host_obsessing',
'host_state',
'host_notifications_enabled',
'host_event_handler_enabled',
'host_flap_detection_enabled',
'host_active_checks_enabled',
// columns intended for filter-request
'host_problem',
'host_handled'
)
)->getQuery();
$this->applyQueryFilter($query);
$hosts = $query->fetchAll();
$comments = $this->backend->select()->from('comment', array(
'comment_internal_id',
'comment_host',
));
$this->applyQueryFilter($comments);
$uniqueComments = array_keys($this->getUniqueValues($comments->getQuery()->fetchAll(), 'comment_internal_id'));
// Populate view
$this->view->objects = $this->view->hosts = $hosts;
$this->view->problems = $this->getProblems($hosts);
$this->view->comments = $uniqueComments;
$this->view->hostnames = $this->getProperties($hosts, 'host_name');
$this->view->downtimes = $this->getDowntimes($hosts);
$this->view->errors = $errors;
$this->view->states = $this->countStates($hosts, 'host', 'host_name');
$this->view->pie = $this->createPie(
$this->view->states,
$this->view->getHelper('MonitoringState')->getHostStateColors(),
mt('monitoring', 'Host State')
);
// Handle configuration changes
$this->handleConfigurationForm(array(
'host_passive_checks_enabled' => $this->translate('Passive Checks'),
'host_active_checks_enabled' => $this->translate('Active Checks'),
'host_notifications_enabled' => $this->translate('Notifications'),
'host_event_handler_enabled' => $this->translate('Event Handler'),
'host_flap_detection_enabled' => $this->translate('Flap Detection'),
'host_obsessing' => $this->translate('Obsessing')
));
}
public function serviceAction()
{
$errors = array();
$query = $this->backend->select()->from('serviceStatus', array(
'host_name',
'host_state',
'service_description',
'service_handled',
'service_state',
'service_in_downtime',
'service_passive_checks_enabled',
'service_notifications_enabled',
'service_event_handler_enabled',
'service_flap_detection_enabled',
'service_active_checks_enabled',
'service_obsessing',
// also accept all filter-requests from ListView
'service_problem',
'service_severity',
'service_last_check',
'service_state_type',
'host_severity',
'host_address',
'host_last_check'
));
$this->applyQueryFilter($query);
$services = $query->getQuery()->fetchAll();
$comments = $this->backend->select()->from('comment', array(
'comment_internal_id',
'comment_host',
'comment_service'
));
$this->applyQueryFilter($comments);
$uniqueComments = array_keys($this->getUniqueValues($comments->getQuery()->fetchAll(), 'comment_internal_id'));
// populate the view
$this->view->objects = $this->view->services = $services;
$this->view->problems = $this->getProblems($services);
$this->view->comments = $uniqueComments;
$this->view->hostnames = $this->getProperties($services, 'host_name');
$this->view->servicenames = $this->getProperties($services, 'service_description');
$this->view->downtimes = $this->getDowntimes($services);
$this->view->service_states = $this->countStates($services, 'service');
$this->view->host_states = $this->countStates($services, 'host', 'host_name');
$this->view->service_pie = $this->createPie(
$this->view->service_states,
$this->view->getHelper('MonitoringState')->getServiceStateColors(),
mt('monitoring', 'Service State')
);
$this->view->host_pie = $this->createPie(
$this->view->host_states,
$this->view->getHelper('MonitoringState')->getHostStateColors(),
mt('monitoring', 'Host State')
);
$this->view->errors = $errors;
$this->handleConfigurationForm(array(
'service_passive_checks_enabled' => $this->translate('Passive Checks'),
'service_active_checks_enabled' => $this->translate('Active Checks'),
'service_notifications_enabled' => $this->translate('Notifications'),
'service_event_handler_enabled' => $this->translate('Event Handler'),
'service_flap_detection_enabled' => $this->translate('Flap Detection'),
'service_obsessing' => $this->translate('Obsessing'),
));
}
protected function applyQueryFilter($query)
{
$params = clone $this->params;
$modifyFilter = $params->shift('modifyFilter');
$filter = Filter::fromQueryString((string) $params);
if ($modifyFilter) {
$this->view->filterWidget = Widget::create('filterEditor', array(
'filter' => $filter,
'query' => $query
));
}
$this->view->filter = $filter;
$query->applyFilter($filter);
return $query;
}
/**
* Create an array with all unique values as keys.
*
* @param array $values The array containing the objects
* @param $key The key to access
*
* @return array
*/
private function getUniqueValues($values, $key)
{
$unique = array();
foreach ($values as $value) {
if (is_array($value)) {
$unique[$value[$key]] = $value[$key];
} else {
$unique[$value->$key] = $value->$key;
}
}
return $unique;
}
/**
* Get the numbers of problems of the given objects
*
* @param $objects The objects containing the problems
*
* @return int The problem count
*/
private function getProblems($objects)
{
$problems = 0;
foreach ($objects as $object) {
if (property_exists($object, 'host_unhandled_service_count')) {
$problems += $object->host_unhandled_service_count;
} else if (
property_exists($object, 'service_handled') &&
!$object->service_handled &&
$object->service_state > 0
) {
$problems++;
}
}
return $problems;
}
private function countStates($objects, $type = 'host', $unique = null)
{
$known = array();
if ($type === 'host') {
$states = array_fill_keys($this->view->getHelper('MonitoringState')->getHostStateNames(), 0);
} else {
$states = array_fill_keys($this->view->getHelper('MonitoringState')->getServiceStateNames(), 0);
}
foreach ($objects as $object) {
if (isset($unique)) {
if (array_key_exists($object->$unique, $known)) {
continue;
}
$known[$object->$unique] = true;
}
$states[$this->view->monitoringState($object, $type)]++;
}
return $states;
}
private function createPie($states, $colors, $title)
{
$chart = new InlinePie(array_values($states), $title, $colors);
$chart->setLabel(array_keys($states))->setSize(100);
$chart->setTitle($title);
return $chart;
}
private function getComments($objects)
{
$unique = array();
foreach ($objects as $object) {
$unique = array_merge($unique, $this->getUniqueValues($object->comments, 'comment_internal_id'));
}
return array_keys($unique);
}
private function getProperties($objects, $property)
{
$objectnames = array();
foreach ($objects as $object) {
$objectnames[] = $object->$property;
}
return $objectnames;
}
private function getDowntimes($objects)
{
$downtimes = array();
foreach ($objects as $object)
{
if (
(property_exists($object, 'host_in_downtime') && $object->host_in_downtime) ||
(property_exists($object, 'service_in_downtime') && $object->service_in_downtime)
) {
$downtimes[] = true;
}
}
return $downtimes;
}
/**
* Handle the form to edit configuration flags.
*
* @param $flags array The used flags.
*/
private function handleConfigurationForm(array $flags)
{
$this->view->form = $form = new MultiCommandFlagForm($flags);
$this->view->formElements = $form->buildCheckboxes();
$form->setRequest($this->_request);
if ($form->isSubmittedAndValid()) {
// TODO: Handle commands
$changed = $form->getChangedValues();
}
if ($this->_request->isPost() === false) {
$this->view->form->initFromItems($this->view->objects);
}
}
}