Skip to content

Commit

Permalink
Add command send custom notification to monitoring module
Browse files Browse the repository at this point in the history
refs #8644
  • Loading branch information
mxhash committed Mar 12, 2015
1 parent 5270acd commit ddc8dd5
Show file tree
Hide file tree
Showing 9 changed files with 311 additions and 25 deletions.
13 changes: 13 additions & 0 deletions modules/monitoring/application/controllers/HostController.php
Expand Up @@ -6,6 +6,7 @@
use Icinga\Module\Monitoring\Forms\Command\Object\ProcessCheckResultCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleHostCheckCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleHostDowntimeCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\SendCustomNotificationCommandForm;
use Icinga\Module\Monitoring\Object\Host;
use Icinga\Module\Monitoring\Web\Controller\MonitoredObjectController;
use Icinga\Web\Hook;
Expand Down Expand Up @@ -118,4 +119,16 @@ public function processCheckResultAction()
$form->setTitle($this->translate('Submit Passive Host Check Result'));
$this->handleCommandForm($form);
}

/**
* Send a custom notification for host
*/
public function sendCustomNotificationAction()
{
$this->assertPermission('monitoring/command/send-custom-notification');

$form = new SendCustomNotificationCommandForm();
$form->setTitle($this->translate('Send Custom Host Notification'));
$this->handleCommandForm($form);
}
}
17 changes: 17 additions & 0 deletions modules/monitoring/application/controllers/HostsController.php
Expand Up @@ -10,6 +10,7 @@
use Icinga\Module\Monitoring\Forms\Command\Object\RemoveAcknowledgementCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleHostCheckCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleHostDowntimeCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\SendCustomNotificationCommandForm;
use Icinga\Module\Monitoring\Object\Host;
use Icinga\Module\Monitoring\Object\HostList;
use Icinga\Web\Url;
Expand Down Expand Up @@ -157,6 +158,10 @@ public function showAction()
$this->translate('Host State'),
array('#44bb77', '#FF5566', '#E066FF', '#77AAFF')
);
$this->view->sendCustomNotificationLink =
Url::fromRequest()->setPath(
'monitoring/hosts/send-custom-notification'
);
}

protected function createPieChart(array $states, $title, array $colors)
Expand Down Expand Up @@ -215,4 +220,16 @@ public function processCheckResultAction()
$form->setTitle($this->translate('Submit Passive Host Check Results'));
$this->handleCommandForm($form);
}

/**
* Send a custom notification for hosts
*/
public function sendCustomNotificationAction()
{
$this->assertPermission('monitoring/command/send-custom-notification');

$form = new SendCustomNotificationCommandForm();
$form->setTitle($this->translate('Send Custom Host Notification'));
$this->handleCommandForm($form);
}
}
13 changes: 13 additions & 0 deletions modules/monitoring/application/controllers/ServiceController.php
Expand Up @@ -6,6 +6,7 @@
use Icinga\Module\Monitoring\Forms\Command\Object\ProcessCheckResultCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleServiceCheckCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleServiceDowntimeCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\SendCustomNotificationCommandForm;
use Icinga\Module\Monitoring\Object\Service;
use Icinga\Module\Monitoring\Web\Controller\MonitoredObjectController;

Expand Down Expand Up @@ -95,4 +96,16 @@ public function processCheckResultAction()
$form->setTitle($this->translate('Submit Passive Service Check Result'));
$this->handleCommandForm($form);
}

/**
* Send a custom notification for a service
*/
public function sendCustomNotificationAction()
{
$this->assertPermission('monitoring/command/send-custom-notification');

$form = new SendCustomNotificationCommandForm();
$form->setTitle($this->translate('Send Custom Service Notification'));
$this->handleCommandForm($form);
}
}
17 changes: 17 additions & 0 deletions modules/monitoring/application/controllers/ServicesController.php
Expand Up @@ -10,6 +10,7 @@
use Icinga\Module\Monitoring\Forms\Command\Object\RemoveAcknowledgementCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleServiceCheckCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\ScheduleServiceDowntimeCommandForm;
use Icinga\Module\Monitoring\Forms\Command\Object\SendCustomNotificationCommandForm;
use Icinga\Module\Monitoring\Object\Host;
use Icinga\Module\Monitoring\Object\Service;
use Icinga\Module\Monitoring\Object\ServiceList;
Expand Down Expand Up @@ -206,6 +207,10 @@ public function showAction()
$this->translate('Host State'),
array('#44bb77', '#FF5566', '#E066FF', '#77AAFF')
);
$this->view->sendCustomNotificationLink =
Url::fromRequest()->setPath(
'monitoring/services/send-custom-notification'
);
}

protected function createPieChart(array $states, $title, array $colors)
Expand Down Expand Up @@ -264,4 +269,16 @@ public function processCheckResultAction()
$form->setTitle($this->translate('Submit Passive Service Check Results'));
$this->handleCommandForm($form);
}

/**
* Send a custom notification for services
*/
public function sendCustomNotificationAction()
{
$this->assertPermission('monitoring/command/send-custom-notification');

$form = new SendCustomNotificationCommandForm();
$form->setTitle($this->translate('Send Custom Service Notification'));
$this->handleCommandForm($form);
}
}
@@ -0,0 +1,112 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */

namespace Icinga\Module\Monitoring\Forms\Command\Object;

use Icinga\Module\Monitoring\Command\Object\SendCustomNotificationCommand;
use Icinga\Web\Notification;

