summaryrefslogtreecommitdiffstats
path: root/application/forms/Config
diff options
context:
space:
mode:
Diffstat (limited to 'application/forms/Config')
-rw-r--r--application/forms/Config/BackendConfigForm.php112
-rw-r--r--application/forms/Config/GlobalConfigForm.php32
-rw-r--r--application/forms/Config/MonitoringConfigForm.php72
3 files changed, 216 insertions, 0 deletions
diff --git a/application/forms/Config/BackendConfigForm.php b/application/forms/Config/BackendConfigForm.php
new file mode 100644
index 0000000..a9c85c1
--- /dev/null
+++ b/application/forms/Config/BackendConfigForm.php
@@ -0,0 +1,112 @@
+<?php
+/* Icinga Web 2 | (c) 2016 Icinga Development Team | GPLv2+ */
+
+namespace Icinga\Module\Eventdb\Forms\Config;
+
+use Exception;
+use Icinga\Data\ResourceFactory;
+use Icinga\Forms\ConfigForm;
+
+/**
+ * Form for managing the connection to the EventDB backend
+ */
+class BackendConfigForm extends ConfigForm
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function init()
+ {
+ $this->setSubmitLabel($this->translate('Save'));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function createElements(array $formData)
+ {
+ $resources = array();
+ foreach (ResourceFactory::getResourceConfigs() as $name => $config) {
+ if ($config->type === 'db') {
+ $resources[] = $name;
+ }
+ }
+
+ $this->addElement(
+ 'select',
+ 'backend_resource',
+ array(
+ 'description' => $this->translate('The resource to use'),
+ 'label' => $this->translate('Resource'),
+ 'multiOptions' => array_combine($resources, $resources),
+ 'required' => true
+ )
+ );
+
+ if (isset($formData['skip_validation']) && $formData['skip_validation']) {
+ $this->addSkipValidationCheckbox();
+ }
+ }
+
+ /**
+ * Return whether the given values are valid
+ *
+ * @param array $formData The data to validate
+ *
+ * @return bool
+ */
+ public function isValid($formData)
+ {
+ if (! parent::isValid($formData)) {
+ return false;
+ }
+
+ if (($el = $this->getElement('skip_validation')) === null || ! $el->isChecked()) {
+ $resourceConfig = ResourceFactory::getResourceConfig($this->getValue('backend_resource'));
+
+ if (! $this->isValidEventDbSchema($resourceConfig)) {
+ if ($el === null) {
+ $this->addSkipValidationCheckbox();
+ }
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public function isValidEventDbSchema($resourceConfig)
+ {
+ try {
+ $db = ResourceFactory::createResource($resourceConfig);
+ $db->select()->from('event', array('id'))->fetchOne();
+ } catch (Exception $_) {
+ $this->error($this->translate(
+ 'Cannot find the EventDB schema. Please verify that the given database '
+ . 'contains the schema and that the configured user has access to it.'
+ ));
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Add a checkbox to the form by which the user can skip the schema validation
+ */
+ protected function addSkipValidationCheckbox()
+ {
+ $this->addElement(
+ 'checkbox',
+ 'skip_validation',
+ array(
+ 'description' => $this->translate(
+ 'Check this to not to validate the EventDB schema of the chosen resource'
+ ),
+ 'ignore' => true,
+ 'label' => $this->translate('Skip Validation'),
+ 'order' => 0
+ )
+ );
+ }
+}
diff --git a/application/forms/Config/GlobalConfigForm.php b/application/forms/Config/GlobalConfigForm.php
new file mode 100644
index 0000000..5b4bf2a
--- /dev/null
+++ b/application/forms/Config/GlobalConfigForm.php
@@ -0,0 +1,32 @@
+<?php
+/* Icinga Web 2 - EventDB | (c) 2018 Icinga Development Team | GPLv2+ */
+
+namespace Icinga\Module\Eventdb\Forms\Config;
+
+use Icinga\Forms\ConfigForm;
+
+class GlobalConfigForm extends ConfigForm
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function init()
+ {
+ $this->setSubmitLabel($this->translate('Save'));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function createElements(array $formData)
+ {
+ $this->addElement(
+ 'text',
+ 'global_default_filter',
+ array(
+ 'description' => $this->translate('Filter to be used by the menu link for EventDB by default'),
+ 'label' => $this->translate('Default Filter')
+ )
+ );
+ }
+}
diff --git a/application/forms/Config/MonitoringConfigForm.php b/application/forms/Config/MonitoringConfigForm.php
new file mode 100644
index 0000000..e1c7638
--- /dev/null
+++ b/application/forms/Config/MonitoringConfigForm.php
@@ -0,0 +1,72 @@
+<?php
+/* Icinga Web 2 - EventDB | (c) 2017 Icinga Development Team | GPLv2+ */
+
+namespace Icinga\Module\Eventdb\Forms\Config;
+
+use Icinga\Forms\ConfigForm;
+
+/**
+ * Form for managing settings for the integration into monitoring module
+ */
+class MonitoringConfigForm extends ConfigForm
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function init()
+ {
+ $this->setSubmitLabel($this->translate('Save'));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function createElements(array $formData)
+ {
+ $this->addElement(
+ 'text',
+ 'monitoring_custom_var',
+ array(
+ 'description' => $this->translate('Name of the custom variable to enable EventDB integration for (usually "edb")'),
+ 'label' => $this->translate('Custom Variable')
+ )
+ );
+
+ $this->addElement(
+ 'checkbox',
+ 'monitoring_always_on_host',
+ array(
+ 'description' => $this->translate('Always enable the integration on hosts, even when the custom variable is not set'),
+ 'label' => $this->translate('Always enable for hosts')
+ )
+ );
+
+ $this->addElement(
+ 'checkbox',
+ 'monitoring_always_on_service',
+ array(
+ 'description' => $this->translate('Always enable the integration on services, even when the custom variable is not set'),
+ 'label' => $this->translate('Always enable for services')
+ )
+ );
+
+ $this->addElement(
+ 'checkbox',
+ 'monitoring_detailview_disable',
+ array(
+ 'description' => $this->translate('Disable the detail view inside the monitoring module'),
+ 'label' => $this->translate('Disable the detail view')
+ )
+ );
+
+ $this->addElement(
+ 'text',
+ 'monitoring_detailview_filter',
+ array(
+ 'description' => $this->translate('Filter events in the detail view area inside the monitoring module'),
+ 'label' => $this->translate('Filter the detail view'),
+ 'value' => 'ack=0', // Also see DetailviewExtension
+ )
+ );
+ }
+}