From e18b0b0c764652d6f77465082eb474330f43915b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 31 Oct 2019 15:15:03 +0100 Subject: [statistics/baseconfig] Allow per-machine configvar overrides --- .../statistics/baseconfig/getconfig.inc.php | 15 +++++++++ modules-available/statistics/baseconfig/hook.json | 7 ++++ .../statistics/inc/statisticshooks.inc.php | 37 ++++++++++++++++++++++ modules-available/statistics/install.inc.php | 14 ++++++++ .../statistics/lang/de/template-tags.json | 1 + .../statistics/lang/en/template-tags.json | 1 + modules-available/statistics/page.inc.php | 7 ++++ .../statistics/templates/machine-main.html | 13 ++++++++ 8 files changed, 95 insertions(+) create mode 100644 modules-available/statistics/baseconfig/getconfig.inc.php create mode 100644 modules-available/statistics/baseconfig/hook.json create mode 100644 modules-available/statistics/inc/statisticshooks.inc.php (limited to 'modules-available/statistics') diff --git a/modules-available/statistics/baseconfig/getconfig.inc.php b/modules-available/statistics/baseconfig/getconfig.inc.php new file mode 100644 index 00000000..ea351d15 --- /dev/null +++ b/modules-available/statistics/baseconfig/getconfig.inc.php @@ -0,0 +1,15 @@ + $uuid]); +while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + ConfigHolder::add($row['setting'], $row['value'], 500); +} diff --git a/modules-available/statistics/baseconfig/hook.json b/modules-available/statistics/baseconfig/hook.json new file mode 100644 index 00000000..da28ad5d --- /dev/null +++ b/modules-available/statistics/baseconfig/hook.json @@ -0,0 +1,7 @@ +{ + "table": "setting_machine", + "field": "machineuuid", + "locationResolver": "StatisticsHooks::baseconfigLocationResolver", + "tostring": "StatisticsHooks::getBaseconfigName", + "getfallback": "StatisticsHooks::getBaseconfigParent" +} \ No newline at end of file diff --git a/modules-available/statistics/inc/statisticshooks.inc.php b/modules-available/statistics/inc/statisticshooks.inc.php new file mode 100644 index 00000000..ead4917b --- /dev/null +++ b/modules-available/statistics/inc/statisticshooks.inc.php @@ -0,0 +1,37 @@ + $machineuuid]); + } + + public static function getBaseconfigName($machineuuid) + { + self::getRow($machineuuid); + if (self::$row === false) + return false; + return self::$row['hostname'] ? self::$row['hostname'] : self::$row['clientip']; + } + + public static function getBaseconfigParent($machineuuid) + { + return false; // TODO + } + + public static function baseconfigLocationResolver($machineuuid) + { + self::getRow($machineuuid); + if (self::$row === false) + return 0; + return (int)self::$row['locationid']; + } + +} \ No newline at end of file diff --git a/modules-available/statistics/install.inc.php b/modules-available/statistics/install.inc.php index 2bcb6b8d..2831905d 100644 --- a/modules-available/statistics/install.inc.php +++ b/modules-available/statistics/install.inc.php @@ -107,6 +107,16 @@ $res[] = tableCreate('pciid', " PRIMARY KEY (`category`,`id`) "); +// baseconfig override per machine +$res[] = tableCreate('setting_machine', ' + `machineuuid` char(36) CHARACTER SET ascii NOT NULL, + `setting` VARCHAR(28) NOT NULL, + `value` TEXT NOT NULL, + `displayvalue` TEXT NOT NULL, + PRIMARY KEY (`machineuuid`,`setting`), + KEY `setting` (`setting`) +'); + // need trigger? if ($machineCreate === UPDATE_DONE) { $addTrigger = true; @@ -259,5 +269,9 @@ while ($row = $res2->fetch(PDO::FETCH_ASSOC)) { } } +// 2019-10-31: New table for per-machine config override +$res[] = tableAddConstraint('setting_machine', 'machineuuid', 'machine', 'machineuuid', + 'ON UPDATE CASCADE ON DELETE CASCADE'); + // Create response responseFromArray($res); diff --git a/modules-available/statistics/lang/de/template-tags.json b/modules-available/statistics/lang/de/template-tags.json index 4b7ab8df..49e5b998 100644 --- a/modules-available/statistics/lang/de/template-tags.json +++ b/modules-available/statistics/lang/de/template-tags.json @@ -9,6 +9,7 @@ "lang_biosUpdateLink": "Zur Herstellerseite", "lang_biosVersion": "BIOS-Version", "lang_clientList": "Liste ausgew\u00e4hlter Rechner", + "lang_configVars": "Konfigurationsvariablen", "lang_cores": "Kerne", "lang_cpuCores": "CPU-Kerne", "lang_cpuModel": "CPU", diff --git a/modules-available/statistics/lang/en/template-tags.json b/modules-available/statistics/lang/en/template-tags.json index 08b995cb..c2fb194e 100644 --- a/modules-available/statistics/lang/en/template-tags.json +++ b/modules-available/statistics/lang/en/template-tags.json @@ -9,6 +9,7 @@ "lang_biosUpdateLink": "Go to vendor's site", "lang_biosVersion": "BIOS version", "lang_clientList": "List of selected machines", + "lang_configVars": "Config Variables", "lang_cores": "Cores", "lang_cpuCores": "CPU cores", "lang_cpuModel": "CPU", diff --git a/modules-available/statistics/page.inc.php b/modules-available/statistics/page.inc.php index c69198e8..441f0c25 100644 --- a/modules-available/statistics/page.inc.php +++ b/modules-available/statistics/page.inc.php @@ -906,6 +906,13 @@ class Page_Statistics extends Page } $client['rebootcontrol'] = $client['canReboot'] || $client['canShutdown']; } + // Baseconfig + if (Module::get('baseconfig') !== false + && User::hasPermission('.baseconfig.view', (int)$client['locationid'])) { + $cvs = Database::queryFirst('SELECT Count(*) AS cnt FROM setting_machine WHERE machineuuid = :uuid', ['uuid' => $uuid]); + $client['overriddenVars'] = is_array($cvs) ? $cvs['cnt'] : 0; + $client['hasBaseconfig'] = true; + } if (!isset($client['isclient'])) { $client['isclient'] = true; } diff --git a/modules-available/statistics/templates/machine-main.html b/modules-available/statistics/templates/machine-main.html index b1602239..66887499 100644 --- a/modules-available/statistics/templates/machine-main.html +++ b/modules-available/statistics/templates/machine-main.html @@ -176,6 +176,19 @@ {{/rebootcontrol}} + {{#hasBaseconfig}} + + + {{lang_configVars}} + + + + + {{lang_edit}} ({{overriddenVars}}) + + + + {{/hasBaseconfig}} -- cgit v1.2.3-55-g7522