summaryrefslogtreecommitdiffstats
path: root/application/clicommands/LegacyCommand.php
blob: f9784bed9a6718c141c7ee146ebdd6cac0431efe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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,
        ));
    }
}