summaryrefslogtreecommitdiffstats
path: root/modules-available/dnbd3
diff options
context:
space:
mode:
authorSimon Rettberg2017-11-13 23:44:39 +0100
committerSimon Rettberg2017-11-13 23:44:39 +0100
commitf8e86ae55fb0843477b8fa52b9c2f9b908d05195 (patch)
tree58d9307ce6d9f427b9f301ee9f212b17639ce404 /modules-available/dnbd3
parent[inc/Taskmanager] Fix phpdoc (diff)
downloadslx-admin-f8e86ae55fb0843477b8fa52b9c2f9b908d05195.tar.gz
slx-admin-f8e86ae55fb0843477b8fa52b9c2f9b908d05195.tar.xz
slx-admin-f8e86ae55fb0843477b8fa52b9c2f9b908d05195.zip
[dnbd3] Extend server details page (altservers, config)
Diffstat (limited to 'modules-available/dnbd3')
-rw-r--r--modules-available/dnbd3/baseconfig/getconfig.inc.php6
-rw-r--r--modules-available/dnbd3/inc/dnbd3.inc.php11
-rw-r--r--modules-available/dnbd3/inc/dnbd3rpc.inc.php10
-rw-r--r--modules-available/dnbd3/lang/de/template-tags.json12
-rw-r--r--modules-available/dnbd3/page.inc.php44
-rw-r--r--modules-available/dnbd3/templates/page-proxy-altservers.html36
-rw-r--r--modules-available/dnbd3/templates/page-proxy-clients.html (renamed from modules-available/dnbd3/templates/page-clientlist.html)0
-rw-r--r--modules-available/dnbd3/templates/page-proxy-config.html4
-rw-r--r--modules-available/dnbd3/templates/page-proxy-header.html (renamed from modules-available/dnbd3/templates/page-header-servername.html)0
-rw-r--r--modules-available/dnbd3/templates/page-proxy-loclist.html (renamed from modules-available/dnbd3/templates/page-client-loclist.html)0
-rw-r--r--modules-available/dnbd3/templates/page-proxy-stats.html9
-rw-r--r--modules-available/dnbd3/templates/page-serverlist.html30
12 files changed, 137 insertions, 25 deletions
diff --git a/modules-available/dnbd3/baseconfig/getconfig.inc.php b/modules-available/dnbd3/baseconfig/getconfig.inc.php
index d614dc6f..e0389c71 100644
--- a/modules-available/dnbd3/baseconfig/getconfig.inc.php
+++ b/modules-available/dnbd3/baseconfig/getconfig.inc.php
@@ -2,6 +2,12 @@
if (!Dnbd3::isEnabled()) return;
+if (!Dnbd3::hasNfsFallback()) {
+ ConfigHolder::add("SLX_VM_NFS", false, 1000);
+ ConfigHolder::add("SLX_VM_NFS_USER", false, 1000);
+ ConfigHolder::add("SLX_VM_NFS_PASSWD", false, 1000);
+}
+
// Locations from closest to furthest (order)
$locations = ConfigHolder::get('SLX_LOCATIONS');
if ($locations === false) {
diff --git a/modules-available/dnbd3/inc/dnbd3.inc.php b/modules-available/dnbd3/inc/dnbd3.inc.php
index eb41c000..9607c544 100644
--- a/modules-available/dnbd3/inc/dnbd3.inc.php
+++ b/modules-available/dnbd3/inc/dnbd3.inc.php
@@ -3,6 +3,7 @@
class Dnbd3 {
const PROP_ENABLED = 'dnbd3.enabled';
+ const PROP_NFS_FALLBACK = 'dnbd3.nfs-fallback';
public static function isEnabled()
{
@@ -19,6 +20,16 @@ class Dnbd3 {
return $task;
}
+ public static function hasNfsFallback()
+ {
+ return Property::get(self::PROP_NFS_FALLBACK, 0) ? true : false;
+ }
+
+ public static function setNfsFallback($bool)
+ {
+ Property::set(self::PROP_NFS_FALLBACK, $bool ? 1 : 0);
+ }
+
public static function getLocalStatus()
{
diff --git a/modules-available/dnbd3/inc/dnbd3rpc.inc.php b/modules-available/dnbd3/inc/dnbd3rpc.inc.php
index 35d79a31..cdcda508 100644
--- a/modules-available/dnbd3/inc/dnbd3rpc.inc.php
+++ b/modules-available/dnbd3/inc/dnbd3rpc.inc.php
@@ -15,9 +15,11 @@ class Dnbd3Rpc {
* @param bool $clients include client list
* @param bool $images include image list
* @param bool $diskSpace include disk space stats
+ * @param bool $config get config
+ * @param bool $altservers list of alt servers with status
* @return int|array the queried data as an array, or false on error
*/
- public static function query($server, $port, $stats, $clients, $images, $diskSpace)
+ public static function query($server, $port, $stats, $clients, $images, $diskSpace = false, $config = false, $altservers = false)
{
// Special case - local server
if ($server === '<self>') {
@@ -36,6 +38,12 @@ class Dnbd3Rpc {
if ($diskSpace) {
$url .= 'q=space&';
}
+ if ($config) {
+ $url .= 'q=config&';
+ }
+ if ($altservers) {
+ $url .= 'q=altservers&';
+ }
$str = Download::asString($url, 3, $code);
if ($str === false)
return self::QUERY_UNREACHABLE;
diff --git a/modules-available/dnbd3/lang/de/template-tags.json b/modules-available/dnbd3/lang/de/template-tags.json
index 0f9920a2..0573a68e 100644
--- a/modules-available/dnbd3/lang/de/template-tags.json
+++ b/modules-available/dnbd3/lang/de/template-tags.json
@@ -1,6 +1,7 @@
{
"lang_addServer": "Server hinzuf\u00fcgen",
"lang_allowedSubnets": "Zum Zugriff freigegebene Subnets",
+ "lang_altservers": "Uplinks",
"lang_backgroundReplication": "Replikation im Hintergrund",
"lang_backgroundReplicationInfo": "Sobald eine VM \u00fcber den Proxy angefragt wird, spiegelt der Proxy im Hintergrund den vollst\u00e4ndigen Inhalt des VM-Abbildes, nicht nur die angefragten Bl\u00f6cke.",
"lang_bytesSent": "Gesendet",
@@ -9,6 +10,7 @@
"lang_clientCount": "Clients",
"lang_clientList": "Liste der Clients",
"lang_clientsByLocation": "Clients nach Raum\/Ort",
+ "lang_comment": "Kommentar",
"lang_count": "Anzahl",
"lang_disabled": "Deaktiviert",
"lang_diskFree": "Freier Speicher",
@@ -24,19 +26,29 @@
"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_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_lastSeen": "Letzte Aktivit\u00e4t",
+ "lang_latency": "Latenz",
"lang_location": "Ort",
"lang_locations": "Orte",
"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_numFails": "Fehler",
+ "lang_proxyConfig": "Konfiguration",
"lang_proxyLocationText": "Bla bla bla BLA!!!!",
"lang_proxyServerTHead": "Server\/Proxy",
+ "lang_reboot": "Reboot",
+ "lang_rebootProxyHeading": "Proxy neustarten",
+ "lang_rebootProxyText": "Bei \u00c4nderungen an der Konfiguration muss der Server neugestartet werden, damit die \u00c4nderungen wirksam werden.",
"lang_recursiveCount": "Rekursiv",
"lang_rxTotal": "Gesamt empfangen",
"lang_serverList": "Serverliste",
+ "lang_sessionRx": "Seit Neustart empfangen",
+ "lang_sessionTx": "Seit Neustart gesendet",
+ "lang_settings": "Einstellungen",
"lang_storageSize": "Speichergr\u00f6\u00dfe",
"lang_test": "Testen",
"lang_txTotal": "Gesamt gesendet",
diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php
index 946df939..2836cbf4 100644
--- a/modules-available/dnbd3/page.inc.php
+++ b/modules-available/dnbd3/page.inc.php
@@ -46,7 +46,9 @@ class Page_Dnbd3 extends Page
private function toggleUsage()
{
$enabled = Request::post('enabled', false, 'bool');
+ $nfs = Request::post('with-nfs', false, 'bool');
$task = Dnbd3::setEnabled($enabled);
+ Dnbd3::setNfsFallback($nfs);
Taskmanager::waitComplete($task, 5000);
}
@@ -113,8 +115,8 @@ class Page_Dnbd3 extends Page
protected function doRender()
{
$show = Request::get('show', false, 'string');
- if ($show === 'clients') {
- $this->showClientList();
+ if ($show === 'proxy') {
+ $this->showProxyDetails();
} elseif ($show === 'locations') {
$this->showServerLocationEdit();
} elseif ($show === false) {
@@ -181,28 +183,48 @@ class Page_Dnbd3 extends Page
Render::addTemplate('page-serverlist', array(
'list' => $servers,
'enabled' => Dnbd3::isEnabled(),
- 'checked_s' => Dnbd3::isEnabled() ? 'checked' : '',
+ 'enabled_checked_s' => Dnbd3::isEnabled() ? 'checked' : '',
+ 'nfs_checked_s' => Dnbd3::hasNfsFallback() ? 'checked' : '',
'rebootcontrol' => Module::isAvailable('rebootcontrol', false)
));
}
- private function showClientList()
+ private function showProxyDetails()
{
$server = $this->getServerById();
- Render::addTemplate('page-header-servername', $server);
- $data = Dnbd3Rpc::query($server['ip'], 5003,false, true, false, false);
- if (!is_array($data) || !isset($data['clients'])) {
+ Render::addTemplate('page-proxy-header', $server);
+ $stats = Dnbd3Rpc::query($server['ip'], 5003,true, true, false, 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']);
+ $stats['uptime_s'] = floor($stats['uptime'] / 86400) . 'd ' . gmdate('H:i:s', $stats['uptime']);
+ Render::addTemplate('page-proxy-stats', $stats);
+ $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 ($data['clients'] as &$c) {
+ foreach ($stats['clients'] as &$c) {
$c['bytesSent_s'] = Util::readableFileSize($c['bytesSent']);
$sort[] = $c['bytesSent'];
$ips[] = preg_replace('/:\d+$/', '', $c['address']);
}
- array_multisort($sort, SORT_DESC, $data['clients']);
+ array_multisort($sort, SORT_DESC, $stats['clients']);
+ Render::openTag('div', ['class' => 'row']);
+ // Config
+ if (is_string($confAlts['config'])) {
+ Render::addTemplate('page-proxy-config', $confAlts);
+ }
+ if (is_array($confAlts['altservers'])) {
+ foreach ($confAlts['altservers'] as &$as) {
+ $as['rtt'] = round(array_sum($as['rtt']) / count($as['rtt']) / 1000, 2);
+ }
+ 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'));
@@ -234,9 +256,9 @@ class Page_Dnbd3 extends Page
}
if ($showLocs) {
$locCount = array_filter($locCount, function ($v) { return isset($v['keep']); });
- Render::addTemplate('page-client-loclist', array('list' => array_values($locCount)));
+ Render::addTemplate('page-proxy-loclist', array('list' => array_values($locCount)));
}
- Render::addTemplate('page-clientlist', $data);
+ Render::addTemplate('page-proxy-clients', $stats);
Render::closeTag('div');
}
diff --git a/modules-available/dnbd3/templates/page-proxy-altservers.html b/modules-available/dnbd3/templates/page-proxy-altservers.html
new file mode 100644
index 00000000..00a884cc
--- /dev/null
+++ b/modules-available/dnbd3/templates/page-proxy-altservers.html
@@ -0,0 +1,36 @@
+<div class="col-md-6">
+ <h2>{{lang_altservers}}</h2>
+ <table class="table table-condensed">
+ <tr>
+ <th>{{lang_proxyServerTHead}}</th>
+ <th>{{lang_numFails}}</th>
+ <th class="text-right">{{lang_latency}}</th>
+ <th>{{lang_flags}}</th>
+ <th>{{lang_comment}}</th>
+ </tr>
+ {{#altservers}}
+ <tr>
+ <td class="text-nowrap">{{host}}</td>
+ <td>
+ {{^isClientOnly}}
+ {{numFails}}
+ {{/isClientOnly}}
+ </td>
+ <td class="text-right text-nowrap">
+ {{^isClientOnly}}
+ {{rtt}}&thinsp;ms
+ {{/isClientOnly}}
+ </td>
+ <td>
+ {{#isClientOnly}}
+ [CO]
+ {{/isClientOnly}}
+ {{#isPrivate}}
+ [PO]
+ {{/isPrivate}}
+ </td>
+ <td><table class="slx-ellipsis"><tr><td>{{comment}}</td></tr></table></td>
+ </tr>
+ {{/altservers}}
+ </table>
+</div> \ No newline at end of file
diff --git a/modules-available/dnbd3/templates/page-clientlist.html b/modules-available/dnbd3/templates/page-proxy-clients.html
index 9e7cec4c..9e7cec4c 100644
--- a/modules-available/dnbd3/templates/page-clientlist.html
+++ b/modules-available/dnbd3/templates/page-proxy-clients.html
diff --git a/modules-available/dnbd3/templates/page-proxy-config.html b/modules-available/dnbd3/templates/page-proxy-config.html
new file mode 100644
index 00000000..adc73a57
--- /dev/null
+++ b/modules-available/dnbd3/templates/page-proxy-config.html
@@ -0,0 +1,4 @@
+<div class="col-md-6">
+ <h2>{{lang_proxyConfig}}</h2>
+ <pre>{{config}}</pre>
+</div> \ No newline at end of file
diff --git a/modules-available/dnbd3/templates/page-header-servername.html b/modules-available/dnbd3/templates/page-proxy-header.html
index 6f3f1b7f..6f3f1b7f 100644
--- a/modules-available/dnbd3/templates/page-header-servername.html
+++ b/modules-available/dnbd3/templates/page-proxy-header.html
diff --git a/modules-available/dnbd3/templates/page-client-loclist.html b/modules-available/dnbd3/templates/page-proxy-loclist.html
index 67c90683..67c90683 100644
--- a/modules-available/dnbd3/templates/page-client-loclist.html
+++ b/modules-available/dnbd3/templates/page-proxy-loclist.html
diff --git a/modules-available/dnbd3/templates/page-proxy-stats.html b/modules-available/dnbd3/templates/page-proxy-stats.html
new file mode 100644
index 00000000..e7811028
--- /dev/null
+++ b/modules-available/dnbd3/templates/page-proxy-stats.html
@@ -0,0 +1,9 @@
+<div class="panel panel-default">
+ <div class="panel-body">
+ {{lang_sessionTx}}: <b>{{bytesSent_s}}</b>
+ ––
+ {{lang_sessionRx}}: <b>{{bytesReceived_s}}</b>
+ ––
+ {{lang_uptime}}: <b>{{uptime_s}}</b>
+ </div>
+</div> \ No newline at end of file
diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html
index 1a4d8255..c5905dcd 100644
--- a/modules-available/dnbd3/templates/page-serverlist.html
+++ b/modules-available/dnbd3/templates/page-serverlist.html
@@ -15,9 +15,13 @@
<form method="post" action="?do=dnbd3">
<input type="hidden" name="token" value="{{token}}">
<div class="checkbox">
- <input id="enable-dnbd3" type="checkbox" name="enabled" {{checked_s}}>
+ <input id="enable-dnbd3" type="checkbox" name="enabled" {{enabled_checked_s}}>
<label for="enable-dnbd3">{{lang_enableDnbd3}}</label>
</div>
+ <div class="checkbox">
+ <input id="allow-nfs" type="checkbox" name="with-nfs" {{nfs_checked_s}}>
+ <label for="allow-nfs">{{lang_allowNfsFallback}}</label>
+ </div>
<button type="submit" name="action" value="toggle-usage" class="btn btn-success">
<span class="glyphicon glyphicon-floppy-disk"></span>
{{lang_save}}
@@ -58,7 +62,7 @@
<tbody>
{{#list}}
<tr>
- <td class="text-right">
+ <td class="text-right text-nowrap">
{{#slxOk}}
<span class="glyphicon glyphicon-ok text-success"></span>
{{/slxOk}}
@@ -73,11 +77,16 @@
{{/uptime}}
</td>
<td class="{{#self}}slx-bold{{/self}}">
- {{fixedip}}
{{#machineuuid}}
- <a href="?do=Statistics&uuid={{machineuuid}}">{{clientip}}</a>
- <div class="small">{{hostname}}</div>
+ <a class="pull-right btn btn-default btn-xs" href="?do=Statistics&uuid={{machineuuid}}">
+ <span class="glyphicon glyphicon-eye-open"></span>
+ </a>
{{/machineuuid}}
+ <a href="?do=dnbd3&amp;show=proxy&amp;server={{serverid}}">
+ {{fixedip}}
+ <span class="small">{{clientip}}</span>
+ </a>
+ <div class="small">{{hostname}}</div>
</td>
<td data-sort="int" data-sort-default="desc" data-sort-value="{{disktotal}}">
<div style="border:1px solid #ddd;background:linear-gradient(to right, #f85 {{diskUsePercent}}%, transparent {{diskUsePercent}}%)"
@@ -92,12 +101,7 @@
{{/errormsg}}
</td>
<td data-sort="int" data-sort-default="desc" class="text-right">
- {{#uptime}}
- <a href="?do=dnbd3&amp;show=clients&amp;server={{serverid}}">{{clientcount}}</a>
- {{/uptime}}
- {{^uptime}}
- -
- {{/uptime}}
+ {{clientcount}}
</td>
<td data-sort="int" data-sort-default="desc" data-sort-value="{{dnbd3lastseen}}" class="text-right text-nowrap">
{{dnbd3lastseen_s}}
@@ -124,7 +128,7 @@
</a>
{{/self}}
</td>
- <td class="text-right">
+ <td class="text-right text-nowrap">
{{#machineuuid}}
{{#rebootcontrol}}
<button class="btn btn-warning btn-xs reboot-btn" type="button" data-id="{{serverid}}"
@@ -241,7 +245,7 @@
<h4 class="modal-title"><b>{{lang_rebootProxyHeading}}</b></h4>
</div>
<div class="modal-body">
- <p>{{lang_rebootServerText}}</p>
+ <p>{{lang_rebootProxyText}}</p>
<p id="reboot-status"></p>
</div>
<div class="modal-footer text-right">