From e92f67936eaae163aa2ac207384bddf8f483d85c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 26 Feb 2018 10:32:56 +0100 Subject: [dnbd3] Add permissions --- modules-available/dnbd3/page.inc.php | 38 +++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 1fa38805..d27afe01 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -11,8 +11,10 @@ class Page_Dnbd3 extends Page Message::addError('main.no-permission'); Util::redirect('?do=Main'); } + $action = Request::post('action', false, 'string'); if ($action === 'refresh') { + User::assertPermission('refresh'); Dnbd3Util::updateServerStatus(); } elseif ($action === 'delserver') { $this->deleteServer(); @@ -37,6 +39,7 @@ class Page_Dnbd3 extends Page Message::addError('not-automatic-server', $server['ip']); return; } + User::assertPermission('configure.proxy'); $bgr = Request::post('bgr', false, 'bool'); $firewall = Request::post('firewall', false, 'bool'); $overrideIp = false; @@ -73,6 +76,7 @@ class Page_Dnbd3 extends Page private function toggleUsage() { + User::assertPermission('toggle-usage'); $enabled = Request::post('enabled', false, 'bool'); $nfs = Request::post('with-nfs', false, 'bool'); $task = Dnbd3::setEnabled($enabled); @@ -83,6 +87,11 @@ class Page_Dnbd3 extends Page private function saveServerLocations() { $server = $this->getServerById(); + if (isset($server['machineuuid'])) { + User::assertPermission('configure.proxy'); + } else { + User::assertPermission('configure.external'); + } $locids = Request::post('location', [], 'array'); if (empty($locids)) { Database::exec('DELETE FROM dnbd3_server_x_location WHERE serverid = :serverid', @@ -99,6 +108,7 @@ class Page_Dnbd3 extends Page private function addServer() { + User::assertPermission('configure.external'); $ip = Request::post('newip', false, 'string'); if ($ip === false) { Message::addError('main.parameter-missing', 'ip'); @@ -129,7 +139,10 @@ class Page_Dnbd3 extends Page if ($server['fixedip'] === '') return; if (!is_null($server['machineuuid'])) { + User::assertPermission('configure.proxy'); RunMode::setRunMode($server['machineuuid'], 'dnbd3', null, null, null); + } else { + User::assertPermission('configure.external'); } Database::exec('DELETE FROM dnbd3_server WHERE serverid = :serverid', array('serverid' => $server['serverid'])); @@ -156,6 +169,7 @@ class Page_Dnbd3 extends Page private function showServerList() { + User::assertPermission('view.list'); $dynClients = RunMode::getForMode(Page::getModule(), 'proxy', true, true); $res = Database::simpleQuery('SELECT s.serverid, s.machineuuid, s.fixedip, s.lastseen AS dnbd3lastseen, s.uptime, s.totalup, s.totaldown, s.clientcount, s.disktotal, s.diskfree, Count(sxl.locationid) AS locations, @@ -166,6 +180,8 @@ class Page_Dnbd3 extends Page $servers = array(); $sort = array(); $NOW = time(); + $permExt = User::hasPermission('configure.external'); + $permRunmode = User::hasPermission('configure.proxy'); while ($server = $res->fetch(PDO::FETCH_ASSOC)) { if (isset($dynClients[$server['machineuuid']])) { $server += $dynClients[$server['machineuuid']]; @@ -200,6 +216,10 @@ class Page_Dnbd3 extends Page } else { $sort[] = $server['fixedip'] . '.' . $server['machineuuid']; } + // Permission to edit + if (!($permExt && is_null($server['machineuuid'])) && !($permRunmode && !is_null($server['machineuuid']))) { + $server['edit_disabled'] = 'disabled'; + } $servers[] = $server; } foreach ($dynClients as $server) { @@ -208,20 +228,23 @@ class Page_Dnbd3 extends Page Database::exec('INSERT INTO dnbd3_server (machineuuid) VALUES (:uuid)', array('uuid' => $server['machineuuid'])); } array_multisort($sort, SORT_ASC, $servers); - Render::addTemplate('page-serverlist', array( + $data = array( 'list' => $servers, 'enabled' => Dnbd3::isEnabled(), 'enabled_checked_s' => Dnbd3::isEnabled() ? 'checked' : '', 'nfs_checked_s' => Dnbd3::hasNfsFallback() ? 'checked' : '', 'rebootcontrol' => Module::isAvailable('rebootcontrol', false) - )); + ); + Permission::addGlobalTags($data['perms'], null, ['view.details', 'refresh', 'toggle-usage', 'configure.proxy', 'configure.external']); + Render::addTemplate('page-serverlist', $data); } private function showProxyDetails() { + User::assertPermission('view.details'); $server = $this->getServerById(); Render::addTemplate('page-proxy-header', $server); - $stats = Dnbd3Rpc::query($server['ip'], 5003,true, true, false, true); + $stats = Dnbd3Rpc::query($server['ip'], 5003, true, true, false, true); if (!is_array($stats) || !isset($stats['runId'])) { Message::addError('server-unreachable'); return; @@ -230,8 +253,8 @@ class Page_Dnbd3 extends Page $stats['bytesReceived_s'] = Util::readableFileSize($stats['bytesReceived']); $stats['uptime_s'] = floor($stats['uptime'] / 86400) . 'd ' . gmdate('H:i:s', $stats['uptime']); Render::addTemplate('page-proxy-stats', $stats); - // TODO $images = Dnbd3Rpc::query($server['ip'], 5003,false, false, true); - $confAlts = Dnbd3Rpc::query($server['ip'], 5003,false, false, false, false, true, true); + // TODO $images = Dnbd3Rpc::query($server['ip'], 5003, false, false, true); + $confAlts = Dnbd3Rpc::query($server['ip'], 5003, false, false, false, false, true, true); $ips = array(); $sort = array(); foreach ($stats['clients'] as &$c) { @@ -293,6 +316,11 @@ class Page_Dnbd3 extends Page private function showServerLocationEdit() { $server = $this->getServerById(); + if (isset($server['machineuuid'])) { + User::assertPermission('configure.proxy'); + } else { + User::assertPermission('configure.external'); + } // Get selected ones $res = Database::simpleQuery('SELECT locationid FROM dnbd3_server_x_location WHERE serverid = :serverid', array('serverid' => $server['serverid'])); -- cgit v1.2.3-55-g7522 From bf1c0558f7afb4a6bf1716d533b901f51f60fa4d Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 27 Feb 2018 14:35:01 +0100 Subject: [dnbd3] Implement permissions --- modules-available/dnbd3/hooks/runmode/config.json | 3 +- modules-available/dnbd3/page.inc.php | 78 +++++++++++++++------- .../dnbd3/permissions/permissions.json | 2 +- .../dnbd3/templates/page-serverlist.html | 9 +-- 4 files changed, 61 insertions(+), 31 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/hooks/runmode/config.json b/modules-available/dnbd3/hooks/runmode/config.json index a3f6d01f..683e0280 100644 --- a/modules-available/dnbd3/hooks/runmode/config.json +++ b/modules-available/dnbd3/hooks/runmode/config.json @@ -4,5 +4,6 @@ "noSysconfig": true, "systemdDefaultTarget": "dnbd3-proxy", "allowGenericEditor": true, - "deleteUrlSnippet": "dummyparam=" + "deleteUrlSnippet": "dummyparam=", + "permission": ".dnbd3.configure.proxy" } \ No newline at end of file diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index d27afe01..afcb9b2c 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -39,7 +39,7 @@ class Page_Dnbd3 extends Page Message::addError('not-automatic-server', $server['ip']); return; } - User::assertPermission('configure.proxy'); + $this->assertPermission($server); $bgr = Request::post('bgr', false, 'bool'); $firewall = Request::post('firewall', false, 'bool'); $overrideIp = false; @@ -87,11 +87,7 @@ class Page_Dnbd3 extends Page private function saveServerLocations() { $server = $this->getServerById(); - if (isset($server['machineuuid'])) { - User::assertPermission('configure.proxy'); - } else { - User::assertPermission('configure.external'); - } + $this->assertPermission($server); $locids = Request::post('location', [], 'array'); if (empty($locids)) { Database::exec('DELETE FROM dnbd3_server_x_location WHERE serverid = :serverid', @@ -136,13 +132,11 @@ class Page_Dnbd3 extends Page private function deleteServer() { $server = $this->getServerById(); + $this->assertPermission($server); if ($server['fixedip'] === '') return; if (!is_null($server['machineuuid'])) { - User::assertPermission('configure.proxy'); RunMode::setRunMode($server['machineuuid'], 'dnbd3', null, null, null); - } else { - User::assertPermission('configure.external'); } Database::exec('DELETE FROM dnbd3_server WHERE serverid = :serverid', array('serverid' => $server['serverid'])); @@ -172,7 +166,7 @@ class Page_Dnbd3 extends Page User::assertPermission('view.list'); $dynClients = RunMode::getForMode(Page::getModule(), 'proxy', true, true); $res = Database::simpleQuery('SELECT s.serverid, s.machineuuid, s.fixedip, s.lastseen AS dnbd3lastseen, - s.uptime, s.totalup, s.totaldown, s.clientcount, s.disktotal, s.diskfree, Count(sxl.locationid) AS locations, + s.uptime, s.totalup, s.totaldown, s.clientcount, s.disktotal, s.diskfree, GROUP_CONCAT(sxl.locationid) AS locations, s.errormsg FROM dnbd3_server s LEFT JOIN dnbd3_server_x_location sxl USING (serverid) @@ -180,10 +174,22 @@ class Page_Dnbd3 extends Page $servers = array(); $sort = array(); $NOW = time(); - $permExt = User::hasPermission('configure.external'); - $permRunmode = User::hasPermission('configure.proxy'); + $externalAllowed = User::hasPermission('configure.external'); + $locsRunmode = User::getAllowedLocations('configure.proxy'); while ($server = $res->fetch(PDO::FETCH_ASSOC)) { - if (isset($dynClients[$server['machineuuid']])) { + if (!is_null($server['machineuuid'])) { + // Auto proxy + if (!isset($dynClients[$server['machineuuid']])) { + // Not in runmode dnbd3!? + if ($NOW - $server['dnbd3lastseen'] > 660) { + // Also seems to be down - delete + Database::exec('DELETE FROM dnbd3_server WHERE serverid = :serverid', + array('serverid' => $server['serverid'])); + continue; + } + // Not in runmode but (still?) up -- show + $server += ['locationid' => null, 'hostname' => '']; + } $server += $dynClients[$server['machineuuid']]; unset($dynClients[$server['machineuuid']]); } @@ -211,21 +217,35 @@ class Page_Dnbd3 extends Page $server['slxOk'] = true; } } + if (is_null($server['locations'])) { + $server['locations'] = 0; + } else { + $locations = explode(',', $server['locations']); + $server['locations'] = count($locations); + } + // Permission to edit + if (is_null($server['machineuuid'])) { + if (!$externalAllowed) { + $server['edit_disabled'] = 'disabled'; + } + } else { + if (!array_key_exists('locationid', $server) || !in_array($server['locationid'], $locsRunmode)) { + $server['edit_disabled'] = 'disabled'; + } + } + // Array for sorting if ($server['self']) { $sort[] = '---'; } else { $sort[] = $server['fixedip'] . '.' . $server['machineuuid']; } - // Permission to edit - if (!($permExt && is_null($server['machineuuid'])) && !($permRunmode && !is_null($server['machineuuid']))) { - $server['edit_disabled'] = 'disabled'; - } $servers[] = $server; } foreach ($dynClients as $server) { + $server['edit_disabled'] = 'disabled'; $servers[] = $server; $sort[] = '-' . $server['machineuuid']; - Database::exec('INSERT INTO dnbd3_server (machineuuid) VALUES (:uuid)', array('uuid' => $server['machineuuid'])); + Database::exec('INSERT IGNORE INTO dnbd3_server (machineuuid) VALUES (:uuid)', array('uuid' => $server['machineuuid'])); } array_multisort($sort, SORT_ASC, $servers); $data = array( @@ -316,11 +336,7 @@ class Page_Dnbd3 extends Page private function showServerLocationEdit() { $server = $this->getServerById(); - if (isset($server['machineuuid'])) { - User::assertPermission('configure.proxy'); - } else { - User::assertPermission('configure.external'); - } + $this->assertPermission($server); // Get selected ones $res = Database::simpleQuery('SELECT locationid FROM dnbd3_server_x_location WHERE serverid = :serverid', array('serverid' => $server['serverid'])); @@ -356,14 +372,14 @@ class Page_Dnbd3 extends Page Message::addError('main.parameter-missing', 'server'); Util::redirect('?do=dnbd3'); } - $server = Database::queryFirst('SELECT s.serverid, s.machineuuid, s.fixedip, m.clientip, m.hostname + $server = Database::queryFirst('SELECT s.serverid, s.machineuuid, s.fixedip, m.clientip, m.hostname, m.locationid FROM dnbd3_server s LEFT JOIN machine m USING (machineuuid) WHERE s.serverid = :serverId', compact('serverId')); if ($server === false) { if (AJAX) die('Invalid server id'); - Message::addError('server-non-existent', 'server'); + Message::addError('server-non-existent', $serverId); Util::redirect('?do=dnbd3'); } if (!is_null($server['fixedip'])) { @@ -376,6 +392,15 @@ class Page_Dnbd3 extends Page return $server; } + private function assertPermission($server) + { + if (isset($server['machineuuid'])) { + User::assertPermission('configure.proxy', $server['locationid'], '?do=dnbd3'); + } else { + User::assertPermission('configure.external', null, '?do=dnbd3'); + } + } + /* * AJAX */ @@ -399,6 +424,7 @@ class Page_Dnbd3 extends Page private function ajaxServerTest() { + User::assertPermission('configure.external'); Header('Content-Type: application/json; charset=utf-8'); $ip = Request::post('ip', false, 'string'); if ($ip === false) @@ -435,6 +461,7 @@ class Page_Dnbd3 extends Page echo 'Not automatic server.'; return; } + $this->assertPermission($server); $rm = RunMode::getForMode(Page::getModule(), 'proxy', false, true); if (!isset($rm[$server['machineuuid']])) { echo 'Error: RunMode entry missing.'; @@ -451,6 +478,7 @@ class Page_Dnbd3 extends Page if (!isset($server['machineuuid'])) { die('Not automatic server.'); } + $this->assertPermission($server); if (!Module::isAvailable('rebootcontrol')) { die('No rebootcontrol'); } diff --git a/modules-available/dnbd3/permissions/permissions.json b/modules-available/dnbd3/permissions/permissions.json index 5e16b290..1939e32a 100644 --- a/modules-available/dnbd3/permissions/permissions.json +++ b/modules-available/dnbd3/permissions/permissions.json @@ -12,7 +12,7 @@ "location-aware": false }, "configure.proxy": { - "location-aware": false + "location-aware": true }, "configure.external": { "location-aware": false diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html index 118da8d2..a51e9723 100644 --- a/modules-available/dnbd3/templates/page-serverlist.html +++ b/modules-available/dnbd3/templates/page-serverlist.html @@ -36,8 +36,9 @@

{{lang_serverList}} -

@@ -139,18 +140,18 @@ {{#rebootcontrol}} {{/rebootcontrol}} {{/machineuuid}} {{^self}} - -- cgit v1.2.3-55-g7522 From 02111ed9a4935baf6c1f2968e50daf1b663702fe Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 20 Mar 2018 11:30:53 +0100 Subject: [dnbd3] Redesign proxy detail view, add image list --- modules-available/dnbd3/lang/de/template-tags.json | 14 ++++- modules-available/dnbd3/lang/en/template-tags.json | 8 +++ modules-available/dnbd3/page.inc.php | 33 +++++++---- .../dnbd3/templates/page-proxy-altservers.html | 12 ++-- .../dnbd3/templates/page-proxy-clients.html | 69 ++++++++++++++++------ .../dnbd3/templates/page-proxy-config.html | 2 +- .../dnbd3/templates/page-proxy-header.html | 3 +- .../dnbd3/templates/page-proxy-images.html | 31 ++++++++++ .../dnbd3/templates/page-proxy-loclist.html | 27 --------- .../dnbd3/templates/page-proxy-stats.html | 26 ++++++-- 10 files changed, 152 insertions(+), 73 deletions(-) create mode 100644 modules-available/dnbd3/templates/page-proxy-images.html delete mode 100644 modules-available/dnbd3/templates/page-proxy-loclist.html (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/lang/de/template-tags.json b/modules-available/dnbd3/lang/de/template-tags.json index 5406f1b5..4f3116a0 100644 --- a/modules-available/dnbd3/lang/de/template-tags.json +++ b/modules-available/dnbd3/lang/de/template-tags.json @@ -10,12 +10,14 @@ "lang_client": "Client", "lang_clientCount": "Clients", "lang_clientList": "Liste der Clients", + "lang_clients": "Clients", "lang_clientsByLocation": "Clients nach Raum\/Ort", "lang_comment": "Kommentar", + "lang_complete": "Komplett", "lang_count": "Anzahl", "lang_disabled": "Deaktiviert", "lang_diskFree": "Freier Speicher", - "lang_dnbd3IntroText": "DNBD3 ist ein verteiltes Speichersystem speziell f\u00fcr die Anforderungen von bwLehrpool. Erst in Verbindung mit mindestens einem Proxy (zus\u00e4tzlich zum Satellitenserver) kann das System seine Geschwindigkeitsvorteile gegen\u00fcber NFS\/CIFS ausspielen. F\u00fcr schlecht angebundene Poolr\u00e4ume empfiehlt sich jeweils ein eigener Proxy-Server.\r\nBitte beachten Sie die Hinweise im Wiki.", + "lang_dnbd3IntroText": "DNBD3 ist ein verteiltes Speichersystem speziell f\u00fcr die Anforderungen von bwLehrpool. Erst in Verbindung mit mindestens einem Proxy (zus\u00e4tzlich zum Satellitenserver) kann das System seine Geschwindigkeitsvorteile gegen\u00fcber NFS\/CIFS ausspielen. F\u00fcr schlecht angebundene Poolr\u00e4ume empfiehlt sich jeweils ein eigener Proxy-Server. Bitte beachten Sie die Hinweise im Wiki.", "lang_dnbd3Management": "DNBD3 Verwaltung", "lang_dnbd3Status": "DNBD3 Status", "lang_editProxyHeading": "Proxy-Einstellungen bearbeiten", @@ -24,11 +26,13 @@ "lang_enterIpOfServer": "Bitte geben Sie die IP-Adresse des hinzuzuf\u00fcgenden Servers ein", "lang_externalServer": "Externer DNBD3-Server", "lang_externalServerAdd": "Externen Server hinzuf\u00fcgen", - "lang_externalServerHelp": "Ein externer Server wird nicht \u00fcber den Satellitenserver konfiguriert und verwaltet. Das Installieren, Einrichten und ggf. Aktualisieren der DNBD3-Serversoftware muss manuell durchgef\u00fchrt werden.\r\nDies bietet mehr Flexibilit\u00e4t bei der Konfiguration und Anpassung, z.B. bei der Verwendung von RAID- oder bcache-Setups, oder wenn der DNBD3-Server auf einer Maschine laufen soll, die noch andere Services bereitstellt.\r\nWeitere Informationen dazu finden Sie im Wiki.", + "lang_externalServerHelp": "Ein externer Server wird nicht \u00fcber den Satellitenserver konfiguriert und verwaltet. Das Installieren, Einrichten und ggf. Aktualisieren der DNBD3-Serversoftware muss manuell durchgef\u00fchrt werden. Dies bietet mehr Flexibilit\u00e4t bei der Konfiguration und Anpassung, z.B. bei der Verwendung von RAID- oder bcache-Setups, oder wenn der DNBD3-Server auf einer Maschine laufen soll, die noch andere Services bereitstellt. Weitere Informationen dazu finden Sie im Wiki.", "lang_firewallInfo": "Wird ein Proxy auf einen oder mehrere R\u00e4ume beschr\u00e4nkt, werden Clients aus anderen R\u00e4umen diesen Proxy nicht verwenden. Technisch ist der Zugriff aus anderen R\u00e4umen jedoch trotzdem noch m\u00f6glich. Mit aktivieren dieser Option wird der Zugriff aus anderen R\u00e4umen per Firewall verhindert.", "lang_firewalled": "Zugriff auf zugewiesene R\u00e4ume beschr\u00e4nken", "lang_flags": "Flags", "lang_global": "Global", + "lang_image": "Image", + "lang_imageList": "Image-Liste", "lang_lastSeen": "Letzte Aktivit\u00e4t", "lang_latency": "Latenz", "lang_location": "Ort", @@ -36,7 +40,9 @@ "lang_manageAccessTo": "Zugriff auf Server festlegen:", "lang_managedServer": "Automatisch konfigurierter DNBD3-Proxy", "lang_managedServerAdd": "Automatisch konfigurierten Proxy hinzuf\u00fcgen", - "lang_managedServerHelp": "Automatisch konfigurierte DNBD3-Proxies booten wie gew\u00f6hnliche bwLehrpool-Clients via PXE \u00fcber den Satelliten-Server. Sobald ein bwLehrpool-Client als DNBD3-Proxy konfiguriert wird, erh\u00e4lt er beim Booten eine gesonderte Konfiguration, sodass er fortan exklusiv als DNBD3-Proxy arbeitet, und nicht mehr als Arbeitsstation zur Verf\u00fcgung steht.\r\nDer Vorteil ist, dass die Konfiguration automatisiert erfolgt, und durch w\u00f6chentliche Reboots sichergestellt wird, dass eventuelle Updates des MiniLinux angewendet werden.\r\nIn diesem Fall legen Sie bitte eine Partition mit der ID 45 auf der Festplatte des Proxy-Servers an; diese wird persistent Behandelt und im Gegensatz zur ID44-Partition nicht beim Booten formatiert. Generell sollte diese Partition so gro\u00df wie m\u00f6glich sein, abh\u00e4ngig von der Anzahl der genutzten VMs. Bei Platzmangel l\u00f6scht der Proxy automatisch die VM, die am l\u00e4ngsten nicht verwendet wurde, um neuen VMs Platz zu machen.\r\nWeitere Informationen dazu finden Sie im Wiki.", + "lang_managedServerHelp": "Automatisch konfigurierte DNBD3-Proxies booten wie gew\u00f6hnliche bwLehrpool-Clients via PXE \u00fcber den Satelliten-Server. Sobald ein bwLehrpool-Client als DNBD3-Proxy konfiguriert wird, erh\u00e4lt er beim Booten eine gesonderte Konfiguration, sodass er fortan exklusiv als DNBD3-Proxy arbeitet, und nicht mehr als Arbeitsstation zur Verf\u00fcgung steht. Der Vorteil ist, dass die Konfiguration automatisiert erfolgt, und durch w\u00f6chentliche Reboots sichergestellt wird, dass eventuelle Updates des MiniLinux angewendet werden. In diesem Fall legen Sie bitte eine Partition mit der ID 45 auf der Festplatte des Proxy-Servers an; diese wird persistent Behandelt und im Gegensatz zur ID44-Partition nicht beim Booten formatiert. Generell sollte diese Partition so gro\u00df wie m\u00f6glich sein, abh\u00e4ngig von der Anzahl der genutzten VMs. Bei Platzmangel l\u00f6scht der Proxy automatisch die VM, die am l\u00e4ngsten nicht verwendet wurde, um neuen VMs Platz zu machen. Weitere Informationen dazu finden Sie im Wiki.", + "lang_manualRefresh": "Jetzt abfragen", + "lang_manualRefreshInfo": "Normalerweile werden die in dieser Tabelle angezeigten Daten alle 5 Minuten aktualisiert. Mit diesem Button k\u00f6nnen Sie die Daten sofort aktualisieren.", "lang_numFails": "Fehler", "lang_overrideIp": "Zu verwendende IP-Adresse", "lang_overrideIpInfo": "Normalerweise wird die automatisch per DHCP zugewiesene Adresse auf dem Boot-Interface verwendet. Falls der Proxy mit weiteren Netzwerkkarten ausgestattet ist (die ebenfalls per DHCP konfiguriert werden) kann durch Angabe einer solchen Alternativadresse hier die Verwendung der entsprechenden Karte erzwungen werden.", @@ -52,9 +58,11 @@ "lang_sessionRx": "Seit Neustart empfangen", "lang_sessionTx": "Seit Neustart gesendet", "lang_settings": "Einstellungen", + "lang_size": "Gr\u00f6\u00dfe", "lang_storageSize": "Speichergr\u00f6\u00dfe", "lang_test": "Testen", "lang_txTotal": "Gesamt gesendet", + "lang_uplink": "Uplink", "lang_uptime": "Aktuelle Laufzeit", "lang_wantToDelete": "Wollen Sie diesen Server wirklich entfernen? (Rebooten\/Ausschalten muss in diesem Fall manuell vorgenommen werden)" } \ No newline at end of file diff --git a/modules-available/dnbd3/lang/en/template-tags.json b/modules-available/dnbd3/lang/en/template-tags.json index 81b9d538..aef8ae75 100644 --- a/modules-available/dnbd3/lang/en/template-tags.json +++ b/modules-available/dnbd3/lang/en/template-tags.json @@ -10,8 +10,10 @@ "lang_client": "Client", "lang_clientCount": "Clients", "lang_clientList": "List of clients", + "lang_clients": "Clients", "lang_clientsByLocation": "Clients by location", "lang_comment": "Comment", + "lang_complete": "Complete", "lang_count": "Count", "lang_disabled": "Disabled", "lang_diskFree": "Free space", @@ -29,6 +31,8 @@ "lang_firewalled": "Limit access to corresponding locations", "lang_flags": "Flags", "lang_global": "Global", + "lang_image": "Image", + "lang_imageList": "Image list", "lang_lastSeen": "Last seen", "lang_latency": "Latency", "lang_location": "Location", @@ -37,6 +41,8 @@ "lang_managedServer": "Automatically configured DNBD3-Proxy", "lang_managedServerAdd": "Add automatically configured proxy", "lang_managedServerHelp": "Automatically configured DNBD3-Proxies will boot like normal bwLehrpool-Clients over PXE and the satellite server. If a client is configured as proxy it will boot with a different configuration and acts exclusively as proxy. The client can therefore not be used as a normal working station.\r\nThe advantage is that you don't need to install or configure anything else. The client will reboot every week to get possible updates ot the minilinux.\r\nIf you want to use this feature, please create a partition with ID 45 on the local hard disk of the proxy server. In contrast to the ID 44 partition which is formated after every reboot, this partition is persistent. As a rule of thumb the partition should be as big as possible. If there is no space left the proxy will delete the VM which hasn't be used for the longest time. More information in the wiki.", + "lang_manualRefresh": "Manual refresh", + "lang_manualRefreshInfo": "All servers are queried every 5 minutes to update the table below. Hit the refresh button to update the table immediately.", "lang_numFails": "Errors", "lang_overrideIp": "IP address to use", "lang_overrideIpInfo": "Usually the address that the DHCP server assigns to the boot interface of the proxy will be used. If the proxy has multiple interfaces (that also get an address assigned via DHCP) you can specify that address here to enforce their usage instead.", @@ -52,9 +58,11 @@ "lang_sessionRx": "Received since boot", "lang_sessionTx": "Sent since boot", "lang_settings": "Settings", + "lang_size": "Size", "lang_storageSize": "Storage size", "lang_test": "Test", "lang_txTotal": "Total sent", + "lang_uplink": "Uplink", "lang_uptime": "Uptime", "lang_wantToDelete": "Do you really want to delete this server? (Reboot\/Shutdown has to be done manually)" } \ No newline at end of file diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index afcb9b2c..8a9abdc1 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -264,26 +264,31 @@ class Page_Dnbd3 extends Page User::assertPermission('view.details'); $server = $this->getServerById(); Render::addTemplate('page-proxy-header', $server); - $stats = Dnbd3Rpc::query($server['ip'], 5003, true, true, false, true); + $stats = Dnbd3Rpc::query($server['ip'], 5003, true, true, true, true); if (!is_array($stats) || !isset($stats['runId'])) { Message::addError('server-unreachable'); return; } - $stats['bytesSent_s'] = Util::readableFileSize($stats['bytesSent']); - $stats['bytesReceived_s'] = Util::readableFileSize($stats['bytesReceived']); + foreach (['bytesSent', 'bytesReceived', 'spaceTotal', 'spaceFree'] as $key) { + $stats[$key . '_s'] = Util::readableFileSize($stats[$key]); + } + if ($stats['spaceTotal'] > 0) { + $stats['percentFree'] = ($stats['spaceFree'] / $stats['spaceTotal']) * 100; + $stats['percentFree'] = round($stats['percentFree'], $stats['percentFree'] < 10 ? 1 : 0); + } $stats['uptime_s'] = floor($stats['uptime'] / 86400) . 'd ' . gmdate('H:i:s', $stats['uptime']); Render::addTemplate('page-proxy-stats', $stats); - // TODO $images = Dnbd3Rpc::query($server['ip'], 5003, false, false, true); + Render::openTag('div', ['class' => 'tab-content']); $confAlts = Dnbd3Rpc::query($server['ip'], 5003, false, false, false, false, true, true); $ips = array(); $sort = array(); foreach ($stats['clients'] as &$c) { $c['bytesSent_s'] = Util::readableFileSize($c['bytesSent']); $sort[] = $c['bytesSent']; - $ips[] = preg_replace('/:\d+$/', '', $c['address']); + $ips[preg_replace('/:\d+$/', '', $c['address'])] = true; } + $ips = array_keys($ips); array_multisort($sort, SORT_DESC, $stats['clients']); - Render::openTag('div', ['class' => 'row']); // Config if (is_string($confAlts['config'])) { Render::addTemplate('page-proxy-config', $confAlts); @@ -295,10 +300,9 @@ class Page_Dnbd3 extends Page unset($as); Render::addTemplate('page-proxy-altservers', $confAlts); } - Render::closeTag('div'); - Render::openTag('div', ['class' => 'row']); // Count locations - $res = Database::simpleQuery('SELECT locationid, Count(*) AS cnt FROM machine WHERE clientip IN (:ips) GROUP BY locationid', compact('ips')); + $res = Database::simpleQuery("SELECT locationid, Count(*) AS cnt FROM machine + WHERE clientip IN (:ips) AND state IN ('IDLE', 'OCCUPIED') GROUP BY locationid", compact('ips')); $locCount = Location::getLocationsAssoc(); $locCount[0] = array( 'locationname' => '/', @@ -326,10 +330,17 @@ class Page_Dnbd3 extends Page } } if ($showLocs) { - $locCount = array_filter($locCount, function ($v) { return isset($v['keep']); }); - Render::addTemplate('page-proxy-loclist', array('list' => array_values($locCount))); + $stats['loclist'] = array_values(array_filter($locCount, function ($v) { return isset($v['keep']); })); } Render::addTemplate('page-proxy-clients', $stats); + $sort1 = $sort2 = []; + foreach ($stats['images'] as &$image) { + $image['size_s'] = Util::readableFileSize($image['size']); + $sort1[] = $image['users']; + $sort2[] = $image['name']; + } + array_multisort($sort1, SORT_NUMERIC | SORT_DESC, $sort2, SORT_ASC, $stats['images']); + Render::addTemplate('page-proxy-images', $stats); Render::closeTag('div'); } diff --git a/modules-available/dnbd3/templates/page-proxy-altservers.html b/modules-available/dnbd3/templates/page-proxy-altservers.html index 00a884cc..d2e520f9 100644 --- a/modules-available/dnbd3/templates/page-proxy-altservers.html +++ b/modules-available/dnbd3/templates/page-proxy-altservers.html @@ -1,11 +1,11 @@ -
+

{{lang_altservers}}

- - - - + + + + {{#altservers}} @@ -21,7 +21,7 @@ {{rtt}} ms {{/isClientOnly}} -
{{lang_proxyServerTHead}}{{lang_numFails}}{{lang_latency}}{{lang_flags}}{{lang_proxyServerTHead}}{{lang_numFails}}{{lang_latency}}{{lang_flags}} {{lang_comment}}
+ {{#isClientOnly}} [CO] {{/isClientOnly}} diff --git a/modules-available/dnbd3/templates/page-proxy-clients.html b/modules-available/dnbd3/templates/page-proxy-clients.html index 9e7cec4c..dde20632 100644 --- a/modules-available/dnbd3/templates/page-proxy-clients.html +++ b/modules-available/dnbd3/templates/page-proxy-clients.html @@ -1,20 +1,53 @@ -
-

{{lang_clientList}}

+
+
+
+ {{#loclist.0}} +

{{lang_clientsByLocation}}

- - - - - - {{#clients}} - - - - - {{/clients}} -
{{lang_client}}{{lang_bytesSent}}
- {{address}} - - {{bytesSent_s}} -
+ + + + + + + {{#loclist}} + + + + + + {{/loclist}} +
{{lang_location}}{{lang_count}}{{lang_recursiveCount}}
+ {{#depth}} +
+ {{/depth}} + {{locationname}} +
+ {{clientCount}} + + {{recCount}} +
+ {{/loclist.0}} +
+
+

{{lang_clientList}}

+ + + + + + + {{#clients}} + + + + + {{/clients}} +
{{lang_client}}{{lang_bytesSent}}
+ {{address}} + + {{bytesSent_s}} +
+
+
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-config.html b/modules-available/dnbd3/templates/page-proxy-config.html index adc73a57..46e732c1 100644 --- a/modules-available/dnbd3/templates/page-proxy-config.html +++ b/modules-available/dnbd3/templates/page-proxy-config.html @@ -1,4 +1,4 @@ -
+

{{lang_proxyConfig}}

{{config}}
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-header.html b/modules-available/dnbd3/templates/page-proxy-header.html index 6f3f1b7f..7f3418cc 100644 --- a/modules-available/dnbd3/templates/page-proxy-header.html +++ b/modules-available/dnbd3/templates/page-proxy-header.html @@ -1 +1,2 @@ -

{{ip}}

\ No newline at end of file +

{{ip}}

+ diff --git a/modules-available/dnbd3/templates/page-proxy-images.html b/modules-available/dnbd3/templates/page-proxy-images.html new file mode 100644 index 00000000..7e30de20 --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-images.html @@ -0,0 +1,31 @@ +
+

{{lang_imageList}}

+ + + + + + + + + {{#images}} + + + + + + + + {{/images}} +
{{lang_image}}{{lang_clients}}{{lang_size}}{{lang_complete}}{{lang_uplink}}
+ {{name}}:{{rid}} + + {{users}} + + {{size_s}} + + {{complete}} % + + {{uplinkServer}} +
+
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-loclist.html b/modules-available/dnbd3/templates/page-proxy-loclist.html deleted file mode 100644 index 67c90683..00000000 --- a/modules-available/dnbd3/templates/page-proxy-loclist.html +++ /dev/null @@ -1,27 +0,0 @@ -
-

{{lang_clientsByLocation}}

- - - - - - - - {{#list}} - - - - - - {{/list}} -
{{lang_location}}{{lang_count}}{{lang_recursiveCount}}
- {{#depth}} -
- {{/depth}} - {{locationname}} -
- {{clientCount}} - - {{recCount}} -
-
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-stats.html b/modules-available/dnbd3/templates/page-proxy-stats.html index e7811028..9a03b718 100644 --- a/modules-available/dnbd3/templates/page-proxy-stats.html +++ b/modules-available/dnbd3/templates/page-proxy-stats.html @@ -1,9 +1,23 @@
- {{lang_sessionTx}}: {{bytesSent_s}} - –– - {{lang_sessionRx}}: {{bytesReceived_s}} - –– - {{lang_uptime}}: {{uptime_s}} +
+ {{lang_sessionTx}}: {{bytesSent_s}} + –– + {{lang_sessionRx}}: {{bytesReceived_s}} + –– + {{lang_uptime}}: {{uptime_s}} +
+
+ {{lang_storageSize}}: {{spaceTotal_s}} + –– + {{lang_diskFree}}: {{spaceFree_s}} ({{percentFree}} %) +
-
\ No newline at end of file +
+ + \ No newline at end of file -- cgit v1.2.3-55-g7522 From c98e08ea376b793e6d98b7a0e03d4d92afc2cca7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 21 Mar 2018 16:08:52 +0100 Subject: [dnbd3] Hide tabs that aren't available --- modules-available/dnbd3/page.inc.php | 15 ++++++++------- modules-available/dnbd3/templates/page-proxy-clients.html | 2 +- modules-available/dnbd3/templates/page-proxy-config.html | 2 +- modules-available/dnbd3/templates/page-proxy-stats.html | 8 ++++++-- 4 files changed, 16 insertions(+), 11 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 8a9abdc1..4fe5dea1 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -264,7 +264,7 @@ class Page_Dnbd3 extends Page User::assertPermission('view.details'); $server = $this->getServerById(); Render::addTemplate('page-proxy-header', $server); - $stats = Dnbd3Rpc::query($server['ip'], 5003, true, true, true, true); + $stats = Dnbd3Rpc::query($server['ip'], 5003, true, true, true, true, true, true); if (!is_array($stats) || !isset($stats['runId'])) { Message::addError('server-unreachable'); return; @@ -277,9 +277,10 @@ class Page_Dnbd3 extends Page $stats['percentFree'] = round($stats['percentFree'], $stats['percentFree'] < 10 ? 1 : 0); } $stats['uptime_s'] = floor($stats['uptime'] / 86400) . 'd ' . gmdate('H:i:s', $stats['uptime']); + $stats['tab_config'] = is_string($stats['config']); + $stats['tab_altservers'] = is_array($stats['altservers']); Render::addTemplate('page-proxy-stats', $stats); Render::openTag('div', ['class' => 'tab-content']); - $confAlts = Dnbd3Rpc::query($server['ip'], 5003, false, false, false, false, true, true); $ips = array(); $sort = array(); foreach ($stats['clients'] as &$c) { @@ -290,15 +291,15 @@ class Page_Dnbd3 extends Page $ips = array_keys($ips); array_multisort($sort, SORT_DESC, $stats['clients']); // Config - if (is_string($confAlts['config'])) { - Render::addTemplate('page-proxy-config', $confAlts); + if (is_string($stats['config'])) { + Render::addTemplate('page-proxy-config', $stats); } - if (is_array($confAlts['altservers'])) { - foreach ($confAlts['altservers'] as &$as) { + if (is_array($stats['altservers'])) { + foreach ($stats['altservers'] as &$as) { $as['rtt'] = round(array_sum($as['rtt']) / count($as['rtt']) / 1000, 2); } unset($as); - Render::addTemplate('page-proxy-altservers', $confAlts); + Render::addTemplate('page-proxy-altservers', $stats); } // Count locations $res = Database::simpleQuery("SELECT locationid, Count(*) AS cnt FROM machine diff --git a/modules-available/dnbd3/templates/page-proxy-clients.html b/modules-available/dnbd3/templates/page-proxy-clients.html index dde20632..6733a056 100644 --- a/modules-available/dnbd3/templates/page-proxy-clients.html +++ b/modules-available/dnbd3/templates/page-proxy-clients.html @@ -1,4 +1,4 @@ -
+
{{#loclist.0}} diff --git a/modules-available/dnbd3/templates/page-proxy-config.html b/modules-available/dnbd3/templates/page-proxy-config.html index 46e732c1..79f56015 100644 --- a/modules-available/dnbd3/templates/page-proxy-config.html +++ b/modules-available/dnbd3/templates/page-proxy-config.html @@ -1,4 +1,4 @@ -
+

{{lang_proxyConfig}}

{{config}}
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-stats.html b/modules-available/dnbd3/templates/page-proxy-stats.html index 9a03b718..a866903c 100644 --- a/modules-available/dnbd3/templates/page-proxy-stats.html +++ b/modules-available/dnbd3/templates/page-proxy-stats.html @@ -16,8 +16,12 @@
\ No newline at end of file -- cgit v1.2.3-55-g7522 From 06ee20606d537f8995bb8f9ae466a7e99bc2a6b8 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 27 Mar 2018 15:25:57 +0200 Subject: [dnbd3] Renamed view.list permission to access-page Refs #3340 --- modules-available/dnbd3/lang/de/permissions.json | 4 ++-- modules-available/dnbd3/lang/en/permissions.json | 4 ++-- modules-available/dnbd3/page.inc.php | 2 +- modules-available/dnbd3/permissions/permissions.json | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/lang/de/permissions.json b/modules-available/dnbd3/lang/de/permissions.json index 9229d6d9..15d17336 100644 --- a/modules-available/dnbd3/lang/de/permissions.json +++ b/modules-available/dnbd3/lang/de/permissions.json @@ -1,8 +1,8 @@ { + "access-page": "Seite sehen", "configure.external": "Externen Proxy bearbeiten", "configure.proxy": "Automatischen Proxy bearbeiten", "refresh": "Serverliste aktualisieren", "toggle-usage": "Aktivieren\/Deaktivieren", - "view.details": "Proxydetails anzeigen", - "view.list": "Proxyliste anzeigen" + "view.details": "Proxydetails anzeigen" } \ No newline at end of file diff --git a/modules-available/dnbd3/lang/en/permissions.json b/modules-available/dnbd3/lang/en/permissions.json index 0762af2c..112deb94 100644 --- a/modules-available/dnbd3/lang/en/permissions.json +++ b/modules-available/dnbd3/lang/en/permissions.json @@ -1,8 +1,8 @@ { + "access-page": "View this page", "configure.external": "Edit external proxy", "configure.proxy": "Edit automatic proxy", "refresh": "Refresh server list", "toggle-usage": "Activate\/Deactivate", - "view.details": "Show proxy details", - "view.list": "Show proxy list" + "view.details": "Show proxy details" } \ No newline at end of file diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 4fe5dea1..6e4f8885 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -163,7 +163,7 @@ class Page_Dnbd3 extends Page private function showServerList() { - User::assertPermission('view.list'); + User::assertPermission('access-page'); $dynClients = RunMode::getForMode(Page::getModule(), 'proxy', true, true); $res = Database::simpleQuery('SELECT s.serverid, s.machineuuid, s.fixedip, s.lastseen AS dnbd3lastseen, s.uptime, s.totalup, s.totaldown, s.clientcount, s.disktotal, s.diskfree, GROUP_CONCAT(sxl.locationid) AS locations, diff --git a/modules-available/dnbd3/permissions/permissions.json b/modules-available/dnbd3/permissions/permissions.json index 1939e32a..77a72d62 100644 --- a/modules-available/dnbd3/permissions/permissions.json +++ b/modules-available/dnbd3/permissions/permissions.json @@ -1,11 +1,11 @@ { - "toggle-usage": { + "access-page": { "location-aware": false }, - "refresh": { + "toggle-usage": { "location-aware": false }, - "view.list": { + "refresh": { "location-aware": false }, "view.details": { -- cgit v1.2.3-55-g7522 From aeb96b5b7019b2f0bc40ed699dc2877a8729a06b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 29 Mar 2018 10:47:58 +0200 Subject: [dnbd3] Fix dnbd3 reboot status feedback Closes #3276 --- modules-available/dnbd3/page.inc.php | 37 +++++++++++++++------- .../dnbd3/templates/page-serverlist.html | 24 ++++++++++---- 2 files changed, 43 insertions(+), 18 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 6e4f8885..f30abfe1 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -490,24 +490,37 @@ class Page_Dnbd3 extends Page if (!isset($server['machineuuid'])) { die('Not automatic server.'); } - $this->assertPermission($server); - if (!Module::isAvailable('rebootcontrol')) { - die('No rebootcontrol'); - } $uuid = $server['machineuuid']; - $task = RebootControl::reboot([ $uuid ]); + $task = Request::any('taskid', false, 'string'); if ($task === false) { - die('Taskmanager unreachable'); + $this->assertPermission($server); + if (!Module::isAvailable('rebootcontrol')) { + die('No rebootcontrol'); + } + $task = RebootControl::reboot([$uuid]); + if ($task === false) { + die('Taskmanager unreachable'); + } } - $task = Taskmanager::waitComplete($task, 2000); - if (is_array($task) && isset($task['data']) && isset($task['data']['clientStatus']) && isset($task['data']['clientStatus'][$uuid])) { - $status = $task['data']['clientStatus'][$uuid]; + $task = Taskmanager::waitComplete($task, 1000); + if (is_array($task) && isset($task['data']['clientStatus'][$uuid])) { + $status = [ + 'rebootStatus' => $task['data']['clientStatus'][$uuid], + 'taskStatus' => $task['statusCode'], + 'taskId' => $task['id'], + ]; if (!empty($task['data']['error'])) { - $status .= "\n --- \n" . $task['data']['error']; + $status['error'] = $task['data']['error']; } - die($status); + } else { + $status = [ + 'rebootStatus' => 'FAILURE', + 'taskStatus' => 'FAILURE', + 'taskId' => $task['id'], + ]; } - die('Unknown :-('); + Header('Content-Type: application/json; charset=utf-8'); + die(json_encode($status)); } } diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html index a51e9723..65e4d6ea 100644 --- a/modules-available/dnbd3/templates/page-serverlist.html +++ b/modules-available/dnbd3/templates/page-serverlist.html @@ -389,20 +389,32 @@ document.addEventListener('DOMContentLoaded', function () { } $t.html(''); var sid = rebootServerId; + var taskId = false; + var lastText; var query = function() { + data = {"token": TOKEN, "action": "reboot", "server": sid}; + if (taskId !== false) data['taskid'] = taskId; $.ajax({ - "data": {"token": TOKEN, "action": "reboot", "server": sid}, + "data": data, "method": "POST", - "dataType": "text", + "dataType": "json", "url": "?do=dnbd3" }).done(function (data) { - $t.text(data); - if (data.indexOf('REBOOTING') !== -1 || data.indexOf('CONNECTING') !== -1) { + if (!data || !data.taskId) return; + if (taskId === false) taskId = data.taskId; + if (data.error) data.rebootStatus += ' (' + data.error + ')'; + if (data.rebootStatus !== lastText) { + $t.empty().text(data.rebootStatus); + } + if (data.taskStatus === 'TASK_PROCESSING' || data.taskStatus === 'TASK_WAITING') { setTimeout(query, 5000); - $t.append($('')); + if (data.rebootStatus !== lastText) { + $t.append($('')); + } } + lastText = data.rebootStatus; }).fail(function () { - $.text('Failed'); + $t.text('Failed'); }); }; query(); -- cgit v1.2.3-55-g7522 From c226f585bf23c830cb98bcaa15394aec813e12bc Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 11 Apr 2018 23:46:13 +0200 Subject: [dnbd3] Colorful config formatting --- modules-available/dnbd3/page.inc.php | 24 ++++++++++++++++++++++ .../dnbd3/templates/page-proxy-config.html | 18 ++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index f30abfe1..84007797 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -292,6 +292,30 @@ class Page_Dnbd3 extends Page array_multisort($sort, SORT_DESC, $stats['clients']); // Config if (is_string($stats['config'])) { + preg_match_all('/^((?\[.*\])|(?[^=]+)=(?.*)|(?[^\[][^=]*))$/m', $stats['config'], $out, PREG_SET_ORDER); + $stats['config'] = []; + foreach ($out as $line) { + if (!empty($line['sec'])) { + $stats['config'][] = ['class1' => 'text-primary', 'text1' => $line['sec']]; + } elseif (!empty($line['other'])) { + $stats['config'][] = ['class1' => 'text-muted', 'text1' => $line['other']]; + } else { + $extra = ''; + $class2 = 'slx-bold'; + if (in_array($line['key'], ['serverPenalty', 'clientPenalty'])) { + $extra = round($line['val'] / 1000, 1) . 'ms'; + } elseif (in_array($line['key'], ['uplinkTimeout', 'clientTimeout'])) { + $extra = round($line['val'] / 1000, 1) . 's'; + } elseif (in_array($line['key'], ['maxPayload', 'maxReplicationSize'])) { + $extra = Util::readableFilesize($line['val']); + } elseif ($line['val'] === 'true') { + $class2 .= ' text-success'; + } elseif ($line['val'] === 'false') { + $class2 .= ' text-danger'; + } + $stats['config'][] = ['text1' => $line['key'], 'class2' => $class2, 'text2' => $line['val'] . ' ', 'extra' => $extra]; + } + } Render::addTemplate('page-proxy-config', $stats); } if (is_array($stats['altservers'])) { diff --git a/modules-available/dnbd3/templates/page-proxy-config.html b/modules-available/dnbd3/templates/page-proxy-config.html index 79f56015..f258e030 100644 --- a/modules-available/dnbd3/templates/page-proxy-config.html +++ b/modules-available/dnbd3/templates/page-proxy-config.html @@ -1,4 +1,18 @@ +

{{lang_proxyConfig}}

-
{{config}}
-
\ No newline at end of file +
+ {{#config}} + {{text1}}{{#text2}}={{/text2}}{{text2}} + {{#extra}} + + {{/extra}} +
+ {{/config}} +
+
-- cgit v1.2.3-55-g7522 From 7863dcad82b760de0877005a08c5af28d43a6c93 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 15 Feb 2019 17:08:27 +0100 Subject: [dnbd3] Fix recursive client counting --- modules-available/dnbd3/page.inc.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 84007797..03c7e6cd 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -332,16 +332,18 @@ class Page_Dnbd3 extends Page $locCount[0] = array( 'locationname' => '/', 'depth' => 0, - 'recCount' => 0, ); foreach ($locCount as &$loc) { + $loc['clientCount'] = 0; $loc['recCount'] = 0; } $showLocs = false; while ($row = $res->fetch(PDO::FETCH_ASSOC)) { settype($row['locationid'], 'int'); + trigger_error('Bla: ' . $row['locationid'] . ', blu: ' . isset($locCount[$row['locationid']])); $loc =& $locCount[$row['locationid']]; $loc['clientCount'] = $row['cnt']; + trigger_error('Setting ' . $row['locationid'] . ' to ' . $row['cnt'] . ', rec was ' . $loc['recCount']); $loc['recCount'] += $row['cnt']; if ($row['locationid'] !== 0) { $showLocs = true; @@ -350,9 +352,11 @@ class Page_Dnbd3 extends Page if (isset($loc['parents'])) { foreach ($loc['parents'] as $p) { $locCount[$p]['keep'] = true; + trigger_error('[' . $p . '] Adding ' . $row['cnt'] . ' to ' . $locCount[$p]['recCount']); $locCount[$p]['recCount'] += $row['cnt']; } } + $locCount[0]['recCount'] += $row['cnt']; } if ($showLocs) { $stats['loclist'] = array_values(array_filter($locCount, function ($v) { return isset($v['keep']); })); -- cgit v1.2.3-55-g7522 From acae99572ec256c0fce6c021339df918cd55b5b1 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 15 Feb 2019 17:12:12 +0100 Subject: [dnbd3] Remove debug spam --- modules-available/dnbd3/page.inc.php | 3 --- 1 file changed, 3 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 03c7e6cd..d8dd6cb8 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -340,10 +340,8 @@ class Page_Dnbd3 extends Page $showLocs = false; while ($row = $res->fetch(PDO::FETCH_ASSOC)) { settype($row['locationid'], 'int'); - trigger_error('Bla: ' . $row['locationid'] . ', blu: ' . isset($locCount[$row['locationid']])); $loc =& $locCount[$row['locationid']]; $loc['clientCount'] = $row['cnt']; - trigger_error('Setting ' . $row['locationid'] . ' to ' . $row['cnt'] . ', rec was ' . $loc['recCount']); $loc['recCount'] += $row['cnt']; if ($row['locationid'] !== 0) { $showLocs = true; @@ -352,7 +350,6 @@ class Page_Dnbd3 extends Page if (isset($loc['parents'])) { foreach ($loc['parents'] as $p) { $locCount[$p]['keep'] = true; - trigger_error('[' . $p . '] Adding ' . $row['cnt'] . ' to ' . $locCount[$p]['recCount']); $locCount[$p]['recCount'] += $row['cnt']; } } -- cgit v1.2.3-55-g7522