diff --git a/modules/monitoring/application/controllers/HostController.php b/modules/monitoring/application/controllers/HostController.php index a7659726e..ffc7fcdd3 100644 --- a/modules/monitoring/application/controllers/HostController.php +++ b/modules/monitoring/application/controllers/HostController.php @@ -167,6 +167,7 @@ class Monitoring_HostController extends MonitoredObjectController $this->assertPermission('monitoring/command/process-check-result'); $form = new ProcessCheckResultCommandForm(); + $form->setBackend($this->backend); $form->setTitle($this->translate('Submit Passive Host Check Result')); $this->handleCommandForm($form); } diff --git a/modules/monitoring/application/controllers/HostsController.php b/modules/monitoring/application/controllers/HostsController.php index 740b5cb5c..9a753adec 100644 --- a/modules/monitoring/application/controllers/HostsController.php +++ b/modules/monitoring/application/controllers/HostsController.php @@ -226,6 +226,7 @@ class Monitoring_HostsController extends Controller $this->assertPermission('monitoring/command/process-check-result'); $form = new ProcessCheckResultCommandForm(); + $form->setBackend($this->backend); $form->setTitle($this->translate('Submit Passive Host Check Results')); $this->handleCommandForm($form); } diff --git a/modules/monitoring/application/controllers/ServiceController.php b/modules/monitoring/application/controllers/ServiceController.php index d9ed0d36b..cf7c4807c 100644 --- a/modules/monitoring/application/controllers/ServiceController.php +++ b/modules/monitoring/application/controllers/ServiceController.php @@ -122,6 +122,7 @@ class Monitoring_ServiceController extends MonitoredObjectController $this->assertPermission('monitoring/command/process-check-result'); $form = new ProcessCheckResultCommandForm(); + $form->setBackend($this->backend); $form->setTitle($this->translate('Submit Passive Service Check Result')); $this->handleCommandForm($form); } diff --git a/modules/monitoring/application/controllers/ServicesController.php b/modules/monitoring/application/controllers/ServicesController.php index faebcd11c..18c427f86 100644 --- a/modules/monitoring/application/controllers/ServicesController.php +++ b/modules/monitoring/application/controllers/ServicesController.php @@ -242,6 +242,7 @@ class Monitoring_ServicesController extends Controller $this->assertPermission('monitoring/command/process-check-result'); $form = new ProcessCheckResultCommandForm(); + $form->setBackend($this->backend); $form->setTitle($this->translate('Submit Passive Service Check Results')); $this->handleCommandForm($form); } diff --git a/modules/monitoring/application/forms/Command/Object/ProcessCheckResultCommandForm.php b/modules/monitoring/application/forms/Command/Object/ProcessCheckResultCommandForm.php index ec80a539f..0239ab657 100644 --- a/modules/monitoring/application/forms/Command/Object/ProcessCheckResultCommandForm.php +++ b/modules/monitoring/application/forms/Command/Object/ProcessCheckResultCommandForm.php @@ -52,11 +52,7 @@ class ProcessCheckResultCommandForm extends ObjectsCommandForm 'required' => true, 'label' => $this->translate('Status'), 'description' => $this->translate('The state this check result should report'), - 'multiOptions' => $object->getType() === $object::TYPE_HOST ? array( - ProcessCheckResultCommand::HOST_UP => $this->translate('UP', 'icinga.state'), - ProcessCheckResultCommand::HOST_DOWN => $this->translate('DOWN', 'icinga.state'), - ProcessCheckResultCommand::HOST_UNREACHABLE => $this->translate('UNREACHABLE', 'icinga.state') - ) : array( + 'multiOptions' => $object->getType() === $object::TYPE_HOST ? $this->getHostMultiOptions() : array( ProcessCheckResultCommand::SERVICE_OK => $this->translate('OK', 'icinga.state'), ProcessCheckResultCommand::SERVICE_WARNING => $this->translate('WARNING', 'icinga.state'), ProcessCheckResultCommand::SERVICE_CRITICAL => $this->translate('CRITICAL', 'icinga.state'), @@ -115,4 +111,23 @@ class ProcessCheckResultCommandForm extends ObjectsCommandForm return true; } + + /** + * Returns the available host options based on the program version + * + * @return array + */ + protected function getHostMultiOptions() + { + $options = array( + ProcessCheckResultCommand::HOST_UP => $this->translate('UP', 'icinga.state'), + ProcessCheckResultCommand::HOST_DOWN => $this->translate('DOWN', 'icinga.state') + ); + + if (substr($this->getBackend()->getProgramVersion(), 0, 2) !== 'v2') { + $options[ProcessCheckResultCommand::HOST_UNREACHABLE] = $this->translate('UNREACHABLE', 'icinga.state'); + } + + return $options; + } } diff --git a/modules/monitoring/library/Monitoring/Backend/MonitoringBackend.php b/modules/monitoring/library/Monitoring/Backend/MonitoringBackend.php index 012b7c110..6ee534b17 100644 --- a/modules/monitoring/library/Monitoring/Backend/MonitoringBackend.php +++ b/modules/monitoring/library/Monitoring/Backend/MonitoringBackend.php @@ -331,4 +331,14 @@ class MonitoringBackend implements Selectable, Queryable, ConnectionInterface array_push($parts, 'Query', ucfirst(strtolower($query)) . 'Query'); return implode('\\', $parts); } + + /** + * Fetch and return the program version of the current instance + * + * @return string + */ + public function getProgramVersion() + { + return $this->select()->from('programstatus', array('program_version'))->fetchOne(); + } }