/** * (non-PHPDoc) * @see \Icinga\Web\Form::onSuccess() For the method documentation. */ public function onSuccess() { 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, $this->request); } } } $hostDowntime->setObject($object); $this->scheduleDowntime($hostDowntime, $this->request); } Notification::success($this->translatePlural('Scheduling host downtime..', 'Scheduling host downtimes..', count($this->objects))); return true; }
/** * (non-PHPDoc) * @see \Icinga\Web\Form::onSuccess() For the method documentation. */ public function onSuccess() { $end = $this->getValue('end')->getTimestamp(); if ($end <= $this->getValue('start')->getTimestamp()) { $endElement = $this->_elements['end']; $endElement->setValue($endElement->getValue()->format($endElement->getFormat())); $endElement->addError($this->translate('The end time must be greater than the start time')); return false; } $now = new DateTime(); if ($end <= $now->getTimestamp()) { $endElement = $this->_elements['end']; $endElement->setValue($endElement->getValue()->format($endElement->getFormat())); $endElement->addError($this->translate('A downtime must not be in the past')); return false; } foreach ($this->objects as $object) { /** @var \Icinga\Module\Monitoring\Object\Host $object */ if (($childHostsEl = $this->getElement('child_hosts')) !== null) { $childHosts = (int) $childHostsEl->getValue(); } else { $childHosts = 0; } $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, $this->request); } } } $hostDowntime->setObject($object); $this->scheduleDowntime($hostDowntime, $this->request); } Notification::success($this->translatePlural('Scheduling host downtime..', 'Scheduling host downtimes..', count($this->objects))); return true; }
public function scheduleAction() { if (!$this->getRequest()->isPost()) { return $this->fail('downtime/schedule requires a POST request'); } $hostname = $this->params->get('host'); $host = $this->getHostObject($hostname); // Start is NOW if not set if (null === ($start = $this->params->get('start'))) { $start = time(); } else { $start = ctype_digit($start) ? $start : strtotime($start); } // End is NOW + 15 minutes if not set if (null === ($end = $this->params->get('end'))) { $end = $start + 15 * 60; } else { $end = ctype_digit($end) ? $end : strtotime($end); } // Duration is 20 minutes if not set $duration = $this->params->get('duration', 20 * 60); $fixed = $this->params->get('fixed', false); $comment = $this->params->get('comment', 'System went down for reboot'); $cmd = new ScheduleHostDowntimeCommand(); $cmd->setObject($host)->setComment($comment)->setAuthor($hostname)->setStart($start)->setEnd($end)->setDuration($duration)->setFixed($fixed); $this->getTransport()->send($cmd); $cmd = new ScheduleHostDowntimeCommand(); $cmd->setForAllServices()->setObject($host)->setComment($comment)->setAuthor($hostname)->setStart($start)->setEnd($end)->setDuration($duration)->setFixed($fixed); $this->getTransport()->send($cmd); $this->view->hostname = $hostname; $this->view->duration = $duration; $this->view->comment = $comment; $this->view->start = $start; $this->view->end = $end; if ($this->isJson) { $this->render('schedule-json'); } }