This commit is contained in:
Mr Chen
2024-05-04 14:34:38 +08:00
parent 4c2178ea9c
commit 8eb2403e4b
2 changed files with 283 additions and 1 deletions
+96
View File
@@ -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':
+187 -1
View File
@@ -159,7 +159,13 @@ function mongoReplStatus() {
<tr><th>me</th><td>' + rdata.me + '</td><td>me</td></tr>';
}
var con = '<div class="divtable">\
var con = "<p class='conf_p'>\
<span class='f14 c6 mr20'>Mongodb副本配置</span><span class='f14 c6 mr20'></span>\
<button class='btn btn-success btn-xs btn-danger'>未开启</button>\
<button class='btn btn-success btn-xs' onclick='mongoReplCfg()'>配置</button>\
</p><hr/>";
con += '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 660px;">\
<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\
<tbody>\
@@ -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: "<form class='bt-form pd20' id='mod_pwd'>\
<div class='line'>\
<span class='tname'>同步副本</span>\
<div class='info-r'>\
<select class='bt-input-text mr5' name='replSetName' style='width:100px'>\
<option value=''></option>\
</select>\
</div>\
</div>\
</form>",
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 += "<option value=''>无</option>";
}
for (index in dbs) {
selectHtml += "<option value='"+dbs[index]+"'>"+dbs[index]+"</option>";
}
$('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: "<form class='bt-form pd20' id='mod_pwd'>\
<div class='line'>\
<span class='tname'>节点服务</span>\
<div class='info-r'>\
<input class='bt-input-text mr5' type='text' name='node' style='width:330px' value='"+def_node+"'/>\
</div>\
</div>\
</form>",
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 = '<a href="javascript:;" class="btlink" onclick="mongoReplCfgDelNode(\''+t['host']+'\');" title="删除节点">删除</a>';
node += '<tr><td>'+t['host']+'</td><td>'+op+'</td></tr>';
}
$('#repl_node tbody').html(node);
});
}
function mongoReplCfg(){
layer.open({
type: 1,
title: "副本设置",
area: ['580px', '380px'],
closeBtn: 1,
shadeClose: false,
btn: ["初始化","取消","添加节点","设置同步副本"],
content: '<div class="pd15">\
<div class="db_list">\
<span>\
<a id="repl_name">同步副本:</a>\
</span>\
</div>\
<div class="divtable" id="repl_node">\
<div id="database_fix" style="height:210px;overflow:auto;border:#ddd 1px solid">\
<table class="table table-hover "style="border:none">\
<thead>\
<tr>\
<th>节点</th>\
<th>操作</th>\
</tr>\
</thead>\
<tbody class="gztr"></tbody>\
</table>\
</div>\
</div>\
</div>',
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){