function mgPost(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'mongodb';
req_data['func'] = method;
req_data['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
layer.close(loadT);
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function mgPostN(method, version, args,callback){
var req_data = {};
req_data['name'] = 'mongodb';
req_data['func'] = method;
req_data['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function mgAsyncPost(method,args){
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 });
return syncPost('/plugins/run', {name:'mongodb', func:method, args:_args});
}
function mongoStatus() {
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
$.post('/plugins/run', {name:'mongodb', func:'run_info'}, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
var rdata = $.parseJSON(data.data);
var con = '
\
\
字段 | 当前值 | 说明 | \
\
host | ' + rdata.host + ' | 服务器 |
\
version | ' + rdata.version + ' | 版本 |
\
db_path | ' + rdata.db_path + ' | 数据路径 |
\
uptime | ' + rdata.uptime + ' | 已运行秒 |
\
connections | ' + rdata.connections + ' | 当前链接数 |
\
collections | ' + rdata.collections + ' | 文档数 |
\
insert | ' + rdata.pf['insert'] + ' | 插入命令数 |
\
query | ' + rdata.pf['query'] + ' | 查询命令数 |
\
update | ' + rdata.pf['update'] + ' | 更新命令数 |
\
delete | ' + rdata.pf['delete'] + ' | 删除命令数 |
\
getmore | ' + rdata.pf['getmore'] + ' | getmore命令数 |
\
command | ' + rdata.pf['command'] + ' | 执行命令数 |
\
\
';
$(".soft-man-con").html(con);
},'json');
}
function mongoDocStatus() {
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
$.post('/plugins/run', {name:'mongodb', func:'run_doc_info'}, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
var rdata = $.parseJSON(data.data);
var t = '';
for(var i=0; i';
t += ''+rdata.dbs[i]["db"]+' | ';
t += ''+toSize(rdata.dbs[i]["totalSize"])+' | ';
t += ''+toSize(rdata.dbs[i]["storageSize"])+' | ';
t += ''+toSize(rdata.dbs[i]["dataSize"])+' | ';
t += ''+toSize(rdata.dbs[i]["indexSize"])+' | ';
t += ''+rdata.dbs[i]["indexes"]+' | ';
t += ''+rdata.dbs[i]["objects"]+' | ';
t += '';
}
// console.log(t);
var con = '\
\
库名 | 大小 | 存储大小 | 数据 | 索引 | 文档数据 | 对象 | \
'+t+'\
';
// console.log(rdata.dbs);
$(".soft-man-con").html(con);
},'json');
}
function mongoReplStatus() {
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
$.post('/plugins/run', {name:'mongodb', func:'run_repl_info'}, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
var rdata = $.parseJSON(data.data);
var rdata = rdata.data;
var tbody = '';
if (rdata.status == '无'){
tbody += '无数据 |
';
} else{
tbody += '状态 | ' + rdata.status + ' | 主/从 |
\
同步文档 | ' + rdata.setName + ' | 文档名 |
\
hosts | ' + rdata.hosts + ' | 服务器所有节点 |
\
primary | ' + rdata.primary + ' | primary |
\
me | ' + rdata.me + ' | me |
';
}
var con = "\
Mongodb副本配置\
\
\
";
con += '\
\
字段 | 当前值 | 说明 | \
\
'+tbody+'\
\
\
';
$(".soft-man-con").html(con);
},'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:27017';
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 += ''+t['host']+' | '+op+' |
';
}
$('#repl_node tbody').html(node);
});
}
function mongoReplCfg(){
layer.open({
type: 1,
title: "副本设置",
area: ['580px', '380px'],
closeBtn: 1,
shadeClose: false,
btn: ["初始化","取消","添加节点","设置同步副本"],
content: '',
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){
var rdata = $.parseJSON(data.data);
if (!rdata['status']){
layer.msg(rdata['msg']);
return;
}
rdata = rdata.data;
if (rdata['security']['authorization'] == 'enabled'){
var body_auth = '';
} else {
var body_auth = '';
}
var body = "";
// console.log(body);
$(".soft-man-con").html(body);
});
}
function mongoConfigAuth(){
mgPost('set_config_auth', '','',function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
}
function mongoConfigSave(){
var data = {};
data['bind_ip'] = $('input[name="bind_ip"]').val();
data['port'] = $('input[name="port"]').val();
data['data_path'] = $('input[name="data_path"]').val();
data['log'] = $('input[name="log"]').val();
data['pid_file_path'] = $('input[name="pid_file_path"]').val();
mgPost('set_config', '',data,function(rdata){
// console.log(rdata);
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
}
function dbList(page, search){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
}
if(typeof(search) != 'undefined'){
_data['search'] = search;
}
_data['page'] = page;
_data['page_size'] = 10;
// console.log(_data);
mgPost('get_db_list', '',_data, function(data){
// console.log(data);
var rdata = $.parseJSON(data.data);
// console.log(rdata);
var list = '';
for(i in rdata.data){
list += '';
list +=' | ';
list += '' + rdata.data[i]['name'] +' | ';
list += '' + rdata.data[i]['username'] +' | ';
list += '' +
'***' +
''+
''+
' | ';
list += ''+rdata.data[i]['ps']+' | ';
list += '';
list += ''+(rdata.data[i]['is_backup']?'备份':'未备份') +' | ';
list += '工具 | ' +
'权限 | ' +
'改密 | ' +
'删除' +
' | ';
list += '
';
}
//
// \
var con = '\
\
\
\
\
\
\
\
\
\
同步选中\
同步所有\
从服务器获取\
\
\
';
$(".soft-man-con").html(con);
$('#databasePage').html(rdata.page);
readerTableChecked();
});
}
function addDatabase(type){
layer.open({
type: 1,
area: '500px',
title: '添加数据库',
closeBtn: 1,
shift: 5,
shadeClose: true,
btn:["提交","关闭"],
content: "",
success:function(){
$("input[name='name']").keyup(function(){
var v = $(this).val();
$("input[name='db_user']").val(v);
$("input[name='ps']").val(v);
});
$('select[name="dataAccess"]').change(function(){
var v = $(this).val();
if (v == 'ip'){
$(this).after("");
} else {
$('#dataAccess_subid').remove();
}
});
},
yes:function(index) {
var data = $("#add_db").serialize();
data = decodeURIComponent(data);
var dataObj = toArrayObject(data);
if(!dataObj['address']){
dataObj['address'] = dataObj['dataAccess'];
}
mgPost('add_db', '',dataObj, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
if (rdata.status){
layer.close(index);
dbList();
}
},{icon: rdata.status ? 1 : 2}, 2000);
});
}
});
}
function setRootPwd(type, pwd){
if (type==1){
var password = $("#MyPassword").val();
mgPost('set_root_pwd', '',{password:password}, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dbList();
},{icon: rdata.status ? 1 : 2});
});
return;
}
var index = layer.open({
type: 1,
area: '500px',
title: '修改数据库密码',
closeBtn: 1,
shift: 5,
btn:["提交", "关闭", "复制ROOT密码", "强制修改"],
shadeClose: true,
content: "",
yes:function(layerIndex){
var password = $("#MyPassword").val();
mgPost('set_root_pwd', '',{password:password}, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
layer.close(layerIndex);
dbList();
},{icon: rdata.status ? 1 : 2});
});
},
btn3:function(){
var password = $("#MyPassword").val();
copyText(password);
return false;
},
btn4:function(layerIndex){
layer.confirm('强制修改,是为了在重建时使用,确定强制?', {
btn: ['确定', '取消']
}, function(index, layero){
layer.close(index);
var password = $("#MyPassword").val();
mgPost('set_root_pwd', '',{password:password,force:'1'}, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
layer.close(layerIndex);
dbList();
},{icon: rdata.status ? 1 : 2});
});
});
return false;
}
});
}
function syncGetDatabase(){
mgPost('sync_get_databases', '', '', function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dbList();
},{ icon: rdata.status ? 1 : 2 });
});
}
function showHidePass(obj){
var a = "glyphicon-eye-open";
var b = "glyphicon-eye-close";
if($(obj).hasClass(a)){
$(obj).removeClass(a).addClass(b);
$(obj).prev().text($(obj).prev().attr('data-pw'))
}
else{
$(obj).removeClass(b).addClass(a);
$(obj).prev().text('***');
}
}
function setDbPs(id, name, obj) {
var _span = $(obj);
var _input = $("");
_span.hide().after(_input);
_input.focus();
_input.blur(function(){
$(this).remove();
var ps = _input.val();
_span.text(ps).show();
var data = {name:name,id:id,ps:ps};
mgPost('set_db_ps', '',data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
});
_input.keyup(function(){
if(event.keyCode == 13){
_input.trigger('blur');
}
});
}
function delDb(id, name){
safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){
var data='id='+id+'&name='+name;
mgPost('del_db', '', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dbList();
},{icon: rdata.status ? 1 : 2}, 600);
});
});
}
function delDbBatch(){
var arr = [];
$('input[type="checkbox"].check:checked').each(function () {
var _val = $(this).val();
var _name = $(this).parent().next().text();
if (!isNaN(_val)) {
arr.push({'id':_val,'name':_name});
}
});
safeMessage('批量删除数据库','您共选择了[2]个数据库,删除后将无法恢复,真的要删除吗?',function(){
var i = 0;
$(arr).each(function(){
var data = mgAsyncPost('del_db', this);
var rdata = $.parseJSON(data.data);
if (!rdata.status){
layer.msg(rdata.msg,{icon:2,time:2000,shade: [0.3, '#000']});
}
i++;
});
var msg = '成功删除['+i+']个数据库!';
showMsg(msg,function(){
dbList();
},{icon: 1}, 600);
});
}
function setDbPass(id, username, password){
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['name'] = $('input[name=name]').val();
data['password'] = $('#MyPassword').val();
data['id'] = $('input[name=id]').val();
mgPost('set_user_pwd', '',data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
layer.close(index);
dbList();
},{icon: rdata.status ? 1 : 2});
});
}
});
}
function repTools(db_name, res){
mgPost('get_db_info', '', {name:db_name}, function(data){
var rdata = $.parseJSON(data.data);
var rdata = rdata.data;
// console.log(rdata.collection_list);
var tbody = '';
for (var i = 0; i < rdata.collection_list.length; i++) {
tbody += '\
' + rdata.collection_list[i].collection_name + ' | \
' + rdata.collection_list[i].count + ' | \
' + toSize(rdata.collection_list[i].size) + ' | \
' + toSize(rdata.collection_list[i].avg_obj_size) + ' | \
' + toSize(rdata.collection_list[i].storage_size) + ' | \
' + rdata.collection_list[i].nindexes + ' | \
' + toSize(rdata.collection_list[i].total_index_size) + ' | \
'
}
layer.open({
type: 1,
title: "MongoDB工具箱【" + db_name + "】",
area: ['780px', '480px'],
closeBtn: 1,
shadeClose: false,
content: '\
\
\
\
\
\
\
集合名称 | \
文档数量 | \
内存中的大小 | \
对象平均大小 | \
存储大小 | \
索引数量 | \
索引大小 | \
\
\
' + tbody + '\
\
\
\
'
});
tableFixed('database_fix');
});
}
function syncToDatabase(type){
var data = [];
$('input[type="checkbox"].check:checked').each(function () {
if (!isNaN($(this).val())) data.push($(this).val());
});
var postData = 'type='+type+'&ids='+JSON.stringify(data);
mgPost('sync_to_databases', '',postData, function(data){
var rdata = $.parseJSON(data.data);
// console.log(rdata);
showMsg(rdata.msg,function(){
dbList();
},{ icon: rdata.status ? 1 : 2 });
});
}
function setDbAccess(username,name){
mgPost('get_db_access','','username='+username, function(data){
var rdata = $.parseJSON(data.data);
if (!rdata.status){
layer.msg(rdata.msg,{icon:2,shade: [0.3, '#000']});
return;
}
var db_roles = rdata.data.roles;
var all_roles = rdata.data.all_roles;
// console.log(all_roles);
var role_list;
var index = layer.open({
type: 1,
area: '500px',
title: '设置数据库权限',
closeBtn: 1,
shift: 5,
btn:["提交","取消"],
shadeClose: true,
content: "",
success:function(layers, index){
document.getElementById('layui-layer' + index).getElementsByClassName('layui-layer-content')[0].style.overflow = 'unset';
var role_data = [];
for (var i = 0; i < db_roles.length; i++) {
var t = {};
t['name'] = db_roles[i]['role'];
t['value'] = db_roles[i]['role'];
role_data.push(t);
}
role_list = xmSelect.render({
el: '#role_list',
language: 'zn',
toolbar: {show: true,},
paging: false,
data: role_data,
});
var pdata = [];
for (var i = 0; i < all_roles.length; i++) {
var tval = all_roles[i];
var isSelected = false;
for (var db_i = 0; db_i < db_roles.length; db_i++) {
var db_name = db_roles[db_i]['role'];
if (db_name == tval['role']){
isSelected = true;
}
}
var t = {name:tval['name'],value:tval['role']};
if (isSelected){
t = {name:tval['name'],value:tval['role'], selected: true};
}
pdata.push(t);
}
role_list.update({data:pdata});
},
yes:function(index){
var data = $("#set_db_access").serialize();
data = decodeURIComponent(data);
var dataObj = toArrayObject(data);
dataObj['username'] = username;
dataObj['name'] = name;
mgPost('set_db_access', '',dataObj, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
layer.close(index);
dbList();
},{icon: rdata.status ? 1 : 2});
});
}
});
});
}