diff options
Diffstat (limited to 'application/clicommands')
-rw-r--r-- | application/clicommands/ConvertCommand.php | 104 | ||||
-rw-r--r-- | application/clicommands/LegacyCommand.php | 92 |
2 files changed, 196 insertions, 0 deletions
diff --git a/application/clicommands/ConvertCommand.php b/application/clicommands/ConvertCommand.php new file mode 100644 index 0000000..a05538b --- /dev/null +++ b/application/clicommands/ConvertCommand.php @@ -0,0 +1,104 @@ +<?php +/* TopLevelView module for Icingaweb2 - Copyright (c) 2017 Icinga Development Team <info@icinga.com> */ + +namespace Icinga\Module\Toplevelview\Clicommands; + +use Icinga\Exception\ConfigurationError; +use Icinga\Module\Toplevelview\Command; +use Icinga\Module\Toplevelview\Config\ConfigEmitter; +use Icinga\Module\Toplevelview\Legacy\LegacyDbHelper; +use Icinga\Module\Toplevelview\ViewConfig; +use Zend_Db_Adapter_Pdo_Sqlite; + +/** + * Converts a TopLevelView database into the new YAML configuration format + */ +class ConvertCommand extends Command +{ + protected $dbConnections = array(); + + public function init() + { + parent::init(); + + if (! extension_loaded('pdo_sqlite')) { + throw new ConfigurationError('You need the PHP extension "pdo_sqlite" in order to convert TopLevelView'); + } + } + + /** + * List all hierarchies in the database + * + * Arguments: + * --db <file> SQLite3 data from from old TopLevelView module + */ + public function listAction() + { + $dbFile = $this->params->getRequired('db'); + $db = $this->sqlite($dbFile); + + $helper = new LegacyDbHelper($db); + foreach ($helper->fetchHierarchies() as $root) { + printf("[%d] %s\n", $root['id'], $root['name']); + } + } + + /** + * Generate a YAML config file for Icinga Web 2 module + * + * Arguments: + * --db <file> SQLite3 data from from old TopLevelView module + * --id <id> Database id to export (see list) + * --output <file> Write to file (default '-' for stdout) + * --name <name> If name is specified instead of file, + * config is saved under that name + */ + public function convertAction() + { + $dbFile = $this->params->getRequired('db'); + $db = $this->sqlite($dbFile); + + $id = $this->params->getRequired('id'); + + $output = $this->params->get('output', null); + $name = $this->params->get('name', null); + $format = $this->params->get('format', 'yaml'); + + $helper = new LegacyDbHelper($db, $this->monitoringBackend()); + $tree = $helper->fetchTree($id); + + $emitter = ConfigEmitter::fromLegacyTree($tree); + + if ($name !== null and $output === null) { + $viewConfig = new ViewConfig(); + $viewConfig->setConfigDir(); + $viewConfig->setFormat(ViewConfig::FORMAT_YAML); + $viewConfig->setName($name); + $viewConfig->setText($emitter->emitYAML($format)); + $viewConfig->store(); + printf("Saved as config %s\n", $name); + exit(0); + } + + $text = $emitter->emit($format); + if ($output === null || $output === '-') { + echo $text; + } else { + file_put_contents($output, $text); + } + } + + /** + * Sets up the Zend PDO resource for SQLite + * + * @param string $file + * + * @return Zend_Db_Adapter_Pdo_Sqlite + */ + protected function sqlite($file) + { + return new Zend_Db_Adapter_Pdo_Sqlite(array( + 'dbname' => $file, + )); + } +} diff --git a/application/clicommands/LegacyCommand.php b/application/clicommands/LegacyCommand.php new file mode 100644 index 0000000..f9784be --- /dev/null +++ b/application/clicommands/LegacyCommand.php @@ -0,0 +1,92 @@ +<?php +/* TopLevelView module for Icingaweb2 - Copyright (c) 2021 Icinga Development Team <info@icinga.com> */ + +namespace Icinga\Module\Toplevelview\Clicommands; + +use Icinga\Exception\ConfigurationError; +use Icinga\Module\Monitoring\Backend\MonitoringBackend; +use Icinga\Module\Toplevelview\Command; +use Icinga\Module\Toplevelview\Legacy\LegacyDbHelper; +use Zend_Db_Adapter_Pdo_Sqlite; + +/** + * Tools for the legacy DB + */ +class LegacyCommand extends Command +{ + public function init() + { + parent::init(); + + if (! extension_loaded('pdo_sqlite')) { + throw new ConfigurationError('You need the PHP extension "pdo_sqlite" in order to convert TopLevelView'); + } + } + + /** + * Delete unreferenced objects from the database + * + * Arguments: + * --db <file> SQLite3 data from from old TopLevelView module + * --noop Only show counts, don't delete + */ + public function cleanupAction() + { + $dbFile = $this->params->getRequired('db'); + $noop = $this->params->shift('noop'); + $db = $this->sqlite($dbFile); + + $helper = new LegacyDbHelper($db); + + $result = $helper->cleanupUnreferencedObjects($noop); + foreach ($result as $type => $c) { + printf("%s: %d\n", $type, $c); + } + } + + /** + * Migrate database ids from an IDO to another IDO + * + * Arguments: + * --db <file> SQLite3 data from from old TopLevelView module + * --target <file> Target database path (will be overwritten) + * --old <backend> OLD IDO backend (configured in monitoring module) + * --new <backend> New IDO backend (configured in monitoring module) (optional) + * --purge Remove unresolvable data during update (see log) + */ + public function idomigrateAction() + { + $dbFile = $this->params->getRequired('db'); + $old = $this->params->getRequired('old'); + $target = $this->params->getRequired('target'); + $new = $this->params->get('new'); + $purge = $this->params->shift('purge'); + + $db = $this->sqlite($dbFile); + + $helper = new LegacyDbHelper($db, MonitoringBackend::instance($new)); + $helper->setOldBackend(MonitoringBackend::instance($old)); + + // Use the copy as db + $helper->setDb($helper->copySqliteDb($db, $target)); + + $result = $helper->migrateObjectIds(false, $purge); + foreach ($result as $type => $c) { + printf("%s: %d\n", $type, $c); + } + } + + /** + * Sets up the Zend PDO resource for SQLite + * + * @param string $file + * + * @return Zend_Db_Adapter_Pdo_Sqlite + */ + protected function sqlite($file) + { + return new Zend_Db_Adapter_Pdo_Sqlite(array( + 'dbname' => $file, + )); + } +} |