Skip to content

Commit

Permalink
Add ido schema and instance availability validation
Browse files Browse the repository at this point in the history
refs #9203
  • Loading branch information
Alexander Fuhr committed May 11, 2015
1 parent cf8376f commit c3b4ea7
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 1 deletion.
63 changes: 63 additions & 0 deletions modules/monitoring/application/forms/Config/BackendConfigForm.php
Expand Up @@ -3,6 +3,10 @@

namespace Icinga\Module\Monitoring\Forms\Config;

use Exception;
use Icinga\Data\ConfigObject;
use Icinga\Data\ResourceFactory;
use Icinga\Web\Form;
use InvalidArgumentException;
use Icinga\Application\Config;
use Icinga\Exception\ConfigurationError;
Expand Down Expand Up @@ -271,4 +275,63 @@ public function createElements(array $formData)
)
);
}

/**
* Validate the ido instance schema resource
*
* @param Form $form
* @param ConfigObject $resourceConfig
*
* @return bool Whether validation succeeded or not
*/
public static function isValidIdoSchema(Form $form, ConfigObject $resourceConfig)
{
try {
$resource = ResourceFactory::createResource($resourceConfig);
$result = $resource->select()->from('icinga_dbversion', array('version'));
$result->fetchOne();
} catch (Exception $e) {
$form->addError(
$form->translate(
'IDO schema validation failed, it looks like that the IDO schema is missing in the given database.'
)
);
return false;
}
return true;
}

/**
* Validate the ido instance availability
*
* @param Form $form
* @param ConfigObject $resourceConfig
*
* @return bool Whether validation succeeded or not
*/
public static function isValidIdoInstance(Form $form, ConfigObject $resourceConfig)
{
$resource = ResourceFactory::createResource($resourceConfig);
$result = $resource->select()->from('icinga_instances', array('instance_name'));
$instances = $result->fetchAll();

if (count($instances) === 1) {
return true;
} elseif (count($instances) > 1) {
$form->addError(
$form->translate(
'WARNING: IDO instance validation failed, because there are multiple instances available.'
)
);
return false;
}

$form->addError(
$form->translate(
'IDO instance validation failed, because there is no IDO instance available.'
)
);

return false;
}
}
11 changes: 10 additions & 1 deletion modules/monitoring/application/forms/Setup/IdoResourcePage.php
Expand Up @@ -3,6 +3,8 @@

namespace Icinga\Module\Monitoring\Forms\Setup;

use Icinga\Data\ConfigObject;
use Icinga\Module\Monitoring\Forms\Config\BackendConfigForm;
use Icinga\Web\Form;
use Icinga\Forms\Config\Resource\DbResourceForm;

Expand Down Expand Up @@ -53,7 +55,14 @@ public function isValid($data)
}

if (false === isset($data['skip_validation']) || $data['skip_validation'] == 0) {
if (false === DbResourceForm::isValidResource($this)) {
$configObject = new ConfigObject($this->getValues());
if (false === DbResourceForm::isValidResource($this, $configObject)) {
$this->addSkipValidationCheckbox();
return false;
} elseif (false === BackendConfigForm::isValidIdoSchema($this, $configObject)) {
$this->addSkipValidationCheckbox();
return false;
} elseif (false === BackendConfigForm::isValidIdoInstance($this, $configObject)) {
$this->addSkipValidationCheckbox();
return false;
}
Expand Down

0 comments on commit c3b4ea7

Please sign in to comment.