/**
* Form to send custom notifications
*/
class SendCustomNotificationCommandForm extends ObjectsCommandForm
{
/**
* Initialize this form
*/
public function init()
{
$this->addDescription(
$this->translate(
'This command is used to send custom notifications for hosts or'
. ' services.'
)
);
}

/**
* (non-PHPDoc)
* @see \Icinga\Web\Form::getSubmitLabel() For the method documentation.
*/
public function getSubmitLabel()
{
return $this->translatePlural(
'Send custom notification',
'Send custom notifications',
count($this->objects)
);
}

/**
* (non-PHPDoc)
* @see \Icinga\Web\Form::createElements() For the method documentation.
*/
public function createElements(array $formData = array())
{
$this->addElements(array(
array(
'textarea',
'comment',
array(
'required' => true,
'label' => $this->translate('Comment'),
'description' => $this->translate(
'If you work with other administrators, you may find it useful to share information about the'
. ' the host or service that is having problems. Make sure you enter a brief description of'
. ' what you are doing.'
)
)
),
array(
'checkbox',
'forced',
array(
'label' => $this->translate('Forced'),
'value' => false,
'description' => $this->translate(
'If you check this option, a notification is sent'
. 'regardless of the current time and whether'
. ' notifications are enabled.'
)
)
),
array(
'checkbox',
'broadcast',
array(
'label' => $this->translate('Broadcast'),
'value' => false,
'description' => $this->translate(
'If you check this option, a notification is sent to'
. ' all normal and escalated contacts.'
)
)
)
));
return $this;
}

/**
* (non-PHPDoc)
* @see \Icinga\Web\Form::onSuccess() For the method documentation.
*/
public function onSuccess()
{
foreach ($this->objects as $object) {
/** @var \Icinga\Module\Monitoring\Object\MonitoredObject $object */
$comment = new SendCustomNotificationCommand();
$comment->setObject($object);
$comment->setComment($this->getElement('comment')->getValue());
$comment->setAuthor($this->request->getUser()->getUsername());
$comment->setForced($this->getElement('forced')->isChecked());
$comment->setBroadcast($this->getElement('broadcast')->isChecked());
$this->getTransport($this->request)->send($comment);
}
Notification::success($this->translatePlural(
'Send custom notification..',
'Send custom notifications..',
count($this->objects)
));
return true;
}
}
6 changes: 6 additions & 0 deletions modules/monitoring/application/views/scripts/hosts/show.phtml
Expand Up @@ -31,6 +31,12 @@
null,
array('icon' => 'reply')
); ?></div>
<div><?= $this->qlink(
sprintf($this->translate('Send a custom notification for all %u hosts'), $hostCount),
$sendCustomNotificationLink,
null,
array('icon' => 'comment')
); ?></div>
<?php if (($unhandledCount = count($unhandledObjects)) > 0): ?>
<div>
<h3><?= sprintf(
Expand Down
Expand Up @@ -31,6 +31,12 @@
null,
array('icon' => 'reply')
); ?></div>
<div><?= $this->qlink(
sprintf($this->translate('Send a custom notification for all %u services'), $serviceCount),
$sendCustomNotificationLink,
null,
array('icon' => 'comment')
); ?></div>
<?php if (($unhandledCount = count($unhandledObjects)) > 0): ?>
<div>
<h3><?= sprintf(
Expand Down
@@ -1,35 +1,59 @@
<?php

// We are not interested in notifications for OK or pending objects
if (in_array((int) $object->state, array(0, 99))) {
return;
}

?>
<tr>
<th><?= $this->translate('Notifications') ?></th>
<td>
<?php if ($this->hasPermission('monitoring/command/send-custom-notification')) {
if ($object->getType() === $object::TYPE_HOST) {
$ackLink = $this->href(
'monitoring/host/send-custom-notification',
array('host' => $object->getName())
);
} else {
$ackLink = $this->href(
'monitoring/service/send-custom-notification',
array('host' => $object->getHost()->getName(), 'service' => $object->getName())
);
}
?>
<?= $this->qlink(
$this->translate('Send Custom Notification'),
$ackLink,
null,
array(
'icon' => 'comment',
'data-base-target' => '_self',
'title' => $this->translate(
'Send a custom notification, share information about the'
. ' object to contacts.'
)
)
); ?>
<?php } ?>
<?php
// We are not interested in notifications for OK or pending objects
if (! in_array((int) $object->state, array(0, 99))) {

if ($object->current_notification_number > 0) {
if ((int) $object->current_notification_number === 1) {
$msg = sprintf(
$this->translate('A notication has been sent for this issue %s ago'),
$this->timeSince($object->last_notification)
);
if ($object->current_notification_number > 0) {
if ((int) $object->current_notification_number === 1) {
$msg = sprintf(
$this->translate('A notication has been sent for this issue %s ago'),
$this->timeSince($object->last_notification)
);
} else {
$msg = sprintf(
$this->translate('%s notications have been sent for this issue'),
$object->current_notification_number
) . '<br />' . sprintf(
$this->translate('The last one occured %s ago'),
$this->timeSince($object->last_notification)
);
}
echo '- ' . $msg;
} else {
$msg = sprintf(
$this->translate('%s notications have been sent for this issue'),
$object->current_notification_number
) . '<br />' . sprintf(
$this->translate('The last one occured %s ago'),
$this->timeSince($object->last_notification)
);
echo '('
. $this->translate('No notification has been sent for this issue')
. ')';
}
echo $msg;
} else {
echo $this->translate('No notification has been sent for this issue');
}
?>
</td>
</tr>
</tr>

0 comments on commit ddc8dd5

Please sign in to comment.