diff --git a/application/forms/AddNodeForm.php b/application/forms/AddNodeForm.php index 11f24f3..df9fe66 100644 --- a/application/forms/AddNodeForm.php +++ b/application/forms/AddNodeForm.php @@ -200,6 +200,11 @@ class AddNodeForm extends QuickForm ), 'validators' => [[new NoDuplicateChildrenValidator($this, $this->bp, $this->parent), true]] ]); + + $this->addHostOverrideCheckbox(); + if ($this->getSentValue('host_override') === '1') { + $this->addHostOverrideElement(); + } } protected function selectService() @@ -258,6 +263,25 @@ class AddNodeForm extends QuickForm ]); } + protected function addHostOverrideCheckbox() + { + $this->addElement('checkbox', 'host_override', [ + 'ignore' => true, + 'class' => 'autosubmit', + 'label' => $this->translate('Override Host State'), + 'description' => $this->translate('Enable host state overrides') + ]); + } + + protected function addHostOverrideElement() + { + $this->addElement('stateOverrides', 'stateOverrides', [ + 'required' => true, + 'label' => $this->translate('State Overrides'), + 'states' => $this->enumHostStateList() + ]); + } + protected function addServiceOverrideCheckbox() { $this->addElement('checkbox', 'service_override', [ @@ -396,6 +420,17 @@ class AddNodeForm extends QuickForm return $res; } + protected function enumHostStateList() + { + $hostStateList = [ + 0 => $this->translate('UP'), + 1 => $this->translate('DOWN'), + 99 => $this->translate('PENDING') + ]; + + return $hostStateList; + } + protected function enumServiceList($host) { $names = $this->backend @@ -501,19 +536,21 @@ class AddNodeForm extends QuickForm { $changes = ProcessChanges::construct($this->bp, $this->session); switch ($this->getValue('node_type')) { + case 'host': case 'service': $stateOverrides = $this->getValue('stateOverrides'); if (! empty($stateOverrides)) { - $services = []; + $childOverrides = []; foreach ($this->getValue('children') as $service) { - $services[$service] = $stateOverrides; + $childOverrides[$service] = $stateOverrides; } $changes->modifyNode($this->parent, [ - 'stateOverrides' => array_merge($this->parent->getStateOverrides(), $services) + 'stateOverrides' => array_merge($this->parent->getStateOverrides(), $childOverrides) ]); } - case 'host': + + // Fallthrough case 'process': if ($this->hasParentNode()) { $changes->addChildrenToNode($this->getValue('children'), $this->parent); diff --git a/application/forms/EditNodeForm.php b/application/forms/EditNodeForm.php index 98596e5..588c6de 100644 --- a/application/forms/EditNodeForm.php +++ b/application/forms/EditNodeForm.php @@ -182,6 +182,14 @@ class EditNodeForm extends QuickForm 'description' => $this->translate('The host for this business process node'), 'validators' => [[new NoDuplicateChildrenValidator($this, $this->bp, $this->parent), true]] )); + + $this->addHostOverrideCheckbox(); + $hostOverrideSent = $this->getSentValue('host_override'); + if ($hostOverrideSent === '1' + || ($hostOverrideSent === null && $this->getElement('host_override')->isChecked()) + ) { + $this->addHostOverrideElement(); + } } protected function selectService() @@ -218,6 +226,27 @@ class EditNodeForm extends QuickForm $this->getElement('hosts')->setValue($this->host); } + protected function addHostOverrideCheckbox() + { + $this->addElement('checkbox', 'host_override', [ + 'ignore' => true, + 'class' => 'autosubmit', + 'value' => ! empty($this->parent->getStateOverrides($this->node->getName())), + 'label' => $this->translate('Override Host State'), + 'description' => $this->translate('Enable host state overrides') + ]); + } + + protected function addHostOverrideElement() + { + $this->addElement('stateOverrides', 'stateOverrides', [ + 'required' => true, + 'states' => $this->enumHostStateList(), + 'value' => $this->parent->getStateOverrides($this->node->getName()), + 'label' => $this->translate('State Overrides') + ]); + } + protected function addServicesElement($host) { $this->addElement('select', 'children', array( @@ -351,6 +380,17 @@ class EditNodeForm extends QuickForm return $res; } + protected function enumHostStateList() + { + $hostStateList = [ + 0 => $this->translate('UP'), + 1 => $this->translate('DOWN'), + 99 => $this->translate('PENDING') + ]; + + return $hostStateList; + } + protected function enumServiceList($host) { $names = $this->backend @@ -447,6 +487,7 @@ class EditNodeForm extends QuickForm $changes->deleteNode($this->node, $this->parent->getName()); switch ($this->getValue('node_type')) { + case 'host': case 'service': $stateOverrides = $this->getValue('stateOverrides') ?: []; if (! empty($stateOverrides)) { @@ -460,7 +501,7 @@ class EditNodeForm extends QuickForm } $changes->modifyNode($this->parent, ['stateOverrides' => $stateOverrides]); - case 'host': + // Fallthrough case 'process': $changes->addChildrenToNode($this->getValue('children'), $this->parent); break; diff --git a/doc/07-State-Overrides.md b/doc/07-State-Overrides.md index 0905346..dfdbaeb 100644 --- a/doc/07-State-Overrides.md +++ b/doc/07-State-Overrides.md @@ -2,7 +2,7 @@ Business processes utilize their children's states to calculate their own state. While you can influence this with [operators](09-Operators.md), it's also possible -to override individual states. (Currently this applies only to service nodes.) +to override individual states. (This applies to host and service nodes.) ## Configuring Overrides