Improve the load balancing pool edit screen.

This commit is contained in:
Scott Ullrich 2007-07-06 18:46:44 +00:00
parent aa1ab1da89
commit 8a58063d28
3 changed files with 152 additions and 15 deletions

View File

@ -35,7 +35,7 @@ function listtags() {
$ret = explode(" ", "element alias aliasurl allowedip cacert config columnitem disk dnsserver domainoverrides " .
"earlyshellcmd encryption-algorithm-option field fieldname hash-algorithm-option " .
"hosts group interface_array item key lbpool menu mobilekey mount onetoone option package passthrumac priv proxyarpnet " .
"queue pages pipe route row rule schedule service servernat servers earlyshellcmd shellcmd staticmap subqueue " .
"queue pages pipe route row rule schedule service servernat servers serversdisabled earlyshellcmd shellcmd staticmap subqueue " .
"timerange tunnel user vip virtual_server vlan winsserver ntpserver wolentry widget depends_on_package");
return $ret;
}

View File

@ -48,6 +48,7 @@ if (isset($id) && $a_pool[$id]) {
$pconfig['desc'] = $a_pool[$id]['desc'];
$pconfig['port'] = $a_pool[$id]['port'];
$pconfig['servers'] = &$a_pool[$id]['servers'];
$pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled'];
$pconfig['monitor'] = $a_pool[$id]['monitor'];
}
@ -82,13 +83,24 @@ if ($_POST) {
foreach($pconfig['servers'] as $svrent) {
if (!is_ipaddr($svrent)) {
if($_POST['type'] == "server") {
$input_errors[] = "{$svrent} is not a valid IP address.";
$input_errors[] = "{$svrent} is not a valid IP address (in \"enabled\" list).";
} else {
$split_ip = split("\|", $svrent);
/* if(!is_ipaddr($split_ip[0]))
$input_errors[] = "{$split_ip[0]} is not a valid IP address."; */
if(!is_ipaddr($split_ip[1]))
$input_errors[] = "{$split_ip[1]} is not a valid IP address.";
$input_errors[] = "{$split_ip[1]} is not a valid IP address (in \"enabled\" list).";
}
}
}
}
if (is_array($_POST['serversdisabled'])) {
foreach($pconfig['serversdisabled'] as $svrent) {
if (!is_ipaddr($svrent)) {
if($_POST['type'] == "server") {
$input_errors[] = "{$svrent} is not a valid IP address (in \"disabled\" list).";
} else {
$split_ip = split("\|", $svrent);
if(!is_ipaddr($split_ip[1]))
$input_errors[] = "{$split_ip[1]} is not a valid IP address (in \"disabled\" list).";
}
}
}
@ -139,6 +151,7 @@ if ($_POST) {
update_if_changed("description", $poolent['desc'], $_POST['desc']);
update_if_changed("port", $poolent['port'], $_POST['port']);
update_if_changed("servers", $poolent['servers'], $_POST['servers']);
update_if_changed("serversdisabled", $poolent['serversdisabled'], $_POST['serversdisabled']);
update_if_changed("monitor", $poolent['monitor'], $_POST['monitor']);
if (isset($id) && $a_pool[$id]) {
@ -398,8 +411,7 @@ function clearcombo(){
"balance") echo " CHECKED"; ?>><?=gettext("Load Balancing");?><br>
<input type="radio" name="behaviour" id="behaviour" value="failover"<?php if($pconfig['behaviour'] ==
"failover") echo " CHECKED"; ?>><?=gettext("Failover");?><br>
Load Balancing: both active. Failover order: top -> down.<br>
NOTE: Failover mode only applies to outgoing rules (multi-wan).
Load Balancing: both active. Failover order: top -&gt; down.
</td>
</tr>
@ -478,6 +490,28 @@ function clearcombo(){
<tbody>
<tr>
<td>
Disabled<br/>
<select id="serversDisabledSelect" name="serversdisabled[]" multiple="true" size="5">
<?php
if (is_array($pconfig['serversdisabled'])) {
foreach($pconfig['serversdisabled'] as $svrent) {
if($svrent != '') echo " <option value=\"{$svrent}\">{$svrent}</option>\n";
}
}
echo "</select>";
?>
<br/>
<input class="formbtn" type="button" name="removeDisabled" value="Remove" onclick="RemoveServerFromPool(document.iform, 'serversdisabled[]');" />
</td>
<td valign="middle">
<input class="formbtn" type="button" name="moveToEnabled" value=">" onclick="moveOptions(document.iform.serversDisabledSelect, document.iform.serversSelect);" /><br/>
<input class="formbtn" type="button" name="moveToDisabled" value="<" onclick="moveOptions(document.iform.serversSelect, document.iform.serversDisabledSelect);" />
</td>
<td>
Enabled (default)<br/>
<select id="serversSelect" name="servers[]" multiple="true" size="5">
<?php
@ -488,9 +522,12 @@ if (is_array($pconfig['servers'])) {
}
echo "</select>";
?>
<br/>
<input class="formbtn" type="button" name="removeEnabled" value="Remove" onclick="RemoveServerFromPool(document.iform, 'servers[]');" />
</td>
<td valign="top">
<input class="formbtn" type="button" name="button2" value="Remove from pool" onclick="RemoveServerFromPool(document.iform);">
<input class="formbtn" type="button" name="moveUp" value="Move up" onclick="up(document.iform.serversSelect);" /><br/>
<input class="formbtn" type="button" name="moveDown" value="Move down" onclick="down(document.iform.serversSelect);" />
</td>
</tr>
</tbody>
@ -500,7 +537,7 @@ echo "</select>";
<tr align="left">
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
<input name="Submit" type="submit" class="formbtn" value="Save" onClick="AllServers('serversSelect', true)">
<input name="Submit" type="submit" class="formbtn" value="Save" onClick="AllServers('serversSelect', true); AllServers('serversDisabledSelect', true);">
<?php if (isset($id) && $a_pool[$id]): ?>
<input name="id" type="hidden" value="<?=$id;?>">
<?php endif; ?>

View File

@ -33,16 +33,27 @@
function AddServerToPool(form) {
var IntOrIp
var theSel = form['servers[]'];
var enabledSel = form['servers[]'];
var disabledSel = form['serversdisabled[]'];
if (form.type.selectedIndex == 0)
IntOrIp = form.ipaddr;
else
IntOrIp = form.interface;
for(i = theSel.length - 1; i >= 0; i--)
// Check items in "enabled" list
for(i = enabledSel.length - 1; i >= 0; i--)
{
if(theSel.options[i].value == IntOrIp.value) {
alert("IP Address Already In List");
if(enabledSel.options[i].value == IntOrIp.value) {
alert("IP Address Already In 'Enabled' List");
return true;
}
}
// Check items in "disabled" list
for(i = disabledSel.length - 1; i >= 0; i--)
{
if(disabledSel.options[i].value == IntOrIp.value) {
alert("IP Address Already In 'Disabled' List");
return true;
}
}
@ -72,9 +83,9 @@ function AllServers(id, selectAll) {
}
function RemoveServerFromPool(form)
function RemoveServerFromPool(form, field)
{
var theSel = form['servers[]'];
var theSel = form[field];
var selIndex = theSel.selectedIndex;
if (selIndex != -1) {
for(i=theSel.length-1; i>=0; i--)
@ -89,3 +100,92 @@ function RemoveServerFromPool(form)
}
}
}
function addOption(theSel, theText, theValue)
{
var newOpt = new Option(theText, theValue);
var selLength = theSel.length;
theSel.options[selLength] = newOpt;
}
function deleteOption(theSel, theIndex)
{
var selLength = theSel.length;
if(selLength>0)
{
theSel.options[theIndex] = null;
}
}
function moveOptions(theSelFrom, theSelTo)
{
var selLength = theSelFrom.length;
var selectedText = new Array();
var selectedValues = new Array();
var selectedCount = 0;
var i;
// Find the selected Options in reverse order
// and delete them from the 'from' Select.
for(i=selLength-1; i>=0; i--)
{
if(theSelFrom.options[i].selected)
{
selectedText[selectedCount] = theSelFrom.options[i].text;
selectedValues[selectedCount] = theSelFrom.options[i].value;
deleteOption(theSelFrom, i);
selectedCount++;
}
}
// Add the selected text/values in reverse order.
// This will add the Options to the 'to' Select
// in the same order as they were in the 'from' Select.
for(i=selectedCount-1; i>=0; i--)
{
addOption(theSelTo, selectedText[i], selectedValues[i]);
}
}
// functions up() and down() modified from http://www.babailiica.com/js/sorter/
function up(obj) {
var sel = new Array();
for (var i=0; i<obj.length; i++) {
if (obj[i].selected == true) {
sel[sel.length] = i;
}
}
for (i in sel) {
if (sel[i] != 0 && !obj[sel[i]-1].selected) {
var tmp = new Array(obj[sel[i]-1].text, obj[sel[i]-1].value);
obj[sel[i]-1].text = obj[sel[i]].text;
obj[sel[i]-1].value = obj[sel[i]].value;
obj[sel[i]].text = tmp[0];
obj[sel[i]].value = tmp[1];
obj[sel[i]-1].selected = true;
obj[sel[i]].selected = false;
}
}
}
function down(obj) {
var sel = new Array();
for (var i=obj.length-1; i>-1; i--) {
if (obj[i].selected == true) {
sel[sel.length] = i;
}
}
for (i in sel) {
if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
var tmp = new Array(obj[sel[i]+1].text, obj[sel[i]+1].value);
obj[sel[i]+1].text = obj[sel[i]].text;
obj[sel[i]+1].value = obj[sel[i]].value;
obj[sel[i]].text = tmp[0];
obj[sel[i]].value = tmp[1];
obj[sel[i]+1].selected = true;
obj[sel[i]].selected = false;
}
}
}