function ooPost(method,args,callback){ var _args = null; if (typeof(args) == 'string'){ _args = JSON.stringify(toArrayObject(args)); } else { _args = JSON.stringify(args); } var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); $.post('/plugins/run', {name:'op_load_balance', func:method, args:_args}, function(data) { layer.close(loadT); if (!data.status){ layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } if(typeof(callback) == 'function'){ callback(data); } },'json'); } function ooAsyncPost(method,args){ var _args = null; if (typeof(args) == 'string'){ _args = JSON.stringify(toArrayObject(args)); } else { _args = JSON.stringify(args); } return syncPost('/plugins/run', {name:'op_load_balance', func:method, args:_args}); } function ooPostCallbak(method, args, callback){ var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); var req_data = {}; req_data['name'] = 'op_load_balance'; req_data['func'] = method; args['version'] = '1.0'; if (typeof(args) == 'string'){ req_data['args'] = JSON.stringify(toArrayObject(args)); } else { req_data['args'] = JSON.stringify(args); } $.post('/plugins/callback', req_data, function(data) { layer.close(loadT); if (!data.status){ layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } if(typeof(callback) == 'function'){ callback(data); } },'json'); } function addNode(){ layer.open({ type: 1, area: ['450px','580px'], title: '添加节点', closeBtn: 1, shift: 5, shadeClose: true, btn:['提交','关闭'], content: "
\
\ IP地址\
\ \
\
\
\ 端口\
\ \
\
\
\ 验证文件路径\
\ \
\
\
\ 节点状态\
\ \
\
\
\ 权重\
\ \
\
\
\ 阈值\
\ 次\
\
\
\ 恢复时间\
\ 秒\
\
\ \
", success:function(){ }, yes:function(index) { var ip = $('input[name="ip"]').val(); var port = $('input[name="port"]').val(); var path = $('input[name="path"]').val(); var state = $('select[name="state"]').val(); var weight = $('input[name="weight"]').val(); var max_fails = $('input[name="max_fails"]').val(); var fail_timeout = $('input[name="fail_timeout"]').val(); ooPost('check_url', {ip:ip,port:port,path:path},function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg, function(){ if (rdata.status){ layer.close(index); $('#nodecon .nulltr').hide(); var tbody = ''; tbody +=''+ip+''; tbody +=''+port+''; tbody +=''+path+''; tbody +=""; tbody +=''; tbody +=''; tbody +=''; tbody +='删除'; tbody += ''; $('#nodecon').append(tbody); $('#nodecon .delete').click(function(){ $(this).parent().parent().remove(); if ($('#nodecon tr').length == 1 ){ $('#nodecon .nulltr').show(); } }); } },{ icon: rdata.status ? 1 : 2 }, 2000); }); } }); } function addBalance(){ layer.open({ type: 1, area: ['750px','460px'], title: '创建负载', closeBtn: 1, shift: 5, shadeClose: true, btn:['提交','关闭'], content: "
\
\ 域名\
\
\
\ 负载名称\
\ \
\
\
\ 节点调度\
\ \
\
\
\ 节点健康检查\
\ \
\
\
\ 节点\
\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
IP地址端口验证路径状态权重阀值恢复时间操作
当前节点为空,请至少添加一个普通节点
\
\ 添加节点\
\
\
", success:function(){ $('textarea[name="load_domain"]').attr('placeholder','每行填写一个域名,默认为80端口。\n泛解析添加方法 *.domain.com\n如另加端口格式为 www.domain.com:88'); var rval = getRandomString(6); $('input[name="upstream_name"]').val('load_balance_'+rval); $('.add_node').click(function(){ addNode(); }); }, yes:function(index) { var data = {}; var upstream_name = $('input[name="upstream_name"]').val(); if (upstream_name == ''){ layer.msg('负载名称不能为空!',{icon:0,time:2000,shade: [0.3, '#000']}); return; } var domain = $('textarea[name="load_domain"]').val().replace('http://','').replace('https://','').split("\n"); if (domain[0] == ''){ layer.msg('域名不能为空!',{icon:0,time:2000,shade: [0.3, '#000']}); return; } var domainlist = ''; for(var i=1; i\
\ 负载名称\
\
\
\ 节点调度\
\ \
\
\
\ 节点健康检查\
\ \
\
\
\ 节点\
\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
IP地址端口验证路径状态权重阀值恢复时间操作
当前节点为空,请至少添加一个普通节点
\
\ 添加节点\
\
\ ", success:function(){ $('input[name="upstream_name"]').val(data['upstream_name']); $('select[name="node_algo"]').val(data['node_algo']); $('input[name="node_health_check"]').prop('checked',false); if (data['node_health_check'] == 'ok'){ $('input[name="node_health_check"]').prop('checked',true); } var node_list = data['node_list']; if (node_list.length>0){ $('#nodecon .nulltr').hide(); } var state_option_list = { '1':'参与者', '2':'备份', '0':'停用', } for (var n in node_list) { var tbody = ''; tbody +=''+node_list[n]['ip']+''; tbody +=''+node_list[n]['port']+''; tbody +=''+node_list[n]['path']+''; tbody +=""; tbody +=''; tbody +=''; tbody +=''; tbody +='删除'; tbody += ''; $('#nodecon').append(tbody); } $('#nodecon .delete').click(function(){ $(this).parent().parent().remove(); if ($('#nodecon tr').length == 1 ){ $('#nodecon .nulltr').show(); } }); $('.add_node').click(function(){ addNode(); }); }, yes:function(index) { var data = {}; data['node_algo'] = $('select[name="node_algo"]').val(); data['node_health_check'] = 'fail'; if ($('input[name="node_health_check"]').prop('checked')){ data['node_health_check'] = 'ok'; } var node_list = []; $('#nodecon tr').each(function(){ var ip = $(this).find('td').eq(0).text(); var port = $(this).find('td').eq(1).text(); if (port == ''){return;} var path = $(this).find('td').eq(2).text(); var state = $(this).find('select[name="state"]').val(); var weight = $(this).find('input[name="weight"]').val(); var max_fails = $(this).find('input[name="max_fails"]').val(); var fail_timeout = $(this).find('input[name="fail_timeout"]').val(); var tmp = { ip:ip, port:port, path:path, state:state, weight:weight, max_fails:max_fails, fail_timeout:fail_timeout, } node_list.push(tmp); }); data['node_list'] = node_list; data['row'] = row; ooPostCallbak('edit_load_balance', data, function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg, function(){ layer.close(index); loadBalanceListRender(); },{ icon: rdata.status ? 1 : 2 }, 2000); }); } }); } function loadBalanceListRender(){ ooPost('load_balance_list', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); var alist = rdata.data; var tbody = ''; for (var i = 0; i < alist.length; i++) { tbody += ''; tbody += ''+alist[i]['domain']+''; tbody += ''+alist[i]['upstream_name']+''; tbody += ''+alist[i]['node_list'].length+''; tbody += '查看'; tbody += '查看'; tbody += '修改 | 删除'; tbody += ''; } $('#nodeTable').html(tbody); $('.nodeTablePage .Pcount').text('共'+alist.length+'条'); $('#nodeTable .edit').click(function(){ var row = $(this).data('row'); editBalance(alist[row],row); }); $('#nodeTable .log_look').click(function(){ var row = $(this).data('row'); var args = {'domain':alist[row]['domain']}; pluginRollingLogs('op_load_balance','','get_logs',JSON.stringify(args),20); }); $('#nodeTable .health_status').click(function(){ var row = $(this).data('row'); ooPost('get_health_status', {row:row}, function(rdata){ var rdata = $.parseJSON(rdata.data); var tval = ''; for (var i = 0; i < rdata.data.length; i++) { tval += ''; tval += ''+rdata.data[i]['name']+''; if (typeof(rdata.data[i]['down']) != 'undefined' && rdata.data[i]['down']){ tval += '不正常'; } else{ tval += '正常'; } tval += ''; } var tbody = "
\
\
\ \ \ \ \ \ \ \ "+tval+"\
地址状态
\
\
\
"; layer.open({ type: 1, area: ['500px','300px'], title: '节点状态', closeBtn: 1, shift: 5, shadeClose: true, btn:['提交','关闭'], content:tbody, }); }); }); $('#nodeTable .delete').click(function(){ var row = $(this).data('row'); ooPost('load_balance_delete', {row:row}, function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg, function(){ loadBalanceListRender(); },{ icon: rdata.status ? 1 : 2 }, 2000); }); }); }); } function loadBalanceList() { var body = '
\
\ \
\ \ \ \ \ \ \ \ \ \ \ \ \
网站负载名称节点日志状态操作
\
\
共0条
\
\
\
\
\ '; $(".soft-man-con").html(body); loadBalanceListRender(); }