From c147ccd0792ef7f0a71bf356aa406b10927d6432 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Sun, 5 May 2024 14:25:47 +0800 Subject: [PATCH] update --- plugins/data_query/nosql_mongodb.py | 10 +-- plugins/mongodb/index.py | 91 +++++++++++++++++++- plugins/mongodb/js/mongodb.js | 124 ++++++++++++++++++++++++++++ 3 files changed, 218 insertions(+), 7 deletions(-) diff --git a/plugins/data_query/nosql_mongodb.py b/plugins/data_query/nosql_mongodb.py index be990231a..32d5ca0f2 100755 --- a/plugins/data_query/nosql_mongodb.py +++ b/plugins/data_query/nosql_mongodb.py @@ -7,6 +7,7 @@ import time import re import pymongo import json +import yaml from bson.objectid import ObjectId from bson.json_util import dumps @@ -139,15 +140,14 @@ class nosqlMongodb(): self.__DB_PORT = int(self.__config['port']) auth = getConfAuth() - self.__DB_PORT = getConfPort() + port = getConfPort() mg_root = pSqliteDb('config').where('id=?', (1,)).getField('mg_root') - # print(auth,self.__DB_HOST,self.__DB_PORT, self.__DB_PASS) + # print(auth,self.__DB_HOST,port, self.__DB_PASS) try: if auth == 'disabled': - self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=self.__DB_PORT, directConnection=True) + self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=port, directConnection=True) else: - self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=self.__DB_PORT, directConnection=True, username='root',password=mg_root) - # self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=self.__DB_PORT, maxPoolSize=10,directConnection=True) + self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=port, directConnection=True, username='root',password=mg_root) self.__DB_CONN.admin.command('ping') return self.__DB_CONN except pymongo.errors.ConnectionFailure: diff --git a/plugins/mongodb/index.py b/plugins/mongodb/index.py index 62dbf7df0..b767b8a9e 100755 --- a/plugins/mongodb/index.py +++ b/plugins/mongodb/index.py @@ -1131,6 +1131,37 @@ def getDbBackupList(): return mw.returnJson(True, 'ok', rr) +def getDbBackupImportList(): + + bkImportDir = mw.getRootDir() + '/backup/mongodb_import' + if not os.path.exists(bkImportDir): + os.mkdir(bkImportDir) + + blist = os.listdir(bkImportDir) + + rr = [] + for x in range(0, len(blist)): + name = blist[x] + p = bkImportDir + '/' + name + data = {} + data['name'] = name + + 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 + + rdata = { + "list": rr, + "upload_dir": bkImportDir, + } + return mw.returnJson(True, 'ok', rdata) def deleteDbBackup(): args = getArgs() @@ -1158,6 +1189,57 @@ def setDbBackup(): os.system(cmd) return mw.returnJson(True, 'ok') +def importDbExternal(): + args = getArgs() + data = checkArgs(args, ['file', 'name']) + if not data[0]: + return data[1] + + file = args['file'] + name = args['name'] + + import_dir = mw.getRootDir() + '/backup/mongodb_import/' + mg_root = pSqliteDb('config').where('id=?', (1,)).getField('mg_root') + port = getConfPort() + + file_path = import_dir + file + if not os.path.exists(file_path): + return mw.returnJson(False, '文件突然消失?') + + exts = ['gz', 'zip'] + ext = mw.getFileSuffix(file) + if ext not in exts: + return mw.returnJson(False, '导入数据库格式不对!') + + # print(file,name) + # print(import_dir,name) + + file_dir = import_dir+name + if not os.path.exists(file_dir): + mw.execShell("mkdir -p "+file_dir) + + file_tgz = import_dir+file + if os.path.exists(file_tgz): + cmd = 'cd ' + file_dir + ' && tar -xzvf ' + file_tgz + " -C "+file_dir + # print(cmd) + r = mw.execShell(cmd) + # print(r) + + cmd = getServerDir() + "/bin/mongorestore --port "+str(port)+" --dir "+file_dir + print(cmd) + rdata = mw.execShell(cmd) + + # 删除文件 + if os.path.exists(file_dir): + del_cmd = "rm -rf "+file_dir + mw.execShell(del_cmd) + + # if rdata[1].lower().find('error') > -1: + # return mw.returnJson(False, rdata[1]) + + return mw.returnJson(True, 'ok') + + def importDbBackup(): args = getArgs() data = checkArgs(args, ['file', 'name']) @@ -1187,8 +1269,9 @@ def importDbBackup(): # 删除文件 - del_cmd = "rm -rf "+file_dir - mw.execShell(del_cmd) + if os.path.exists(file_dir): + del_cmd = "rm -rf "+file_dir + mw.execShell(del_cmd) return mw.returnJson(True, 'ok') @@ -1398,10 +1481,14 @@ if __name__ == "__main__": print(replClose()) elif func == 'get_db_backup_list': print(getDbBackupList()) + elif func == 'get_db_backup_import_list': + print(getDbBackupImportList()) elif func == 'delete_db_backup': print(deleteDbBackup()) elif func == 'set_db_backup': print(setDbBackup()) + elif func == 'import_db_external': + print(importDbExternal()) elif func == 'import_db_backup': print(importDbBackup()) elif func == 'run_log': diff --git a/plugins/mongodb/js/mongodb.js b/plugins/mongodb/js/mongodb.js index 9d2febb09..a229abd70 100644 --- a/plugins/mongodb/js/mongodb.js +++ b/plugins/mongodb/js/mongodb.js @@ -1015,3 +1015,127 @@ function importBackup(file,name){ }); } +function setLocalImport(db_name){ + + //上传文件 + function uploadDbFiles(upload_dir){ + var up_db = layer.open({ + type:1, + closeBtn: 1, + title:"上传导入文件["+upload_dir+']', + area: ['500px','300px'], + shadeClose:false, + content:'
\ + \ + \ + \ + \ + \ + \ + 文件编码:\ + \ + \ + \ + \ +
', + success:function(){ + $('#filesClose').click(function(){ + layer.close(up_db); + }); + } + + }); + uploadStart(function(){ + getList(); + layer.close(up_db); + }); + } + + function getList(){ + mgPost('get_db_backup_import_list','',{}, function(data){ + var rdata = $.parseJSON(data.data); + + var file_list = rdata.data.list; + var upload_dir = rdata.data.upload_dir; + + var tbody = ''; + for (var i = 0; i < file_list.length; i++) { + tbody += '\ + ' + file_list[i]['name'] + '\ + ' + file_list[i]['size'] + '\ + ' + file_list[i]['time'] + '\ + \ + 导入 | \ + 删除\ + \ + '; + } + + $('#import_db_file_list').html(tbody); + $('input[name="upload_dir"]').val(upload_dir); + + $("#import_db_file_list .del").on('click',function(){ + var index = $(this).attr('index'); + var filename = file_list[index]["name"]; + mgPost('delete_db_backup','',{filename:filename,path:upload_dir},function(){ + showMsg('执行成功!', function(){ + getList(); + },{icon:1},2000); + }); + }); + }); + } + + var layerIndex = layer.open({ + type: 1, + title: "从文件导入数据", + area: ['600px', '380px'], + closeBtn: 1, + shadeClose: false, + content: '
\ +
\ + \ +
\ +
\ + \ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
文件名称文件大小备份时间操作
\ +
\ +
    \ +
  • 仅支持sql、zip、sql.gz、(tar.gz|gz|tgz)
  • \ +
  • zip、tar.gz压缩包结构:test.zip或test.tar.gz压缩包内,必需包含test.sql
  • \ +
  • 若文件过大,您还可以使用SFTP工具,将数据库文件上传到/www/backup/import
  • \ +
\ +
\ +
', + success:function(index){ + $('#btn_file_upload').click(function(){ + var upload_dir = $('input[name="upload_dir"]').val(); + uploadDbFiles(upload_dir); + }); + + getList(); + }, + }); +} + +function importDbExternal(file,name){ + mgPost('import_db_external','',{file:file,name:name}, function(data){ + layer.msg('执行成功!'); + }); +} +