diff --git a/app/create_db.py b/app/create_db.py
index 29dd111b..ef5bf612 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -797,7 +797,7 @@ def update_db_v_6_3_8():
def update_ver():
try:
- Version.update(version='6.3.9.0').execute()
+ Version.update(version='6.3.10.0').execute()
except Exception:
print('Cannot update version')
diff --git a/app/modules/config/runtime.py b/app/modules/config/runtime.py
index ac81572f..b85b06ad 100644
--- a/app/modules/config/runtime.py
+++ b/app/modules/config/runtime.py
@@ -127,8 +127,8 @@ def change_ip_and_port() -> None:
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
- MASTERS = sql.is_master(serv)
- for master in MASTERS:
+ masters = sql.is_master(serv)
+ for master in masters:
if master[0] is not None:
cmd = 'echo "set server %s/%s addr %s port %s check-port %s" |nc %s %s' % (
backend_backend, backend_server, backend_ip, backend_port, backend_port, master[0], haproxy_sock_port)
@@ -165,31 +165,59 @@ def change_ip_and_port() -> None:
config_mod.master_slave_upload_and_restart(serv, cfg, just_save='save')
-def change_maxconn() -> None:
- frontend = common.checkAjaxInput(form.getvalue('maxconn_frontend'))
- maxconn = common.checkAjaxInput(form.getvalue('maxconn_int'))
+def change_maxconn_global() -> None:
+ if form.getvalue('maxconn_global') is None:
+ print('error: Maxconn must be integer and not 0')
+ return
+ maxconn = common.checkAjaxInput(form.getvalue('maxconn_global'))
+ haproxy_sock_port = sql.get_setting('haproxy_sock_port')
+ masters = sql.is_master(serv)
+
+ for master in masters:
+ if master[0] is not None:
+ cmd = f'echo "set maxconn global {maxconn}" |nc {master[0]} {haproxy_sock_port}'
+ output, stderr = server_mod.subprocess_execute(cmd)
+ roxywi_common.logging(master[0], f'Maxconn has been changed. Globally to {maxconn}', login=1, keep_history=1, service='haproxy')
+
+ cmd = f'echo "set maxconn global {maxconn}" |nc {serv} {haproxy_sock_port}'
+ print(cmd)
+ roxywi_common.logging(serv, f'Maxconn has been changed. Globally to {maxconn}', login=1, keep_history=1, service='haproxy')
+ output, stderr = server_mod.subprocess_execute(cmd)
+
+ if stderr != '':
+ print(stderr[0])
+ elif output[0] == '':
+ configs_dir = get_config_var.get_config_var('configs', 'haproxy_save_configs_dir')
+ cfg = f"{configs_dir}{serv}-{get_date.return_date('config')}.cfg"
+
+ config_mod.get_config(serv, cfg)
+ cmd = 'string=`grep global %s -n -A5 |grep maxcon -n |awk -F":" \'{print $2}\'|awk -F"-" \'{print $1}\'` ' \
+ '&& sed -Ei "$( echo $string)s/[0-9]+/%s/g" %s' % (cfg, maxconn, cfg)
+ server_mod.subprocess_execute(cmd)
+ config_mod.master_slave_upload_and_restart(serv, cfg, just_save='save')
+ print(f'success: Maxconn globally has been set to {maxconn} ')
+ else:
+ print(f'error: {output[0]}')
+
+
+def change_maxconn_frontend() -> None:
if form.getvalue('maxconn_int') is None:
print('error: Maxconn must be integer and not 0')
return
+ frontend = common.checkAjaxInput(form.getvalue('maxconn_frontend'))
+ maxconn = common.checkAjaxInput(form.getvalue('maxconn_int'))
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
-
masters = sql.is_master(serv)
+
for master in masters:
if master[0] is not None:
- if frontend == 'global':
- cmd = 'echo "set maxconn %s %s" |nc %s %s' % (frontend, maxconn, master[0], haproxy_sock_port)
- else:
- cmd = 'echo "set maxconn frontend %s %s" |nc %s %s' % (frontend, maxconn, master[0], haproxy_sock_port)
+ cmd = f'echo "set maxconn frontend {frontend} {maxconn}" |nc {master[0]} {haproxy_sock_port}'
output, stderr = server_mod.subprocess_execute(cmd)
roxywi_common.logging(master[0], f'Maxconn has been changed. On: {frontend} to {maxconn}', login=1, keep_history=1, service='haproxy')
- if frontend == 'global':
- cmd = 'echo "set maxconn %s %s" |nc %s %s' % (frontend, maxconn, serv, haproxy_sock_port)
- else:
- cmd = 'echo "set maxconn frontend %s %s" |nc %s %s' % (frontend, maxconn, serv, haproxy_sock_port)
- print(cmd)
+ cmd = f'echo "set maxconn frontend {frontend} {maxconn}" |nc {serv} {haproxy_sock_port}'
roxywi_common.logging(serv, f'Maxconn has been changed. On: {frontend} to {maxconn}', login=1, keep_history=1, service='haproxy')
output, stderr = server_mod.subprocess_execute(cmd)
@@ -209,6 +237,44 @@ def change_maxconn() -> None:
print(f'error: {output[0]}')
+def change_maxconn_backend() -> None:
+ if form.getvalue('maxconn_int') is None:
+ print('error: Maxconn must be integer and not 0')
+ return
+
+ backend = common.checkAjaxInput(form.getvalue('maxconn_backend'))
+ backend_server = common.checkAjaxInput(form.getvalue('maxconn_backend_server'))
+ maxconn = common.checkAjaxInput(form.getvalue('maxconn_int'))
+ haproxy_sock_port = sql.get_setting('haproxy_sock_port')
+
+ masters = sql.is_master(serv)
+ for master in masters:
+ if master[0] is not None:
+ cmd = f'echo "set maxconn server {backend}/{backend_server} {maxconn}" |nc {master[0]} {haproxy_sock_port}'
+ output, stderr = server_mod.subprocess_execute(cmd)
+ roxywi_common.logging(master[0], f'Maxconn has been changed. On: {backend}/{backend_server} to {maxconn}', login=1, keep_history=1, service='haproxy')
+
+ cmd = f'echo "set maxconn server {backend}/{backend_server} {maxconn}" |nc {serv} {haproxy_sock_port}'
+ print(cmd)
+ roxywi_common.logging(serv, f'Maxconn has been changed. On: {backend} to {maxconn}', login=1, keep_history=1, service='haproxy')
+ output, stderr = server_mod.subprocess_execute(cmd)
+
+ if stderr != '':
+ print(stderr[0])
+ elif output[0] == '':
+ configs_dir = get_config_var.get_config_var('configs', 'haproxy_save_configs_dir')
+ cfg = f"{configs_dir}{serv}-{get_date.return_date('config')}.cfg"
+
+ config_mod.get_config(serv, cfg)
+ cmd = 'string=`grep %s %s -n -A10 |grep maxcon -n|grep %s |awk -F":" \'{print $2}\'|awk -F"-" \'{print $1}\'` ' \
+ '&& sed -Ei "$( echo $string)s/maxconn [0-9]+/maxconn %s/g" %s' % (backend, cfg, backend_server, maxconn, cfg)
+ server_mod.subprocess_execute(cmd)
+ config_mod.master_slave_upload_and_restart(serv, cfg, just_save='save')
+ print(f'success: Maxconn for {backend}/{backend_server} has been set to {maxconn} ')
+ else:
+ print(f'error: {output[0]}')
+
+
def table_select():
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'), autoescape=True,
@@ -245,7 +311,7 @@ def delete_ip_from_stick_table() -> None:
cmd = f'echo "clear table {table} key {ip}" |nc {serv} {haproxy_sock_port}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr[0] != '':
- print('error: ' + stderr[0])
+ print(f'error: {stderr[0]}')
def clear_stick_table() -> None:
@@ -255,7 +321,7 @@ def clear_stick_table() -> None:
cmd = f'echo "clear table {table} " |nc {serv} {haproxy_sock_port}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr[0] != '':
- print('error: ' + stderr[0])
+ print(f'error: {stderr[0]}')
def list_of_lists() -> None:
@@ -345,11 +411,11 @@ def select_session() -> None:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'), autoescape=True,
extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True)
- serv = common.checkAjaxInput(form.getvalue('sessions_select'))
+ session = common.checkAjaxInput(form.getvalue('sessions_select'))
lang = roxywi_common.get_user_lang()
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
- cmd = f'echo "show sess" |nc {serv} {haproxy_sock_port}'
+ cmd = f'echo "show sess" |nc {session} {haproxy_sock_port}'
output, stderr = server_mod.subprocess_execute(cmd)
template = env.get_template('ajax/sessions_table.html')
@@ -359,10 +425,10 @@ def select_session() -> None:
def show_session() -> None:
- serv = common.checkAjaxInput(form.getvalue('sessions_select_show'))
+ session = common.checkAjaxInput(form.getvalue('sessions_select_show'))
sess_id = common.checkAjaxInput(form.getvalue('sessions_select_id'))
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
- cmd = f'echo "show sess {sess_id}" |nc {serv} {haproxy_sock_port}'
+ cmd = f'echo "show sess {sess_id}" |nc {session} {haproxy_sock_port}'
output, stderr = server_mod.subprocess_execute(cmd)
diff --git a/app/modules/db/sql.py b/app/modules/db/sql.py
index 67915e88..b00b184c 100755
--- a/app/modules/db/sql.py
+++ b/app/modules/db/sql.py
@@ -2282,6 +2282,8 @@ def select_update_keep_alive_restart(server_id: int, service: str) -> int:
out_error(e)
else:
return restarted or 0
+ finally:
+ return 0
def update_keep_alive_restart(server_id: int, service: str, restarted: int) -> None:
diff --git a/app/options.py b/app/options.py
index bc471a49..ee615d93 100644
--- a/app/options.py
+++ b/app/options.py
@@ -113,10 +113,20 @@ if form.getvalue('maxconn_select') is not None:
serv = common.checkAjaxInput(form.getvalue('maxconn_select'))
runtime.get_backends_from_config(serv, backends='frontend')
+if form.getvalue('maxconn_global') is not None:
+ import modules.config.runtime as runtime
+
+ runtime.change_maxconn_global()
+
if form.getvalue('maxconn_frontend') is not None:
import modules.config.runtime as runtime
- runtime.change_maxconn()
+ runtime.change_maxconn_frontend()
+
+if form.getvalue('maxconn_backend') is not None:
+ import modules.config.runtime as runtime
+
+ runtime.change_maxconn_backend()
if form.getvalue('table_serv_select') is not None:
import modules.config.runtime as runtime
diff --git a/app/templates/ajax/new_ssh.html b/app/templates/ajax/new_ssh.html
index d3a0bf51..4fde6128 100644
--- a/app/templates/ajax/new_ssh.html
+++ b/app/templates/ajax/new_ssh.html
@@ -1,7 +1,7 @@
{% import 'languages/'+lang|default('en')+'.html' as lang %}
{% for ssh in sshs %}
-
+ |
|
diff --git a/app/templates/include/admin_servers.html b/app/templates/include/admin_servers.html
index a06ee421..41de747e 100644
--- a/app/templates/include/admin_servers.html
+++ b/app/templates/include/admin_servers.html
@@ -128,7 +128,7 @@
{% endif %}
{% endfor %}
-
+
|
diff --git a/app/templates/runtimeapi.html b/app/templates/runtimeapi.html
index f082f93d..a523fe1a 100644
--- a/app/templates/runtimeapi.html
+++ b/app/templates/runtimeapi.html
@@ -80,34 +80,103 @@
{% if role <= 3 %}
-
- {{lang.words.server|title()}} |
- {{lang.words.select|title()}} {{lang.words.frontend|title()}} |
- Maxconn |
- |
-
-
-
- |
+
+ {{lang.words.frontends|title()}}
+
+
+ {{lang.words.server|title()}} |
+ {{lang.words.select|title()}} {{lang.words.frontend|title()}} |
+ Maxconn |
+ |
+
+
+
+
+
+ |
+
+
- |
-
-
- |
-
- {{ input('maxconnint', title=lang.words.enter|title() + ' maxconn', type="number", required='required') }}
- |
-
-
- |
+
+
+ {{ input('maxconnint', title=lang.words.enter|title() + ' maxconn', type="number", required='required') }}
+ |
+
+
+ |
+
+
+
+
+
+ {{lang.words.backends|title()}}
+
+
+ {{lang.words.server|title()}} |
+ {{lang.words.select|title()}} {{lang.words.backend|title()}} |
+ {{lang.words.select|title()}} {{lang.words.server}} |
+ Maxconn |
+ |
+
+
+
+
+
+ |
+ |
+ |
+
+ {{ input('maxconn_backend_int', title=lang.words.enter|title() + ' maxconn', type="number", required='required') }}
+ |
+
+
+ |
-
+
+
@@ -136,12 +205,10 @@
|
-
+
|
-
+
|
{{ input('backend_ip', title=lang.words.set|title()+' '+lang.words.new + ' ' + lang.words.server + ' IP', required='required', size='16') }}
diff --git a/inc/runtimeapi.js b/inc/runtimeapi.js
index 5a4353a5..4023cc84 100644
--- a/inc/runtimeapi.js
+++ b/inc/runtimeapi.js
@@ -4,7 +4,7 @@ function showRuntime() {
} else {
saveCheck = "";
}
- $.ajax( {
+ $.ajax({
url: "options.py",
data: {
servaction: $('#servaction').val(),
@@ -14,17 +14,18 @@ function showRuntime() {
token: $('#token').val()
},
type: "POST",
- success: function( data ) {
+ success: function (data) {
$("#ajaxruntime").html(data);
- }
+ }
} );
}
$( function() {
$('#runtimeapiform').submit(function() {
showRuntime();
return false;
- });
+ });
$( "#maxconn_select" ).on('selectmenuchange',function() {
+ let server_ip = $('#maxconn_select').val();
$.ajax( {
url: "options.py",
data: {
@@ -33,27 +34,44 @@ $( function() {
},
type: "POST",
success: function( data ) {
- data = data.replace(/\s+/g,' ');
- if (data.indexOf('error: ') != '-1') {
- toastr.error(data);
- } else {
- var value = data.split(' ')
- $('#maxconnfront').find('option').remove();
- $('#maxconnfront').append($("").attr("value","disabled").text("Choose Frontend"));
- $('#maxconnfront').append($("").attr("value","global").text("global"));
-
- for(let i = 0; i < data.split(' ').length; i++){
- if(value[i] != '') {
- $('#maxconnfront').append($("")
- .attr("value",value[i])
- .text(value[i]));
- }
- }
- $('#maxconnfront').selectmenu("refresh");
- }
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1') {
+ toastr.error(data);
+ } else {
+ generate_select(data, '#maxconnfront');
+ }
}
} );
});
+ $('#maxconnbackend').on('selectmenuchange', function (){
+ let server_ip = $('#maxconn_backend_select').val();
+ let backend = $('#maxconnbackend').val();
+ get_backend_servers(server_ip, backend, '#maxconn_backend_server', 0);
+ });
+ $( "#maxconn_backend_select" ).on('selectmenuchange',function() {
+ let server_ip = $('#maxconn_backend_select').val();
+ get_backends(server_ip, '#maxconnbackend', 0);
+ });
+ $('#maxconnglobalform').submit(function() {
+ $.ajax( {
+ url: "options.py",
+ data: {
+ serv: $('#maxconn_global_select').val(),
+ maxconn_global: $('#maxconnintglobal').val(),
+ token: $('#token').val()
+ },
+ type: "POST",
+ success: function( data ) {
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.success(data);
+ }
+ }
+ } );
+ return false;
+ });
$('#maxconnform').submit(function() {
$.ajax( {
url: "options.py",
@@ -65,80 +83,46 @@ $( function() {
},
type: "POST",
success: function( data ) {
- data = data.replace(/\s+/g,' ');
- if (data.indexOf('error: ') != '-1') {
- toastr.error(data);
- } else {
- toastr.success(data);
- }
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.success(data);
+ }
+ }
+ } );
+ return false;
+ });
+ $('#maxconnbackform').submit(function() {
+ $.ajax( {
+ url: "options.py",
+ data: {
+ serv: $('#maxconn_backend_select').val(),
+ maxconn_backend: $('#maxconnbackend').val(),
+ maxconn_backend_server: $('#maxconn_backend_server').val(),
+ maxconn_int: $('#maxconn_backend_int').val(),
+ token: $('#token').val()
+ },
+ type: "POST",
+ success: function( data ) {
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.success(data);
+ }
}
} );
return false;
});
$( "#ip_select" ).on('selectmenuchange',function() {
- $.ajax( {
- url: "options.py",
- data: {
- ip_select: $('#ip_select').val(),
- serv: $('#ip_select').val(),
- token: $('#token').val()
- },
- type: "POST",
- success: function( data ) {
- data = data.replace(/\s+/g,' ');
- if (data.indexOf('error: ') != '-1') {
- toastr.error(data);
- } else {
- var value = data.split(' ')
- $('#ipbackend').find('option').remove();
- $('#ipbackend').append($("").attr("value","disabled").text("------"));
- $('#backend_server').find('option').remove();
- $('#backend_port').val('');
- $('#backend_ip').val('');
- for(let i = 0; i < data.split(' ').length; i++){
- if(value[i] != '') {
- $('#ipbackend').append($("")
- .attr("value",value[i])
- .text(value[i]));
- }
- }
- $('#ipbackend').selectmenu("refresh");
- $('#backend_server').selectmenu("refresh");
- }
- }
- } );
+ let server_ip = $('#ip_select').val();
+ get_backends(server_ip, '#ipbackend', 1);
});
$( "#ipbackend" ).on('selectmenuchange',function() {
- $.ajax( {
- url: "options.py",
- data: {
- serv: $('#ip_select').val(),
- ipbackend: $('#ipbackend').val(),
- token: $('#token').val()
- },
- type: "POST",
- success: function( data ) {
- data = data.replace(/\s+/g,' ');
- if (data.indexOf('error: ') != '-1') {
- toastr.error(data);
- } else {
- var value = data.split(' ')
- $('#backend_server').find('option').remove();
- $('#backend_server').append($("").attr("value","disabled").text("------"));
- $('#backend_port').val('');
- $('#backend_ip').val('');
- for(let i = 0; i < data.split(' ').length; i++){
- if(value[i] != ' ') {
- value[i] = value[i].replace(/\s+/g,'');
- $('#backend_server').append($("")
- .attr("value",value[i])
- .text(value[i]));
- }
- }
- $('#backend_server').selectmenu("refresh");
- }
- }
- } );
+ let server_ip = $('#ip_select').val();
+ let backend = $('#ipbackend').val();
+ get_backend_servers(server_ip, backend, '#backend_server', 1);
});
$( "#backend_server" ).on('selectmenuchange',function() {
$('#backend_ip').val();
@@ -168,7 +152,7 @@ $( function() {
} );
});
$('#runtimeapiip').submit(function() {
- $.ajax( {
+ $.ajax({
url: "options.py",
data: {
serv: $('#ip_select').val(),
@@ -179,13 +163,13 @@ $( function() {
token: $('#token').val()
},
type: "POST",
- success: function( data ) {
- data = data.replace(/\s+/g,' ');
- if (data.indexOf('error: ') != '-1' || data.indexOf('Invalid ') != '-1') {
- toastr.error(data);
- } else {
- toastr.success(data);
- }
+ success: function (data) {
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1' || data.indexOf('Invalid ') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.success(data);
+ }
}
} );
return false;
@@ -204,19 +188,7 @@ $( function() {
if (data.indexOf('error: ') != '-1') {
toastr.error(data);
} else {
- var value = data.split(',')
- $('#table_select').find('option').remove();
- $('#table_select').append($("").attr("value","All").text("All"));
-
- for(let i = 0; i < data.split(',').length; i++){
- if(value[i] != '') {
- value[i] = value[i].replace(/\s+/g,'');
- $('#table_select').append($("")
- .attr("value",value[i])
- .text(value[i]));
- }
- }
- $('#table_select').selectmenu("refresh");
+ generate_select(data, '#table_select', 'All', ',');
}
}
} );
@@ -234,7 +206,7 @@ $( function() {
return false;
});
$( "#list_serv_select" ).on('selectmenuchange',function() {
- $.ajax( {
+ $.ajax({
url: "options.py",
data: {
serv: $('#list_serv_select').val(),
@@ -242,7 +214,7 @@ $( function() {
token: $('#token').val()
},
type: "POST",
- success: function( data ) {
+ success: function (data) {
data = data.replace(/, /g, ',');
if (data.indexOf('error: ') != '-1') {
toastr.error(data);
@@ -271,8 +243,6 @@ $( function() {
}
} );
});
-
-
});
function deleteTableEntry(id, table, ip) {
$(id).parent().parent().css("background-color", "#f2dede");
@@ -327,7 +297,7 @@ function getTable() {
} else {
$("#ajaxtable").html(data);
$( "input[type=submit], button" ).button();
- $.getScript("/inc/script.js");
+ $.getScript("/inc/script-6.3.9.js");
$.getScript("/inc/fontawesome.min.js");
FontAwesomeConfig = { searchPseudoElements: true, observeMutations: false };
}
@@ -350,7 +320,7 @@ function getList() {
} else {
$("#ajaxlist").html(data);
$( "input[type=submit], button" ).button();
- $.getScript("/inc/script.js");
+ $.getScript("/inc/script-6.3.9.js");
$.getScript("/inc/fontawesome.min.js");
FontAwesomeConfig = { searchPseudoElements: true, observeMutations: false };
}
@@ -408,7 +378,6 @@ function addNewIp() {
$( "#list_add_ip_form" ).dialog("destroy" );
toastr.success('IP ' + ip + ' has been added');
toastr.info('Do not forget upload updated list to the properly server. Restart does not need');
-
}
}
});
@@ -428,7 +397,7 @@ function getSessions() {
} else {
$("#ajaxsessions").html(data);
$( "input[type=submit], button" ).button();
- $.getScript("/inc/script.js");
+ $.getScript("/inc/script-6.3.9.js");
$.getScript("/inc/fontawesome.min.js");
FontAwesomeConfig = { searchPseudoElements: true, observeMutations: false };
}
@@ -489,3 +458,68 @@ function deleteSession(id, sess_id) {
}
} );
}
+function get_backends(server_ip, backends_select_tag, ip_and_port=0) {
+ $.ajax({
+ url: "options.py",
+ data: {
+ ip_select: 1,
+ serv: server_ip,
+ token: $('#token').val()
+ },
+ type: "POST",
+ success: function (data) {
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1') {
+ toastr.error(data);
+ } else {
+ generate_select(data, backends_select_tag);
+ if (ip_and_port == 1) {
+ $('#backend_server').find('option').remove();
+ $('#backend_server').selectmenu("refresh");
+ $('#backend_port').val('');
+ $('#backend_ip').val('');
+ }
+ }
+ }
+ } );
+}
+function get_backend_servers(server_ip, backend, servers_select_tag, ip_and_port=0) {
+ $.ajax({
+ url: "options.py",
+ data: {
+ serv: server_ip,
+ ipbackend: backend,
+ token: $('#token').val()
+ },
+ type: "POST",
+ success: function (data) {
+ data = data.replace(/\s+/g, ' ');
+ if (data.indexOf('error: ') != '-1') {
+ toastr.error(data);
+ } else {
+ generate_select(data, servers_select_tag);
+ if (ip_and_port == 1) {
+ $('#backend_port').val('');
+ $('#backend_ip').val('');
+ }
+ }
+ }
+ } );
+}
+function generate_select(values, select_tag, custom_value=0, separator=' ') {
+ var value = values.split(separator)
+ $(select_tag).find('option').remove();
+ $(select_tag).append($("").attr("value", "disabled").text("------"));
+ if (custom_value) {
+ $(select_tag).append($("").attr("value", custom_value).text(custom_value));
+ }
+ for (let i = 0; i < values.split(separator).length; i++) {
+ if (value[i] != ' ' && value[i] != '' ) {
+ value[i] = value[i].replace(/\s+/g, '');
+ $(select_tag).append($("")
+ .attr("value", value[i])
+ .text(value[i]));
+ }
+ }
+ $(select_tag).selectmenu("refresh");
+}
|