This commit is contained in:
Mr Chen
2024-05-05 13:45:50 +08:00
parent da5de004c4
commit fdac352244
3 changed files with 211 additions and 5 deletions
+7 -4
View File
@@ -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
View File
@@ -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':
+90
View File
@@ -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('执行成功!');
});
}