From fe07a61d544007e2cc7e746d354467a9e5885df7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 5 Nov 2020 10:51:20 +0100 Subject: [dnbd3] Allow overriding certain server.conf values for proxy As requested in issue #3328 you can now override the default values of certain settings. It's kept simple, labeled "advanced config" with a little disclaimer, as you can easily enter stupid values that will render the dnbd3-proxy useless. --- modules-available/dnbd3/inc/dnbd3util.inc.php | 8 ++++ modules-available/dnbd3/lang/de/template-tags.json | 2 + modules-available/dnbd3/lang/en/template-tags.json | 2 + modules-available/dnbd3/page.inc.php | 22 ++++++++- .../dnbd3/templates/fragment-server-settings.html | 56 +++++++++++++++------- .../dnbd3/templates/page-serverlist.html | 4 +- 6 files changed, 73 insertions(+), 21 deletions(-) diff --git a/modules-available/dnbd3/inc/dnbd3util.inc.php b/modules-available/dnbd3/inc/dnbd3util.inc.php index fdbf9190..8e355370 100644 --- a/modules-available/dnbd3/inc/dnbd3util.inc.php +++ b/modules-available/dnbd3/inc/dnbd3util.inc.php @@ -190,6 +190,14 @@ class Dnbd3Util { // Background replication ConfigHolder::add('SLX_DNBD3_BGR', '1'); } + // Extra config options + if (!empty($modeData['advancedSettings'])) { + $str = ''; + foreach ($modeData['advancedSettings'] as $k => $v) { + $str .= str_replace(["\n", "\r", "\t", ' '], '', $k . '=' . $v) . ' '; + } + ConfigHolder::add('SLX_DNBD3_EXTRA', $str); + } ConfigHolder::add('SLX_ADDONS', '', 1000); ConfigHolder::add('SLX_SHUTDOWN_TIMEOUT', '', 1000); ConfigHolder::add('SLX_SHUTDOWN_SCHEDULE', '', 1000); diff --git a/modules-available/dnbd3/lang/de/template-tags.json b/modules-available/dnbd3/lang/de/template-tags.json index f7323530..532d1c32 100644 --- a/modules-available/dnbd3/lang/de/template-tags.json +++ b/modules-available/dnbd3/lang/de/template-tags.json @@ -1,5 +1,7 @@ { "lang_addServer": "Server hinzuf\u00fcgen", + "lang_advancedConfigDesc": "Hier handelt es sich um Optionen, die normalerweise keiner weiteren Anpassung bed\u00fcrfen, im Einzelfall jedoch die Performance verbessern k\u00f6nnen, bzw. bessere Anpassung an lokale Gegebenheiten erm\u00f6glichen. Unpassende Werte k\u00f6nnen einen Proxy-Server jedoch effektiv unbrauchbar machen. \u00c4nderungen dieser Werte erfordern ebenfalls einen Neustart des Proxies.", + "lang_advancedProxyConfig": "Erweiterte Konfiguration", "lang_allowNfsFallback": "NFS-Fallback aktivieren", "lang_allowedSubnets": "Zum Zugriff freigegebene Subnets", "lang_altservers": "Uplinks", diff --git a/modules-available/dnbd3/lang/en/template-tags.json b/modules-available/dnbd3/lang/en/template-tags.json index a787cfdb..483991be 100644 --- a/modules-available/dnbd3/lang/en/template-tags.json +++ b/modules-available/dnbd3/lang/en/template-tags.json @@ -1,5 +1,7 @@ { "lang_addServer": "Add server", + "lang_advancedConfigDesc": "These are settings to further customize the proxy server. Usually the default values are fine, but under certain local circumstances it might make sense to change certain values to improve performance. Entering bogus values for some of these might effectively render the proxy unusable. Any change in these values requires a restart of the proxy.", + "lang_advancedProxyConfig": "Advanced configuration", "lang_allowNfsFallback": "NFS fallback", "lang_allowedSubnets": "Allowed subnets", "lang_altservers": "Uplinks", diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 7721dac1..9ae7858e 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -66,8 +66,15 @@ class Page_Dnbd3 extends Page 'fixedip' => $overrideIp, )); } + $advancedSettings = []; + foreach (Request::post('extra', [], 'array') as $name => $value) { + $value = preg_replace('/[^0-9]/', '', $value); + if ($value === '') + continue; + $advancedSettings[$name] = $value; + } RunMode::setRunMode($server['machineuuid'], 'dnbd3', 'proxy', - json_encode(compact('bgr', 'firewall')), false); + json_encode(compact('bgr', 'firewall', 'advancedSettings')), false); } private function toggleUsage() @@ -533,6 +540,19 @@ class Page_Dnbd3 extends Page } $modeData = (array)json_decode($rm[$server['machineuuid']]['modedata'], true); $server += $modeData + Dnbd3Util::defaultRunmodeConfig(); + $extraSettings = $server['advancedSettings'] ?? []; + $server['advancedSettings'] = []; + foreach (['dnbd3.serverPenalty', + 'dnbd3.clientPenalty', + 'dnbd3.bgrMinClient', + 'dnbd3.bgrWindowSize', + 'dnbd3.autoFreeDiskSpaceDelay', + 'limits.maxClients', + 'limits.maxImages', + 'limits.maxPayload', + 'limits.maxReplicationSize'] as $item) { + $server['advancedSettings'][] = ['name' => $item, 'value' => $extraSettings[$item] ?? '']; + } echo Render::parse('fragment-server-settings', $server); } diff --git a/modules-available/dnbd3/templates/fragment-server-settings.html b/modules-available/dnbd3/templates/fragment-server-settings.html index be3e74e2..bd261bdd 100644 --- a/modules-available/dnbd3/templates/fragment-server-settings.html +++ b/modules-available/dnbd3/templates/fragment-server-settings.html @@ -1,22 +1,42 @@ -
- - -
-{{lang_backgroundReplicationInfo}} -

+
+
+
+ + +
+ {{lang_backgroundReplicationInfo}} +

-
- - -
-{{lang_firewallInfo}} -

+
+ + +
+ {{lang_firewallInfo}} +

-
- - -
-{{lang_overrideIpInfo}} -
+
+ + +
+ {{lang_overrideIpInfo}} +

+ +
+
+

{{lang_advancedProxyConfig}}

+

{{lang_advancedConfigDesc}}

+ {{#advancedSettings}} +
+
+ +
+
+ +
+
+ {{/advancedSettings}} +
+
\ 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 c44eef0a..cdbd0789 100644 --- a/modules-available/dnbd3/templates/page-serverlist.html +++ b/modules-available/dnbd3/templates/page-serverlist.html @@ -223,8 +223,8 @@ -