summaryrefslogtreecommitdiffstats
path: root/application/forms/IcingaCommandForm.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--application/forms/IcingaCommandForm.php137
1 files changed, 137 insertions, 0 deletions
diff --git a/application/forms/IcingaCommandForm.php b/application/forms/IcingaCommandForm.php
new file mode 100644
index 0000000..ba1386b
--- /dev/null
+++ b/application/forms/IcingaCommandForm.php
@@ -0,0 +1,137 @@
+<?php
+
+namespace Icinga\Module\Director\Forms;
+
+use Icinga\Module\Director\Web\Form\DirectorObjectForm;
+
+class IcingaCommandForm extends DirectorObjectForm
+{
+ public function setup()
+ {
+ $this->addObjectTypeElement();
+ if (! $this->hasObjectType()) {
+ return;
+ }
+
+ $this->addElement('select', 'methods_execute', array(
+ 'label' => $this->translate('Command type'),
+ 'multiOptions' => array(
+ null => '- please choose -',
+ $this->translate('Plugin commands') => array(
+ 'PluginCheck' => 'Plugin Check Command',
+ 'PluginNotification' => 'Notification Plugin Command',
+ 'PluginEvent' => 'Event Plugin Command',
+ ),
+ $this->translate('Internal commands') => array(
+ 'IcingaCheck' => 'Icinga Check Command',
+ 'ClusterCheck' => 'Icinga Cluster Check Command',
+ 'ClusterZoneCheck' => 'Icinga Cluster Zone Check Command',
+ 'IdoCheck' => 'Ido Check Command',
+ 'RandomCheck' => 'Random Check Command',
+ )
+ ),
+ 'required' => ! $this->isTemplate(),
+ 'description' => $this->translate(
+ 'Plugin Check commands are what you need when running checks agains'
+ . ' your infrastructure. Notification commands will be used when it'
+ . ' comes to notify your users. Event commands allow you to trigger'
+ . ' specific actions when problems occur. Some people use them for'
+ . ' auto-healing mechanisms, like restarting services or rebooting'
+ . ' systems at specific thresholds'
+ ),
+ 'class' => 'autosubmit'
+ ));
+
+ $nameLabel = $this->isTemplate()
+ ? $this->translate('Name')
+ : $this->translate('Command name');
+
+ $this->addElement('text', 'object_name', array(
+ 'label' => $nameLabel,
+ 'required' => true,
+ 'description' => $this->translate('Identifier for the Icinga command you are going to create')
+ ));
+
+ $this->addImportsElement(false);
+
+ $this->addElement('text', 'command', array(
+ 'label' => $this->translate('Command'),
+ 'required' => ! $this->isTemplate(),
+ 'description' => $this->translate(
+ 'The command Icinga should run. Absolute paths are accepted as provided,'
+ . ' relative paths are prefixed with "PluginDir + ", similar Constant prefixes are allowed.'
+ . ' Spaces will lead to separation of command path and standalone arguments. Please note that'
+ . ' this means that we do not support spaces in plugin names and paths right now.'
+ )
+ ));
+
+ $this->addElement('text', 'timeout', array(
+ 'label' => $this->translate('Timeout'),
+ 'description' => $this->translate(
+ 'Optional command timeout. Allowed values are seconds or durations postfixed with a'
+ . ' specific unit (e.g. 1m or also 3m 30s).'
+ )
+ ));
+
+ $descIsString = [
+ $this->translate('Render the command as a plain string instead of an array.'),
+ $this->translate('If enabled you can not define arguments.'),
+ $this->translate('Disabled by default, and should only be used in rare cases.'),
+ $this->translate('WARNING, this can allow shell script injection via custom variables used in command.'),
+ ];
+
+ $this->addBoolean(
+ 'is_string',
+ array(
+ 'label' => $this->translate('Render as string'),
+ 'description' => join(' ', $descIsString),
+ )
+ );
+
+ $this->addDisabledElement();
+ $this->addZoneSection();
+ $this->setButtons();
+ }
+
+ protected function addZoneSection()
+ {
+ $this->addZoneElement(true);
+
+ $elements = array(
+ 'zone_id',
+ );
+ $this->addDisplayGroup($elements, 'clustering', array(
+ 'decorators' => array(
+ 'FormElements',
+ array('HtmlTag', array('tag' => 'dl')),
+ 'Fieldset',
+ ),
+ 'order' => self::GROUP_ORDER_CLUSTERING,
+ 'legend' => $this->translate('Zone settings')
+ ));
+
+ return $this;
+ }
+
+ protected function enumAllowedTemplates()
+ {
+ $object = $this->object();
+ $tpl = $this->db->enum($object->getTableName());
+ if (empty($tpl)) {
+ return array();
+ }
+
+ $id = $object->get('id');
+
+ if (array_key_exists($id, $tpl)) {
+ unset($tpl[$id]);
+ }
+
+ if (empty($tpl)) {
+ return array();
+ }
+
+ $tpl = array_combine($tpl, $tpl);
+ return $tpl;
+ }
+}