From 2461307d64688f0d6313f26092cdbd8dd736bc50 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Tue, 21 May 2024 16:57:05 +0800 Subject: [PATCH] update --- plugins/sphinx/class/sphinx_make.py | 14 ++- plugins/sphinx/index.html | 13 +++ plugins/sphinx/index.py | 34 +++++- plugins/sphinx/js/sphinx.js | 167 +++++++++++++++++++++++++++- 4 files changed, 220 insertions(+), 8 deletions(-) diff --git a/plugins/sphinx/class/sphinx_make.py b/plugins/sphinx/class/sphinx_make.py index 49daae3d2..6d22ed870 100644 --- a/plugins/sphinx/class/sphinx_make.py +++ b/plugins/sphinx/class/sphinx_make.py @@ -281,7 +281,9 @@ index {$DB_NAME}_{$TABLE_NAME} def makeSqlToSphinxDb(self, db, table = []): conf = '' + for tn in table: + pkey_name = self.getTablePk(db,tn) if pkey_name == '': continue conf += self.makeSphinxDbSource(db, tn) @@ -377,10 +379,20 @@ index {$DB_NAME}_{$TABLE_NAME} return conf + def checkDbName(self, db): + filter_db = ['information_schema','performance_schema','sys','mysql'] + if db in filter_db: + return False + return True + + def makeSqlToSphinx(self, db, tables = []): + conf = '' + conf += self.makeSphinxHeader() + conf += self.makeSqlToSphinxDb(db, tables) + return conf def makeSqlToSphinxAll(self): filter_db = ['information_schema','performance_schema','sys','mysql'] - filter_db.append(self.delta) dblist = self.pdb.query('show databases') diff --git a/plugins/sphinx/index.html b/plugins/sphinx/index.html index 92caca382..b62232b49 100755 --- a/plugins/sphinx/index.html +++ b/plugins/sphinx/index.html @@ -1,3 +1,16 @@ + +
diff --git a/plugins/sphinx/index.py b/plugins/sphinx/index.py index 915ea1331..f987a9d8f 100755 --- a/plugins/sphinx/index.py +++ b/plugins/sphinx/index.py @@ -209,8 +209,7 @@ def reload(): def rebuild(): file = initDreplace() - cmd = file + ' rebuild &' - # print(cmd) + cmd = file + ' rebuild' data = mw.execShell(cmd) if data[0].find('successfully')<0: return data[0].replace("\n","
") @@ -318,11 +317,9 @@ def sphinxCmd(): else: return mw.returnJson(False, 'no index') -def makeDbToSphinx(): +def makeDbToSphinxTest(): conf_file = getConf() - import sphinx_make - sph_make = sphinx_make.sphinxMake() conf = sph_make.makeSqlToSphinxAll() @@ -331,6 +328,33 @@ def makeDbToSphinx(): # makeSqlToSphinxTable() return True +def makeDbToSphinx(): + args = getArgs() + check = checkArgs(args, ['db','tables','is_delta','is_cover']) + if not check[0]: + return check[1] + + db = args['db'] + tables = args['tables'] + is_delta = args['is_delta'] + is_cover = args['is_cover'] + + sph_file = getConf() + + import sphinx_make + sph_make = sphinx_make.sphinxMake() + + if not sph_make.checkDbName(db): + return mw.returnJson(False,'保留数据库名称,不可用!') + + if is_cover == 'yes': + tables = tables.split(',') + content = sph_make.makeSqlToSphinx(db, tables) + mw.writeFile(sph_file,content) + return mw.returnJson(True,'设置成功!') + + return mw.returnJson(True,'测试中') + if __name__ == "__main__": diff --git a/plugins/sphinx/js/sphinx.js b/plugins/sphinx/js/sphinx.js index e28013f1f..cdd0fae18 100755 --- a/plugins/sphinx/js/sphinx.js +++ b/plugins/sphinx/js/sphinx.js @@ -20,6 +20,32 @@ function spPostMin(method, args, callback){ },'json'); } +function myPost(method, args, callback, title){ + var _args = null; + if (typeof(args) == 'string'){ + _args = JSON.stringify(toArrayObject(args)); + } else { + _args = JSON.stringify(args); + } + + var _title = '正在获取...'; + if (typeof(title) != 'undefined'){ + _title = title; + } + + $.post('/plugins/run', {name:'mysql', func:method, args:_args}, function(data) { + if (!data.status){ + layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + + if(typeof(callback) == 'function'){ + callback(data); + } + },'json'); +} + + function spPost(method, args, callback){ var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); spPostMin(method,args,function(data){ @@ -31,10 +57,141 @@ function spPost(method, args, callback){ } function commonFunc(){ - var con = ''; + var con = ''; + con += '   '; $(".soft-man-con").html(con); } +function autoMakeConf(){ + var xm_db_list; + + var con = '
    '; + con += '
  • 如果数据量比较大,第一次启动会失败!(可通过手动建立索引)
  • '; + con += '
  • 以下内容,需手动加入计划任务。
  • '; + layer.open({ + type: 1, + area: ['380px','350px'], + title: '自动创建配置', + closeBtn: 1, + shift: 5, + shadeClose: true, + btn:["提交","关闭"], + content: "
    \ +
    \ + 选择数据库\ +
    \ + \ +
    \ +
    \ +
    \ + 选择表\ +
    \ +
    \ +
    \ +
    \ +
    \ + 是否增量\ +
    \ + \ +
    \ +
    \ +
    \ + 是否覆盖配置\ +
    \ + \ +
    \ +
    \ +
      \ +
    • 具体配置,仍须手动修改!!!
    • '\ +
    \ +
    \ + ", + + success:function(l,i){ + $(l).find('.layui-layer-content').css('overflow','visible'); + + xm_db_list = xmSelect.render({ + el: '#table', + repeat: false, + toolbar: {show: true}, + data: [], + }); + + myPost('get_db_list', {"page":1,"page_size":20}, function(data){ + var rdata = $.parseJSON(data.data); + var dblist = rdata.data; + + var db_html = ''; + for (var i = 0; i < dblist.length; i++) { + db_html += ""; + } + + if (dblist.length > 0){ + initDbSelect(dblist[0]['name']); + } + $('select[name="dbname"]').html(db_html); + }); + + $('select[name="dbname"]').change(function(){ + var db = $('select[name="dbname"]').val(); + initDbSelect(db); + }); + + }, + yes:function(index){ + var args = {} + args['db'] = $('select[name="dbname"]').val(); + args['is_delta'] = $('select[name="is_delta"]').val(); + args['is_cover'] = $('select[name="is_cover"]').val(); + args['tables'] = xm_db_list.getValue('value').join(','); + // console.log(args); + spPost('db_to_sphinx', args, function(rdata){ + var rdata = $.parseJSON(rdata.data); + // console.log(rdata); + showMsg(rdata.msg,function(){ + if (rdata.status){ + layer.close(index); + confirmRebuildIndex(); + } + },{icon: rdata.status ? 1 : 2}, 2000); + }); + } + + }); + + function initDbSelect(db){ + getDbInfo(db, function(rdata){ + var rdata = $.parseJSON(rdata.data); + var tables = rdata.tables; + + var idx_db = []; + for (var i = 0; i < tables.length; i++) { + var t = {}; + t['name'] = tables[i]['table_name']; + t['value'] = tables[i]['table_name']; + idx_db.push(t); + } + xm_db_list = xmSelect.render({el: '#table', filterable: true,repeat: false,toolbar: {show: true},data: idx_db,}); + }); + } + + function getDbInfo(db_name, callback){ + myPost('get_db_info', {name:db_name}, function(data){ + callback(data); + }); + } +} + function rebuildIndex(){ spPost('rebuild', '', function(data){ if (data.data == 'ok'){ @@ -45,9 +202,15 @@ function rebuildIndex(){ }); } +function confirmRebuildIndex(){ + layer.confirm("是否重建索引?", {icon:3,closeBtn: 1} , function(){ + rebuildIndex(); + }); +} + function tryRebuildIndex(){ - layer.confirm("修改配置后,是否尝试重建索引。", {icon:3,closeBtn: 1} , function(){ + layer.confirm("修改配置后,是否尝试重建索引!", {icon:3,closeBtn: 1} , function(){ rebuildIndex(); }); }