Files
mdserver-web/plugins/mongodb/js/mongodb.js
T
2024-05-02 19:58:58 +08:00

292 lines
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 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 = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\
<tbody>\
<tr><th>host</th><td>' + rdata.host + '</td><td>服务器</td></tr>\
<tr><th>version</th><td>' + rdata.version + '</td><td>版本</td></tr>\
<tr><th>db_path</th><td>' + rdata.db_path + '</td><td>数据路径</td></tr>\
<tr><th>uptime</th><td>' + rdata.uptime + '</td><td>已运行秒</td></tr>\
<tr><th>connections</th><td>' + rdata.connections + '</td><td>当前链接数</td></tr>\
<tr><th>collections</th><td>' + rdata.collections + '</td><td>文档数</td></tr>\
<tr><th>insert</th><td>' + rdata.pf['insert'] + '</td><td>插入命令数</td></tr>\
<tr><th>query</th><td>' + rdata.pf['query'] + '</td><td>查询命令数</td></tr>\
<tr><th>update</th><td>' + rdata.pf['update'] + '</td><td>更新命令数</td></tr>\
<tr><th>delete</th><td>' + rdata.pf['delete'] + '</td><td>删除命令数</td></tr>\
<tr><th>getmore</th><td>' + rdata.pf['getmore'] + '</td><td>getmore命令数</td></tr>\
<tr><th>command</th><td>' + rdata.pf['command'] + '</td><td>执行命令数</td></tr>\
<tbody>\
</table></div>';
$(".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<rdata.dbs.length;i++){
t += '<tr>';
t += '<th>'+rdata.dbs[i]["db"]+'</th>';
t += '<th>'+toSize(rdata.dbs[i]["totalSize"])+'</th>';
t += '<th>'+toSize(rdata.dbs[i]["storageSize"])+'</th>';
t += '<th>'+toSize(rdata.dbs[i]["dataSize"])+'</th>';
t += '<th>'+toSize(rdata.dbs[i]["indexSize"])+'</th>';
t += '<th>'+rdata.dbs[i]["indexes"]+'</th>';
t += '<th>'+rdata.dbs[i]["objects"]+'</th>';
t += '</tr>';
}
// console.log(t);
var con = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>库名</th><th>大小</th><th>存储大小</th><th>数据</th><th>索引</th><th>文档数据</th><th>对象</th></thead>\
<tbody>'+t+'<tbody>\
</table></div>';
// 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 += '<tr><td colspan="3" style="text-align:center;">无数据</td></tr>';
} else{
tbody += '<tr><th>状态</th><td>' + rdata.status + '</td><td>主/从</td></tr>\
<tr><th>同步文档</th><td>' + rdata.setName + '</td><td>文档名</td></tr>\
<tr><th>hosts</th><td><span class="overflow_hide" style="width:260px;" title="'+rdata.hosts+'">' + rdata.hosts + '</span></td><td>服务器所有节点</td></tr>\
<tr><th>primary</th><td>' + rdata.primary + '</td><td>primary</td></tr>\
<tr><th>me</th><td>' + rdata.me + '</td><td>me</td></tr>';
}
var con = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\
<tbody>\
'+tbody+'\
<tbody>\
</table>\
</div>';
$(".soft-man-con").html(con);
},'json');
}
//配置修改
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 = '<input class="btswitch btswitch-ios" id="auth" type="checkbox" checked><label style="float: left;top: -3px;" class="btswitch-btn" for="auth" onclick="mongoConfigAuth();"></label>';
} else {
var body_auth = '<input class="btswitch btswitch-ios" id="auth" type="checkbox"><label style="float: left;top: -3px;" class="btswitch-btn" for="auth" onclick="mongoConfigAuth();"></label>';
}
var body = "<div class='bingfa'>" +
"<p class='line'><span class='span_tit'>IP:</span><input class='bt-input-text' type='text' name='bind_ip' value='" + rdata['net']['bindIp'] + "' />,<font>监听IP请勿随意修改</font></p>" +
"<p class='line'><span class='span_tit'>port: </span><input class='bt-input-text' type='number' name='port' value='" + rdata['net']['port'] + "' />,<font>监听端口,一般无需修改</font></p>" +
"<p class='line'><span class='span_tit'>dbPath:</span><input class='bt-input-text' type='text' name='data_path' value='" + rdata['storage']['dbPath'] + "' />,<font>数据存储位置</font></p>" +
"<p class='line'><span class='span_tit'>path:</span><input class='bt-input-text' type='text' name='log' value='" + rdata['systemLog']['path'] + "' />,<font>日志文件位置</font></p>" +
"<p class='line'><span class='span_tit'>pidFilePath:</span><input class='bt-input-text' type='text' name='pid_file_path' value='" + rdata['processManagement']['pidFilePath'] + "' />,<font>PID保存路径</font></p>" +
"<p class='line'><span class='span_tit' style='float:left;'>安全认证:</span>"+body_auth+"</p>" +
"<div class='mtb15' style='padding-top: 10px;text-align: center;'>\
<button class='btn btn-success btn-sm mr5' onclick='mongoSetConfig();'>刷新</button>\
<button class='btn btn-success btn-sm' onclick='mongoConfigSave();'>保存</button>" +
"</div></div>";
// 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 docList(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_doc_list', '',_data, function(data){
console.log(data);
var rdata = $.parseJSON(data.data);
console.log(rdata);
var list = '';
for(i in rdata.data){
list += '<tr>';
list +='<td><input value="'+rdata.data[i]['id']+'" class="check" onclick="checkSelect();" type="checkbox"></td>';
list += '<td>' + rdata.data[i]['name'] +'</td>';
list += '<td>' + rdata.data[i]['username'] +'</td>';
list += '<td>' +
'<span class="password" data-pw="'+rdata.data[i]['password']+'">***</span>' +
'<span onclick="showHidePass(this)" class="glyphicon glyphicon-eye-open cursor pw-ico" style="margin-left:10px"></span>'+
'<span class="ico-copy cursor btcopy" style="margin-left:10px" title="复制密码" onclick="copyPass(\''+rdata.data[i]['password']+'\')"></span>'+
'</td>';
list += '<td><span class="c9 input-edit" onclick="setDbPs(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\',this)" style="display: inline-block;">'+rdata.data[i]['ps']+'</span></td>';
list += '<td style="text-align:right">';
list += '<a href="javascript:;" class="btlink" class="btlink" onclick="setBackup(\''+rdata.data[i]['name']+'\',this)" title="数据库备份">'+(rdata.data[i]['is_backup']?'备份':'未备份') +'</a> | ';
var rw = '';
var rw_change = 'all';
if (typeof(rdata.data[i]['rw'])!='undefined'){
var rw_val = '读写';
if (rdata.data[i]['rw'] == 'all'){
rw_val = "所有";
rw_change = 'rw';
} else if (rdata.data[i]['rw'] == 'rw'){
rw_val = "读写";
rw_change = 'r';
} else if (rdata.data[i]['rw'] == 'r'){
rw_val = "只读";
rw_change = 'all';
}
rw = '<a href="javascript:;" class="btlink" onclick="setDbRw(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\',\''+rw_change+'\')" title="设置读写">'+rw_val+'</a> | ';
}
list += '<a href="javascript:;" class="btlink" onclick="repTools(\''+rdata.data[i]['name']+'\')" title="MySQL优化修复工具">工具</a> | ' +
'<a href="javascript:;" class="btlink" onclick="setDbAccess(\''+rdata.data[i]['username']+'\')" title="设置数据库权限">权限</a> | ' +
rw +
'<a href="javascript:;" class="btlink" onclick="setDbPass('+rdata.data[i]['id']+',\''+ rdata.data[i]['username'] +'\',\'' + rdata.data[i]['password'] + '\')">改密</a> | ' +
'<a href="javascript:;" class="btlink" onclick="delDb(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\')" title="删除数据库">删除</a>' +
'</td>';
list += '</tr>';
}
//<button onclick="" id="dataRecycle" title="删除选中项" class="btn btn-default btn-sm" style="margin-left: 5px;"><span class="glyphicon glyphicon-trash" style="margin-right: 5px;"></span>回收站</button>
var con = '<div class="safe bgw">\
<button onclick="addDatabase()" title="添加数据库" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加数据库</button>\
<button onclick="setRootPwd(0,\''+rdata.info['root_pwd']+'\')" title="设置MySQL管理员密码" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">root密码</button>\
<button onclick="setDbAccess(\'root\')" title="ROOT权限" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">ROOT权限</button>\
<button onclick="fixDbAccess(\'root\')" title="修复" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">修复</button>\
<span style="float:right"> \
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="delDbBatch();" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\
</span>\
<div class="divtable mtb10">\
<div class="tablescroll">\
<table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\
<thead><tr><th width="30"><input class="check" onclick="checkSelect();" type="checkbox"></th>\
<th>数据库名</th>\
<th>用户名</th>\
<th>密码</th>\
'+
// '<th>备份</th>'+
'<th>备注</th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>\
'+ list +'\
</tbody></table>\
</div>\
<div id="databasePage" class="dataTables_paginate paging_bootstrap page"></div>\
<div class="table_toolbar" style="left:0px;">\
<span class="sync btn btn-default btn-sm" style="margin-right:5px" onclick="syncToDatabase(1)" title="将选中数据库信息同步到服务器">同步选中</span>\
<span class="sync btn btn-default btn-sm" style="margin-right:5px" onclick="syncToDatabase(0)" title="将所有数据库信息同步到服务器">同步所有</span>\
<span class="sync btn btn-default btn-sm" onclick="syncGetDatabase()" title="从服务器获取数据库列表">从服务器获取</span>\
</div>\
</div>\
</div>';
$(".soft-man-con").html(con);
$('#databasePage').html(rdata.page);
readerTableChecked();
});
}