mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-20 08:25:50 +08:00
update
This commit is contained in:
@@ -72,6 +72,7 @@ def pSqliteDb(dbname='users'):
|
||||
|
||||
def getConfigData():
|
||||
cfg = getConf()
|
||||
# print(cfg)
|
||||
config_data = mw.readFile(cfg)
|
||||
try:
|
||||
config = yaml.safe_load(config_data)
|
||||
@@ -98,7 +99,7 @@ def getConfigData():
|
||||
"bindIp": "0.0.0.0"
|
||||
},
|
||||
"security": {
|
||||
"authorization": "enabled",
|
||||
"authorization": "disabled",
|
||||
"javascriptEnabled": False
|
||||
}
|
||||
}
|
||||
@@ -138,8 +139,9 @@ class nosqlMongodb():
|
||||
self.__DB_PORT = int(self.__config['port'])
|
||||
|
||||
auth = getConfAuth()
|
||||
self.__DB_PORT = getConfPort()
|
||||
mg_root = pSqliteDb('config').where('id=?', (1,)).getField('mg_root')
|
||||
# print(self.__DB_HOST,self.__DB_PORT, self.__DB_PASS)
|
||||
# print(auth,self.__DB_HOST,self.__DB_PORT, self.__DB_PASS)
|
||||
try:
|
||||
if auth == 'disabled':
|
||||
self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=self.__DB_PORT, directConnection=True)
|
||||
@@ -150,7 +152,8 @@ class nosqlMongodb():
|
||||
return self.__DB_CONN
|
||||
except pymongo.errors.ConnectionFailure:
|
||||
return False
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
# print(e)
|
||||
self.__DB_ERR = mw.getTracebackInfo()
|
||||
return False
|
||||
|
||||
@@ -216,7 +219,7 @@ class nosqlMongodbCtr():
|
||||
|
||||
mgdb_instance = self.getInstanceBySid(sid).mgdb_conn()
|
||||
if mgdb_instance is False:
|
||||
return mw.returnData(False,'无法链接')
|
||||
return mw.returnData(False,'无法链接.')
|
||||
|
||||
result = {}
|
||||
collections = mgdb_instance[name].list_collection_names()
|
||||
|
||||
+114
-1
@@ -1076,7 +1076,7 @@ def replClose():
|
||||
# repl_info = client.admin.command('replSetGetStatus')
|
||||
# repl_info['members'] = []
|
||||
# del repl_info['set']
|
||||
|
||||
|
||||
# print(repl_info)
|
||||
rsStatus = client.admin.command('replSetReconfig',config)
|
||||
except Exception as e:
|
||||
@@ -1091,6 +1091,111 @@ def replClose():
|
||||
|
||||
return mw.returnJson(True, '关闭副本同步成功!')
|
||||
|
||||
def getDbBackupListFunc(dbname=''):
|
||||
bkDir = mw.getRootDir() + '/backup/database'
|
||||
blist = os.listdir(bkDir)
|
||||
r = []
|
||||
|
||||
bname = 'mongodb_' + dbname
|
||||
blen = len(bname)
|
||||
for x in blist:
|
||||
fbstr = x[0:blen]
|
||||
if fbstr == bname:
|
||||
r.append(x)
|
||||
return r
|
||||
|
||||
def getDbBackupList():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
r = getDbBackupListFunc(args['name'])
|
||||
bkDir = mw.getRootDir() + '/backup/database'
|
||||
rr = []
|
||||
for x in range(0, len(r)):
|
||||
p = bkDir + '/' + r[x]
|
||||
data = {}
|
||||
data['name'] = r[x]
|
||||
|
||||
rsize = os.path.getsize(p)
|
||||
data['size'] = mw.toSize(rsize)
|
||||
|
||||
t = os.path.getctime(p)
|
||||
t = time.localtime(t)
|
||||
|
||||
data['time'] = time.strftime('%Y-%m-%d %H:%M:%S', t)
|
||||
rr.append(data)
|
||||
|
||||
data['file'] = p
|
||||
|
||||
return mw.returnJson(True, 'ok', rr)
|
||||
|
||||
|
||||
def deleteDbBackup():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['filename', 'path'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
path = args['path']
|
||||
full_file = ""
|
||||
bkDir = mw.getRootDir() + '/backup/database'
|
||||
full_file = bkDir + '/' + args['filename']
|
||||
if path != "":
|
||||
full_file = path + "/" + args['filename']
|
||||
os.remove(full_file)
|
||||
return mw.returnJson(True, 'ok')
|
||||
|
||||
def setDbBackup():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
scDir = getPluginDir() + '/scripts/backup.py'
|
||||
cmd = 'python3 ' + scDir + ' db ' + args['name'] + ' 3'
|
||||
os.system(cmd)
|
||||
return mw.returnJson(True, 'ok')
|
||||
|
||||
def importDbBackup():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['file', 'name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
file = args['file']
|
||||
name = args['name']
|
||||
|
||||
file_tgz = mw.getRootDir() + '/backup/database/' + file
|
||||
file_dir = mw.getRootDir() + '/backup/database/' + file.replace('.tar.gz','')
|
||||
|
||||
if not os.path.exists(file_dir):
|
||||
mw.execShell("mkdir -p "+file_dir)
|
||||
|
||||
# print(os.path.exists(file_tgz))
|
||||
if os.path.exists(file_tgz):
|
||||
cmd = 'cd ' + mw.getRootDir() + '/backup/database && tar -xzvf ' + file + " -C "+file_dir
|
||||
# print(cmd)
|
||||
mw.execShell(cmd)
|
||||
|
||||
|
||||
cmd = getServerDir() + "/bin/mongorestore --port 27017 --oplogReplay --dir "+file_dir
|
||||
print(cmd)
|
||||
# mw.execShell(cmd)
|
||||
|
||||
|
||||
# pwd = pSqliteDb('config').where('id=?', (1,)).getField('mg_root')
|
||||
|
||||
# print(mysql_cmd)
|
||||
# os.system(mysql_cmd)
|
||||
|
||||
# rdata = mw.execShell(mysql_cmd)
|
||||
# if rdata[1].lower().find('error') > -1:
|
||||
# return mw.returnJson(False, rdata[1])
|
||||
|
||||
return mw.returnJson(True, 'ok')
|
||||
|
||||
def testData():
|
||||
'''
|
||||
cd /www/server/mdserver-web && source bin/activate && python3 /www/server/mdserver-web/plugins/mongodb/index.py test_data
|
||||
@@ -1295,6 +1400,14 @@ if __name__ == "__main__":
|
||||
print(replInit())
|
||||
elif func == 'repl_close':
|
||||
print(replClose())
|
||||
elif func == 'get_db_backup_list':
|
||||
print(getDbBackupList())
|
||||
elif func == 'delete_db_backup':
|
||||
print(deleteDbBackup())
|
||||
elif func == 'set_db_backup':
|
||||
print(setDbBackup())
|
||||
elif func == 'import_db_backup':
|
||||
print(importDbBackup())
|
||||
elif func == 'run_log':
|
||||
print(runLog())
|
||||
elif func == 'test':
|
||||
|
||||
@@ -925,3 +925,93 @@ function setDbAccess(username,name){
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function setBackup(db_name){
|
||||
var layerIndex = layer.open({
|
||||
type: 1,
|
||||
title: "数据库[MongoDB]备份详情",
|
||||
area: ['600px', '280px'],
|
||||
closeBtn: 1,
|
||||
shadeClose: false,
|
||||
content: '<div class="pd15">\
|
||||
<div class="db_list">\
|
||||
<button id="btn_backup" class="btn btn-success btn-sm" type="button">备份</button>\
|
||||
<button id="btn_local_import" class="btn btn-success btn-sm" type="button">外部导入</button>\
|
||||
</div >\
|
||||
<div class="divtable">\
|
||||
<div id="database_fix" style="height:150px;overflow:auto;border:#ddd 1px solid">\
|
||||
<table id="database_table" class="table table-hover "style="border:none">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th>文件名称</th>\
|
||||
<th>文件大小</th>\
|
||||
<th>备份时间</th>\
|
||||
<th style="text-align: right;">操作</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody class="list"></tbody>\
|
||||
</table>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>',
|
||||
success:function(index){
|
||||
$('#btn_backup').click(function(){
|
||||
mgPost('set_db_backup', '',{name:db_name}, function(data){
|
||||
showMsg('执行成功!', function(){
|
||||
setBackupReq(db_name);
|
||||
}, {icon:1}, 2000);
|
||||
});
|
||||
});
|
||||
|
||||
$('#btn_local_import').click(function(){
|
||||
setLocalImport(db_name);
|
||||
});
|
||||
|
||||
setBackupReq(db_name);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function setBackupReq(db_name, obj){
|
||||
mgPost('get_db_backup_list', '', {name:db_name}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
var tbody = '';
|
||||
for (var i = 0; i < rdata.data.length; i++) {
|
||||
tbody += '<tr>\
|
||||
<td><span> ' + rdata.data[i]['name'] + '</span></td>\
|
||||
<td><span> ' + rdata.data[i]['size'] + '</span></td>\
|
||||
<td><span> ' + rdata.data[i]['time'] + '</span></td>\
|
||||
<td style="text-align: right;">\
|
||||
<a class="btlink" onclick="importBackup(\'' + rdata.data[i]['name'] + '\',\'' +db_name+ '\')">导入</a> | \
|
||||
<a class="btlink" onclick="downloadBackup(\'' + rdata.data[i]['file'] + '\')">下载</a> | \
|
||||
<a class="btlink" onclick="delBackup(\'' + rdata.data[i]['name'] + '\',\'' +db_name+ '\')">删除</a>\
|
||||
</td>\
|
||||
</tr> ';
|
||||
}
|
||||
$('#database_table tbody').html(tbody);
|
||||
});
|
||||
}
|
||||
|
||||
function delBackup(filename, name, path){
|
||||
if(typeof(path) == "undefined"){
|
||||
path = "";
|
||||
}
|
||||
mgPost('delete_db_backup','',{filename:filename,path:path},function(){
|
||||
layer.msg('执行成功!');
|
||||
setTimeout(function(){
|
||||
setBackupReq(name);
|
||||
},2000);
|
||||
});
|
||||
}
|
||||
|
||||
function downloadBackup(file){
|
||||
window.open('/files/download?filename='+encodeURIComponent(file));
|
||||
}
|
||||
|
||||
function importBackup(file,name){
|
||||
mgPost('import_db_backup','',{file:file,name:name}, function(data){
|
||||
layer.msg('执行成功!');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user