From 8eb2403e4bf6219ed269f51833cee916d7caa9b8 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Sat, 4 May 2024 14:34:38 +0800 Subject: [PATCH] update --- plugins/mongodb/index.py | 96 +++++++++++++++++ plugins/mongodb/js/mongodb.js | 188 +++++++++++++++++++++++++++++++++- 2 files changed, 283 insertions(+), 1 deletion(-) diff --git a/plugins/mongodb/index.py b/plugins/mongodb/index.py index 91c6184e9..dcc786dd4 100755 --- a/plugins/mongodb/index.py +++ b/plugins/mongodb/index.py @@ -926,6 +926,92 @@ def setDbAccess(): return mw.returnJson(True, '设置成功!') +def getReplConfigData(): + import json + f = getServerDir()+'/repl.json' + if os.path.exists(f): + c = mw.readFile(f) + return json.loads(c) + else: + t = {} + t['name'] = '' + t['nodes'] = [] + mw.writeFile(f, mw.getJson(t)) + return t + +def setReplConfigData(c): + import json + f = getServerDir()+'/repl.json' + mw.writeFile(f, mw.getJson(c)) + return c + +def getReplConfig(): + c = getReplConfigData() + return mw.returnJson(True, 'ok!', c) + +def replSetName(): + args = getArgs() + data = checkArgs(args, ['name']) + if not data[0]: + return data[1] + + c = getReplConfigData() + c['name'] = args['name'] + setReplConfigData(c) + return mw.returnJson(True, '设置成功!') + +def replSetNode(): + args = getArgs() + data = checkArgs(args, ['node']) + if not data[0]: + return data[1] + + c = getReplConfigData() + nodes = c['nodes'] + add_node = args['node'].strip() + + is_have = False + for x in nodes: + if x['host'] == add_node: + is_have = True + + if is_have: + return mw.returnJson(False, add_node+',节点已经存在!') + + t = {} + t['host'] = add_node + nodes.append(t) + c['nodes'] = nodes + setReplConfigData(c) + + return mw.returnJson(True, '设置成功!') + + +def delReplNode(): + args = getArgs() + data = checkArgs(args, ['node']) + if not data[0]: + return data[1] + + c = getReplConfigData() + nodes = c['nodes'] + del_node = args['node'].strip() + + filter_nodes = []; + for x in nodes: + if x['host'] != del_node: + filter_nodes.append(x) + + c['nodes'] = filter_nodes + setReplConfigData(c) + + return mw.returnJson(True, '删除节点'+args['node']+'成功!') + + +def replInit(): + c = getReplConfigData() + return mw.returnJson(True, '设置副本成功!') + def testData(): ''' cd /www/server/mdserver-web && source bin/activate && python3 /www/server/mdserver-web/plugins/mongodb/index.py test_data @@ -1119,6 +1205,16 @@ if __name__ == "__main__": print(getDbAccess()) elif func == 'set_db_access': print(setDbAccess()) + elif func == 'repl_set_name': + print(replSetName()) + elif func == 'repl_set_node': + print(replSetNode()) + elif func == 'get_repl_config': + print(getReplConfig()) + elif func == 'del_repl_node': + print(delReplNode()) + elif func == 'repl_init': + print(replInit()) elif func == 'run_log': print(runLog()) elif func == 'test': diff --git a/plugins/mongodb/js/mongodb.js b/plugins/mongodb/js/mongodb.js index 886dbe518..16c66d2be 100644 --- a/plugins/mongodb/js/mongodb.js +++ b/plugins/mongodb/js/mongodb.js @@ -159,7 +159,13 @@ function mongoReplStatus() { me' + rdata.me + 'me'; } - var con = '
\ + var con = "

\ + Mongodb副本配置\ + \ + \ +


"; + + con += '
\ \ \ \ @@ -172,6 +178,186 @@ function mongoReplStatus() { },'json'); } +//设置副本名称 +function mongoReplCfgReplSetName(){ + mgPost('run_doc_info', '', '', function(rdata){ + var rdata = $.parseJSON(rdata.data); + + layer.open({ + type: 1, + area: '300px', + title: '设置副本名称', + closeBtn: 1, + shift: 5, + shadeClose: false, + btn:["提交","关闭"], + content: "\ +
\ + 同步副本\ +
\ + \ +
\ +
\ + ", + + success: function(){ + // console.log(rdata); + var rlist = rdata['dbs']; + var dbs = []; + var selectHtml = ''; + for (var i = 0; i < rlist.length; i++) { + // console.log(rlist[i]['db']); + var dbname = rlist[i]['db']; + + if (['admin','local','config'].includes(dbname)){ + } else { + dbs.push(dbname); + } + } + + if (dbs.length == 0 ){ + selectHtml += ""; + } + + for (index in dbs) { + selectHtml += ""; + } + + $('select[name="replSetName"]').html(selectHtml); + }, + yes:function(index){ + var data = {}; + data['name'] = $('select[name=replSetName]').val(); + mgPost('repl_set_name', '',data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + if (rdata['status']){ + layer.close(index); + mongoReplCfgInit(); + } + },{icon: rdata.status ? 1 : 2}); + }); + } + }); + }); +} + +function mongoReplCfgNodes(){ + + var def_node = '127.0.0.1:2017'; + layer.open({ + type: 1, + area: '500px', + title: '添加节点', + closeBtn: 1, + shift: 5, + shadeClose: true, + btn:["提交","关闭"], + content: "\ +
\ + 节点服务\ +
\ + \ +
\ +
\ + ", + yes:function(index){ + // var data = $("#mod_pwd").serialize(); + var data = {}; + data['node'] = $('input[name=node]').val(); + mgPost('repl_set_node', '',data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + if (rdata['status']){ + layer.close(index); + mongoReplCfgInit(); + } + },{icon: rdata.status ? 1 : 2}); + }); + } + }); +} + +function mongoReplCfgDelNode(host){ + mgPost('del_repl_node', '', {"node":host}, function(data){ + var rdata = $.parseJSON(data.data); + // console.log(rdata['status']); + showMsg(rdata.msg,function(){ + if (rdata['status']){ + mongoReplCfgInit(); + } + },{icon: rdata.status ? 1 : 2}); + }); +} + +function mongoReplCfgInit(){ + mgPostN('get_repl_config', '', '', function(data){ + var rdata = $.parseJSON(data.data); + $('#repl_name').html("同步副本:"+rdata.data['name']); + + var node = ''; + for (var i = 0; i < rdata.data['nodes'].length; i++) { + var t = rdata.data['nodes'][i]; + + var op = '删除'; + node += ''; + } + $('#repl_node tbody').html(node); + }); +} + +function mongoReplCfg(){ + layer.open({ + type: 1, + title: "副本设置", + area: ['580px', '380px'], + closeBtn: 1, + shadeClose: false, + btn: ["初始化","取消","添加节点","设置同步副本"], + content: '
\ +
\ + \ + 同步副本:\ + \ +
\ +
\ +
\ +
字段当前值说明
'+t['host']+''+op+'
\ + \ + \ + \ + \ + \ + \ + \ +
节点操作
\ +
\ +
\ + ', + success:function(){ + mongoReplCfgInit(); + }, + yes:function(){ + mgPost('repl_init', '', '', function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + },{icon: rdata.status ? 1 : 2}); + }); + return false; + }, + btn3:function(){ + mongoReplCfgNodes(); + return false; + }, + btn4:function(){ + mongoReplCfgReplSetName(); + return false; + } + }); +} + //配置修改 function mongoSetConfig() { mgPost('get_config', '','',function(data){