From 4d8b6dddf112aee65e941f54c76a2f5ba5916fb4 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Tue, 16 Sep 2014 18:48:07 +0200 Subject: [PATCH] monitoring/commands: Add schedule host downtime command form refs #6593 --- .../ScheduleHostDowntimeCommandForm.php | 93 +++++++++++++++++++ .../ScheduleServiceDowntimeCommandForm.php | 33 ++++--- 2 files changed, 112 insertions(+), 14 deletions(-) create mode 100644 modules/monitoring/application/forms/Command/Object/ScheduleHostDowntimeCommandForm.php diff --git a/modules/monitoring/application/forms/Command/Object/ScheduleHostDowntimeCommandForm.php b/modules/monitoring/application/forms/Command/Object/ScheduleHostDowntimeCommandForm.php new file mode 100644 index 000000000..a56d11a5c --- /dev/null +++ b/modules/monitoring/application/forms/Command/Object/ScheduleHostDowntimeCommandForm.php @@ -0,0 +1,93 @@ +addElements(array( + array( + 'checkbox', + 'all_services', + array( + 'label' => mt('monitoring', 'All Services'), + 'value' => true, + 'description' => mt( + 'monitoring', + 'Schedule downtime for all services on the hosts and the hosts themself.' + ) + ) + ), + array( + 'select', + 'child_hosts', + array( + 'label' => mt('monitoring', 'Child Hosts'), + 'required' => true, + 'multiOptions' => array( + 0 => mt('monitoring', 'Do nothing with child hosts'), + 1 => mt('monitoring', 'Schedule triggered downtime for all child hosts'), + 2 => mt('monitoring', 'Schedule non-triggered downtime for all child hosts') + ), + 'description' => mt( + 'monitoring', + 'Define what should be done with the child hosts of the hosts.' + ) + ) + ) + )); + return $this; + } + + /** + * (non-PHPDoc) + * @see \Icinga\Web\Form::onSuccess() For the method documentation. + */ + public function onSuccess(Request $request) + { + foreach ($this->objects as $object) { + /** @var \Icinga\Module\Monitoring\Object\Host $object */ + $childHosts = (int) $this->getElement('child_hosts')->getValue(); + $allServices = $this->getElement('all_services')->isChecked(); + if ($childHosts === 0) { + $hostDowntime = new ScheduleHostDowntimeCommand(); + if ($allServices === true) { + $hostDowntime->setForAllServices(); + }; + } else { + $hostDowntime = new PropagateHostDowntimeCommand(); + if ($childHosts === 1) { + $hostDowntime->setTriggered(); + } + if ($allServices === true) { + foreach ($object->services as $service) { + $serviceDowntime = new ScheduleServiceDowntimeCommand(); + $serviceDowntime->setObject($service); + $this->scheduleDowntime($serviceDowntime, $request); + } + } + } + $hostDowntime->setObject($object); + $this->scheduleDowntime($hostDowntime, $request); + } + Notification::success(mt('monitoring', 'Scheduling host downtime..')); + return true; + } +} diff --git a/modules/monitoring/application/forms/Command/Object/ScheduleServiceDowntimeCommandForm.php b/modules/monitoring/application/forms/Command/Object/ScheduleServiceDowntimeCommandForm.php index b5d153dd5..508c3eed0 100644 --- a/modules/monitoring/application/forms/Command/Object/ScheduleServiceDowntimeCommandForm.php +++ b/modules/monitoring/application/forms/Command/Object/ScheduleServiceDowntimeCommandForm.php @@ -176,6 +176,23 @@ class ScheduleServiceDowntimeCommandForm extends ObjectsCommandForm return $this; } + public function scheduleDowntime(ScheduleServiceDowntimeCommand $downtime, Request $request) + { + $downtime + ->setComment($this->getElement('comment')->getValue()) + ->setAuthor($request->getUser()->getUsername()) + ->setStart($this->getElement('start')->getValue()->getTimestamp()) + ->setEnd($this->getElement('end')->getValue()->getTimestamp()); + if ($this->getElement('type')->getValue() === self::FLEXIBLE) { + $downtime->setFixed(false); + $downtime->setDuration( + (float) $this->getElement('hours')->getValue() * 3600 + + (float) $this->getElement('minutes')->getValue() * 60 + ); + } + $this->getTransport($request)->send($downtime); + } + /** * (non-PHPDoc) * @see \Icinga\Web\Form::onSuccess() For the method documentation. @@ -185,20 +202,8 @@ class ScheduleServiceDowntimeCommandForm extends ObjectsCommandForm foreach ($this->objects as $object) { /** @var \Icinga\Module\Monitoring\Object\Service $object */ $downtime = new ScheduleServiceDowntimeCommand(); - $downtime - ->setObject($object) - ->setComment($this->getElement('comment')->getValue()) - ->setAuthor($request->getUser()->getUsername()) - ->setStart($this->getElement('start')->getValue()->getTimestamp()) - ->setEnd($this->getElement('end')->getValue()->getTimestamp()); - if ($this->getElement('type')->getValue() === self::FLEXIBLE) { - $downtime->setFixed(false); - $downtime->setDuration( - (float) $this->getElement('hours')->getValue() * 3600 - + (float) $this->getElement('minutes')->getValue() * 60 - ); - } - $this->getTransport($request)->send($downtime); + $downtime->setObject($object); + $this->scheduleDowntime($downtime, $request); } Notification::success(mt('monitoring', 'Scheduling service downtime..')); return true;