From ed295d54568763aaa54b65e1a84d0c10ecd6fcc9 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Thu, 1 Feb 2024 22:08:45 +0800 Subject: [PATCH] up --- plugins/data_query/info.json | 2 +- plugins/data_query/nosql_mongodb.py | 842 +++++++----------- plugins/data_query/static/html/index.html | 22 +- .../static/js/{data_query.js => app.js} | 10 +- route/static/app/public.js | 2 +- 5 files changed, 324 insertions(+), 554 deletions(-) rename plugins/data_query/static/js/{data_query.js => app.js} (97%) diff --git a/plugins/data_query/info.json b/plugins/data_query/info.json index 7200a1b88..4259fa3c0 100755 --- a/plugins/data_query/info.json +++ b/plugins/data_query/info.json @@ -7,7 +7,7 @@ "name":"data_query", "path":"static/html/index.html", "css_path":"static/css/data.css", - "js_path":"static/js/data_query.js" + "js_path":"static/js/app.js" } }, { diff --git a/plugins/data_query/nosql_mongodb.py b/plugins/data_query/nosql_mongodb.py index f3a58d4b6..881a2f6de 100755 --- a/plugins/data_query/nosql_mongodb.py +++ b/plugins/data_query/nosql_mongodb.py @@ -9,555 +9,333 @@ import re sys.path.append(os.getcwd() + "/class/core") import mw -app_debug = False -if mw.isAppleSystem(): - app_debug = True +def singleton(cls): + _instance = {} + + def inner(): + if cls not in _instance: + _instance[cls] = cls() + return _instance[cls] + return inner + + +@singleton +class nosqlMongodb(): + + __DB_PASS = None + __DB_USER = None + __DB_PORT = 6379 + __DB_HOST = '127.0.0.1' + __DB_CONN = None + __DB_ERR = None + + __DB_LOCAL = None + + def __init__(self): + self.__config = self.get_options(None) + + + def redis_conn(self, db_idx=0): + + if self.__DB_HOST in ['127.0.0.1', 'localhost']: + redis_path = "{}/redis".format(mw.getServerDir()) + if not os.path.exists(redis_path): return False + + if not self.__DB_LOCAL: + self.__DB_PASS = self.__config['requirepass'] + self.__DB_PORT = int(self.__config['port']) + + # print(self.__DB_HOST,self.__DB_PORT, self.__DB_PASS) + try: + redis_pool = redis.ConnectionPool(host=self.__DB_HOST, port=self.__DB_PORT, password=self.__DB_PASS, db=db_idx, socket_timeout=3) + self.__DB_CONN = redis.Redis(connection_pool=redis_pool) + self.__DB_CONN.ping() + return self.__DB_CONN + except redis.exceptions.ConnectionError: + return False + except Exception: + self.__DB_ERR = public.get_error_info() + return False + + # 获取配置项 + def get_options(self, get=None): + + result = {} + redis_conf = mw.readFile("{}/redis/redis.conf".format(mw.getServerDir())) + if not redis_conf: return False + + keys = ["bind", "port", "timeout", "maxclients", "databases", "requirepass", "maxmemory"] + for k in keys: + v = "" + rep = "\n%s\s+(.+)" % k + group = re.search(rep, redis_conf) + if not group: + if k == "maxmemory": + v = "0" + if k == "maxclients": + v = "10000" + if k == "requirepass": + v = "" + else: + if k == "maxmemory": + v = int(group.group(1).strip("mb")) + else: + v = group.group(1) + result[k] = v + return result + + def set_host(self, host, port, name, username, password, prefix=''): + self.__DB_HOST = host + self.__DB_PORT = int(port) + self.__DB_NAME = name + if self.__DB_NAME: self.__DB_NAME = str(self.__DB_NAME) + self.__DB_USER = str(username) + self._USER = str(username) + self.__DB_PASS = str(password) + self.__DB_PREFIX = prefix + self.__DB_LOCAL = 1 + return self + + + +@singleton +class nosqlMongodbCtr(): + + def __init__(self): + pass + + def getInstanceBySid(self, sid = 0): + instance = nosqlRedis() + return instance + + def getList(self, args): + + sid = args['sid'] + redis_instance = self.getInstanceBySid(sid).redis_conn(0) + if redis_instance is False: + return mw.returnData(False,'无法链接') + + + redis_info = redis_instance.info() + is_cluster = redis_info.get("cluster_enabled", 0) + if is_cluster != 0: + return mw.returnData(False, "当前不支持连接redis集群!") + + db_num = 16 + if sid != 0: + db_num = 1000 + + result = [] + for x in range(0, db_num): + data = {} + data['id'] = x + data['name'] = 'DB{}'.format(x) + try: + redis_instance = self.getInstanceBySid(sid).redis_conn(x) + data['keynum'] = redis_instance.dbsize() + result.append(data) + except: + break + + return mw.returnData(True,'ok', result) + + def getDbKeyList(self, args): + p = 1 + size = 10 + + if not 'sid' in args: + return mw.returnData(False, "缺少参数!sid") + + if 'p' in args: + p = args['p'] + if p < 1: + p = 1 + if p > 10: + p = 10 + + if 'size' in args: + size = args['size'] + + sid = args['sid'] + idx = args['idx'] + search = '*' + if 'search' in args and args['search'] != '': + search = args['search'] + + redis_instance = self.getInstanceBySid(sid).redis_conn(idx) + + total = redis_instance.dbsize() + + if search != '*': + keylist = redis_instance.keys(search) + total = len(keylist) + else: + keys = redis_instance.scan(cursor=0, match="{}".format(search), count=p*size) + keylist = keys[1] + + slist = keylist[(p - 1) * size:p*size] + + items = [] + for key in slist: + item = {} + try: + item['name'] = key.decode() + except Exception as e: + item['name'] = str(key) + + item['endtime'] = redis_instance.ttl(key) + item['type'] = redis_instance.type(key).decode() + + if item['type'] == 'string': + try: + item['val'] = redis_instance.get(key).decode() + except Exception as e: + item['val'] = str(redis_instance.get(key)) + elif item['type'] == 'hash': + if redis_instance.hlen(key) > 500: + item['val'] = "数据量过大无法显示!共 {} 条".format(redis_instance.hlen(key)) + else: + item['val'] = str(redis_instance.hgetall(key)) + elif item['type'] == 'list': + if redis_instance.llen(key) > 500: + item['val'] = "数据量过大无法显示!共 {} 条".format(redis_instance.llen(key)) + else: + item['val'] = str(redis_instance.lrange(key, 0, -1)) + elif item['type'] == 'set': + if redis_instance.scard(key) > 500: + item['val'] = "数据量过大无法显示!共 {} 条".format(redis_instance.scard(key)) + else: + item['val'] = str(redis_instance.smembers(key)) + elif item['type'] == 'zset': + if redis_instance.zcard(key) > 500: + item['val'] = "数据量过大无法显示!共 {} 条".format(redis_instance.zcard(key)) + else: + item['val'] = str(redis_instance.zrange(key, 0, -1, withscores=True)) + else: + item['val'] = '' + + try: + item['len'] = redis_instance.strlen(key) + except: + item['len'] = len(item['val']) + items.append(item) + + + page_args = {} + page_args['count'] = total + page_args['tojs'] = 'redisGetKeyList' + page_args['p'] = p + page_args['row'] = size + + rdata = {} + rdata['page'] = mw.getPage(page_args) + rdata['data'] = items + return mw.returnData(True,'ok',rdata) + + def setKv(self,args): + if not 'name' in args: + return mw.returnData(False, "缺少参数!name") + if not 'val' in args: + return mw.returnData(False, "缺少参数!val") + if not 'idx' in args: + return mw.returnData(False, "缺少参数!idx") + + sid = args['sid'] + idx = args['idx'] + + name = args["name"] + val = args["val"] + endtime = args["endtime"] + + redis_instance = self.getInstanceBySid(sid).redis_conn(idx) + + redis_info = redis_instance.info() + if redis_info['role'] == 'slave': + return mw.returnData(False,'从库不能写操作!') + + if endtime != '0': + redis_instance.set(name, val, int(endtime)) + else: + redis_instance.set(name, val) + return mw.returnData(True,'操作成功') -def getPluginName(): - return 'nosql_query' + def delVal(self, args): + sid = args['sid'] + idx = args['idx'] + name = args["name"] + redis_instance = self.getInstanceBySid(sid).redis_conn(idx) + redis_info = redis_instance.info() + if redis_info['role'] == 'slave': + return mw.returnData(False,'从库不能删除操作!') -def getPluginDir(): - return mw.getPluginDir() + '/' + getPluginName() + redis_instance.delete(name) + return mw.returnData(True,'操作成功') + def batchDelVal(self, args): + sid = args['sid'] + idx = args['idx'] + keys = args["keys"] + redis_instance = self.getInstanceBySid(sid).redis_conn(idx) -def getServerDir(): - return mw.getServerDir() + '/' + getPluginName() + redis_info = redis_instance.info() + if redis_info['role'] == 'slave': + return mw.returnData(False,'从库不能删除操作!') + for k in keys: + redis_instance.delete(k) + return mw.returnData(True,'操作成功') -def getInitDFile(): - current_os = mw.getOs() - if current_os == 'darwin': - return '/tmp/' + getPluginName() + def clearFlushDB(self, args): - if current_os.startswith('freebsd'): - return '/etc/rc.d/' + getPluginName() + sid = args['sid'] + idxs = args['idxs'] - return '/etc/init.d/' + getPluginName() + for idx in idxs: + redis_instance = self.getInstanceBySid(sid).redis_conn(idx) + redis_info = redis_instance.info() + if redis_info['role'] == 'slave': + return mw.returnData(False,'从库不能清空操作!') -def getConf(): - path = getServerDir() + "/redis.conf" - return path + redis_instance.flushdb() + return mw.returnData(True,'操作成功') -def getConfTpl(): - path = getPluginDir() + "/config/redis.conf" - return path +# ---------------------------------- run ---------------------------------- +# 获取 mongodb databases 列表 +def get_list(args): + t = nosqlMongodbCtr() + return t.getList(args) +# 获取 redis key 列表 +def get_dbkey_list(args): + t = nosqlMongodbCtr() + return t.getDbKeyList(args) -def getInitDTpl(): - path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl" - return path +def set_kv(args): + t = nosqlMongodbCtr() + return t.setKv(args) -def getArgs(): - args = sys.argv[3:] - tmp = {} - args_len = len(args) - if args_len == 1: - t = args[0].strip('{').strip('}') - if t.strip() == '': - tmp = [] - else: - t = t.split(':') - tmp[t[0]] = t[1] - tmp[t[0]] = t[1] - elif args_len > 1: - for i in range(len(args)): - t = args[i].split(':') - tmp[t[0]] = t[1] - return tmp - -def checkArgs(data, ck=[]): - for i in range(len(ck)): - if not ck[i] in data: - return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!')) - return (True, mw.returnJson(True, 'ok')) - -def configTpl(): - path = getPluginDir() + '/tpl' - pathFile = os.listdir(path) - tmp = [] - for one in pathFile: - file = path + '/' + one - tmp.append(file) - return mw.getJson(tmp) - - -def readConfigTpl(): - args = getArgs() - data = checkArgs(args, ['file']) - if not data[0]: - return data[1] - - content = mw.readFile(args['file']) - content = contentReplace(content) - return mw.returnJson(True, 'ok', content) - -def getPidFile(): - file = getConf() - content = mw.readFile(file) - rep = 'pidfile\s*(.*)' - tmp = re.search(rep, content) - return tmp.groups()[0].strip() - -def status(): - return 'start' - -def contentReplace(content): - service_path = mw.getServerDir() - content = content.replace('{$ROOT_PATH}', mw.getRootDir()) - content = content.replace('{$SERVER_PATH}', service_path) - content = content.replace('{$SERVER_APP}', service_path + '/redis') - content = content.replace('{$REDIS_PASS}', mw.getRandomString(10)) - return content - - - -def initDreplace(): +def del_val(args): + t = nosqlMongodbCtr() + return t.delVal(args) + +def batch_del_val(args): + t = nosqlMongodbCtr() + return t.batchDelVal(args) + +def clear_flushdb(args): + t = nosqlMongodbCtr() + return t.clearFlushDB(args) - file_tpl = getInitDTpl() - service_path = os.path.dirname(os.getcwd()) - - initD_path = getServerDir() + '/init.d' - if not os.path.exists(initD_path): - os.mkdir(initD_path) - file_bin = initD_path + '/' + getPluginName() - - # initd replace - if not os.path.exists(file_bin): - content = mw.readFile(file_tpl) - content = content.replace('{$SERVER_PATH}', service_path) - mw.writeFile(file_bin, content) - mw.execShell('chmod +x ' + file_bin) - - # log - dataLog = getServerDir() + '/data' - if not os.path.exists(dataLog): - mw.execShell('chmod +x ' + file_bin) - - # config replace - dst_conf = getServerDir() + '/redis.conf' - dst_conf_init = getServerDir() + '/init.pl' - if not os.path.exists(dst_conf_init): - conf_content = mw.readFile(getConfTpl()) - conf_content = conf_content.replace('{$SERVER_PATH}', service_path) - conf_content = conf_content.replace( - '{$REDIS_PASS}', mw.getRandomString(10)) - - mw.writeFile(dst_conf, conf_content) - mw.writeFile(dst_conf_init, 'ok') - - # systemd - systemDir = mw.systemdCfgDir() - systemService = systemDir + '/' + getPluginName() + '.service' - if os.path.exists(systemDir) and not os.path.exists(systemService): - systemServiceTpl = getPluginDir() + '/init.d/' + getPluginName() + '.service.tpl' - service_path = mw.getServerDir() - se_content = mw.readFile(systemServiceTpl) - se_content = se_content.replace('{$SERVER_PATH}', service_path) - mw.writeFile(systemService, se_content) - mw.execShell('systemctl daemon-reload') - - return file_bin - - -def redisOp(method): - file = initDreplace() - - current_os = mw.getOs() - if current_os == "darwin": - data = mw.execShell(file + ' ' + method) - if data[1] == '': - return 'ok' - return data[1] - - if current_os.startswith("freebsd"): - data = mw.execShell('service ' + getPluginName() + ' ' + method) - if data[1] == '': - return 'ok' - return data[1] - - data = mw.execShell('systemctl ' + method + ' ' + getPluginName()) - if data[1] == '': - return 'ok' - return data[1] - - -def start(): - return redisOp('start') - - -def stop(): - return redisOp('stop') - - -def restart(): - status = redisOp('restart') - - log_file = runLog() - mw.execShell("echo '' > " + log_file) - return status - - -def reload(): - return redisOp('reload') - - -def getPort(): - conf = getServerDir() + '/redis.conf' - content = mw.readFile(conf) - - rep = "^(" + 'port' + ')\s*([.0-9A-Za-z_& ~]+)' - tmp = re.search(rep, content, re.M) - if tmp: - return tmp.groups()[1] - - return '6379' - - -def getRedisCmd(): - requirepass = "" - conf = getServerDir() + '/redis.conf' - content = mw.readFile(conf) - rep = "^(requirepass" + ')\s*([.0-9A-Za-z_& ~]+)' - tmp = re.search(rep, content, re.M) - if tmp: - requirepass = tmp.groups()[1] - - default_ip = '127.0.0.1' - port = getPort() - # findDebian = mw.execShell('cat /etc/issue |grep Debian') - # if findDebian[0] != '': - # default_ip = mw.getLocalIp() - cmd = getServerDir() + "/bin/redis-cli -h " + \ - default_ip + ' -p ' + port + " " - - if requirepass != "": - cmd = getServerDir() + '/bin/redis-cli -h ' + default_ip + \ - ' -p ' + port + ' -a "' + requirepass + '" ' - - return cmd - -def runInfo(): - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - - cmd = getRedisCmd() - cmd = cmd + 'info' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - res = [ - 'tcp_port', - 'uptime_in_days', # 已运行天数 - 'connected_clients', # 连接的客户端数量 - 'used_memory', # Redis已分配的内存总量 - 'used_memory_rss', # Redis占用的系统内存总量 - 'used_memory_peak', # Redis所用内存的高峰值 - 'mem_fragmentation_ratio', # 内存碎片比率 - 'total_connections_received', # 运行以来连接过的客户端的总数量 - 'total_commands_processed', # 运行以来执行过的命令的总数量 - 'instantaneous_ops_per_sec', # 服务器每秒钟执行的命令数量 - 'keyspace_hits', # 查找数据库键成功的次数 - 'keyspace_misses', # 查找数据库键失败的次数 - 'latest_fork_usec' # 最近一次 fork() 操作耗费的毫秒数 - ] - data = data.split("\n") - result = {} - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in res: - continue - result[t[0]] = t[1] - return mw.getJson(result) - -def infoReplication(): - # 复制信息 - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - cmd = getRedisCmd() - cmd = cmd + 'info replication' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - res = [ - #slave - 'role',#角色 - 'master_host', # 连接主库HOST - 'master_port', # 连接主库PORT - 'master_link_status', # 连接主库状态 - 'master_last_io_seconds_ago', # 上次同步时间 - 'master_sync_in_progress', # 正在同步中 - 'slave_read_repl_offset', # 从库读取复制位置 - 'slave_repl_offset', # 从库复制位置 - 'slave_priority', # 从库同步优先级 - 'slave_read_only', # 从库是否仅读 - 'replica_announced', # 已复制副本 - 'connected_slaves', # 连接从库数量 - 'master_failover_state', # 主库故障状态 - 'master_replid', # 主库复制ID - 'master_repl_offset', # 主库复制位置 - 'second_repl_offset', # 主库复制位置时间 - 'repl_backlog_active', # 复制状态 - 'repl_backlog_size', # 复制大小 - 'repl_backlog_first_byte_offset', # 第一个字节偏移量 - 'repl_backlog_histlen', # backlog中数据的长度 - ] - - data = data.split("\n") - result = {} - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in res: - continue - result[t[0]] = t[1] - - if 'role' in result and result['role'] == 'master': - connected_slaves = int(result['connected_slaves']) - slave_l = [] - for x in range(connected_slaves): - slave_l.append('slave'+str(x)) - - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in slave_l: - continue - result[t[0]] = t[1] - - return mw.getJson(result) - - -def clusterInfo(): - #集群信息 - # https://redis.io/commands/cluster-info/ - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - cmd = getRedisCmd() - cmd = cmd + 'cluster info' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - - res = [ - 'cluster_state',#状态 - 'cluster_slots_assigned', # 被分配的槽 - 'cluster_slots_ok', # 被分配的槽状态 - 'cluster_slots_pfail', # 连接主库状态 - 'cluster_slots_fail', # 失败的槽 - 'cluster_known_nodes', # 知道的节点 - 'cluster_size', # 大小 - 'cluster_current_epoch', # - 'cluster_my_epoch', # - 'cluster_stats_messages_sent', # 发送 - 'cluster_stats_messages_received', # 接受 - 'total_cluster_links_buffer_limit_exceeded', # - ] - - data = data.split("\n") - result = {} - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in res: - continue - result[t[0]] = t[1] - - return mw.getJson(result) - -def clusterNodes(): - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - cmd = getRedisCmd() - cmd = cmd + 'cluster nodes' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - - data = data.strip().split("\n") - return mw.getJson(data) - -def initdStatus(): - current_os = mw.getOs() - if current_os == 'darwin': - return "Apple Computer does not support" - - if current_os.startswith('freebsd'): - initd_bin = getInitDFile() - if os.path.exists(initd_bin): - return 'ok' - - shell_cmd = 'systemctl status ' + \ - getPluginName() + ' | grep loaded | grep "enabled;"' - data = mw.execShell(shell_cmd) - if data[0] == '': - return 'fail' - return 'ok' - - -def initdInstall(): - current_os = mw.getOs() - if current_os == 'darwin': - return "Apple Computer does not support" - - # freebsd initd install - if current_os.startswith('freebsd'): - import shutil - source_bin = initDreplace() - initd_bin = getInitDFile() - shutil.copyfile(source_bin, initd_bin) - mw.execShell('chmod +x ' + initd_bin) - mw.execShell('sysrc ' + getPluginName() + '_enable="YES"') - return 'ok' - - mw.execShell('systemctl enable ' + getPluginName()) - return 'ok' - - -def initdUinstall(): - current_os = mw.getOs() - if current_os == 'darwin': - return "Apple Computer does not support" - - if current_os.startswith('freebsd'): - initd_bin = getInitDFile() - os.remove(initd_bin) - mw.execShell('sysrc ' + getPluginName() + '_enable="NO"') - return 'ok' - - mw.execShell('systemctl disable ' + getPluginName()) - return 'ok' - - -def runLog(): - return getServerDir() + '/data/redis.log' - - -def getRedisConfInfo(): - conf = getServerDir() + '/redis.conf' - - gets = [ - {'name': 'bind', 'type': 2, 'ps': '绑定IP(修改绑定IP可能会存在安全隐患)','must_show':1}, - {'name': 'port', 'type': 2, 'ps': '绑定端口','must_show':1}, - {'name': 'timeout', 'type': 2, 'ps': '空闲链接超时时间,0表示不断开','must_show':1}, - {'name': 'maxclients', 'type': 2, 'ps': '最大连接数','must_show':1}, - {'name': 'databases', 'type': 2, 'ps': '数据库数量','must_show':1}, - {'name': 'requirepass', 'type': 2, 'ps': 'redis密码,留空代表没有设置密码','must_show':1}, - {'name': 'maxmemory', 'type': 2, 'ps': 'MB,最大使用内存,0表示不限制','must_show':1}, - {'name': 'slaveof', 'type': 2, 'ps': '同步主库地址','must_show':0}, - {'name': 'masterauth', 'type': 2, 'ps': '同步主库密码', 'must_show':0} - ] - content = mw.readFile(conf) - - result = [] - for g in gets: - rep = "^(" + g['name'] + ')\s*([.0-9A-Za-z_& ~]+)' - tmp = re.search(rep, content, re.M) - if not tmp: - if g['must_show'] == 0: - continue - - g['value'] = '' - result.append(g) - continue - g['value'] = tmp.groups()[1] - if g['name'] == 'maxmemory': - g['value'] = g['value'].strip("mb") - result.append(g) - - return result - - -def getRedisConf(): - data = getRedisConfInfo() - return mw.getJson(data) - - -def submitRedisConf(): - gets = ['bind', 'port', 'timeout', 'maxclients', - 'databases', 'requirepass', 'maxmemory','slaveof','masterauth'] - args = getArgs() - conf = getServerDir() + '/redis.conf' - content = mw.readFile(conf) - for g in gets: - if g in args: - rep = g + '\s*([.0-9A-Za-z_& ~]+)' - val = g + ' ' + args[g] - - if g == 'maxmemory': - val = g + ' ' + args[g] + "mb" - - if g == 'requirepass' and args[g] == '': - content = re.sub('requirepass', '#requirepass', content) - if g == 'requirepass' and args[g] != '': - content = re.sub('#requirepass', 'requirepass', content) - content = re.sub(rep, val, content) - - if g != 'requirepass': - content = re.sub(rep, val, content) - mw.writeFile(conf, content) - reload() - return mw.returnJson(True, '设置成功') - -if __name__ == "__main__": - func = sys.argv[1] - if func == 'status': - print(status()) - elif func == 'start': - print(start()) - elif func == 'stop': - print(stop()) - elif func == 'restart': - print(restart()) - elif func == 'reload': - print(reload()) - elif func == 'initd_status': - print(initdStatus()) - elif func == 'initd_install': - print(initdInstall()) - elif func == 'initd_uninstall': - print(initdUinstall()) - elif func == 'run_info': - print(runInfo()) - elif func == 'info_replication': - print(infoReplication()) - elif func == 'cluster_info': - print(clusterInfo()) - elif func == 'cluster_nodes': - print(clusterNodes()) - elif func == 'conf': - print(getConf()) - elif func == 'run_log': - print(runLog()) - elif func == 'get_redis_conf': - print(getRedisConf()) - elif func == 'submit_redis_conf': - print(submitRedisConf()) - elif func == 'config_tpl': - print(configTpl()) - elif func == 'read_config_tpl': - print(readConfigTpl()) - else: - print('error') +# 测试 +def test(args): + sid = args['sid'] + t = nosqlMongodbCtr() + print(t.get_options()) + print("test") + return 'ok' \ No newline at end of file diff --git a/plugins/data_query/static/html/index.html b/plugins/data_query/static/html/index.html index 961a82d5b..439d76364 100644 --- a/plugins/data_query/static/html/index.html +++ b/plugins/data_query/static/html/index.html @@ -2,8 +2,8 @@
-
Redis
+
Mongodb
@@ -20,17 +20,15 @@
- -
- + + @@ -40,7 +38,7 @@
编号 操作类型 详情
-
+
1共1条
@@ -104,8 +102,7 @@
1共1条
- - + @@ -113,11 +110,6 @@
-
diff --git a/plugins/data_query/static/js/data_query.js b/plugins/data_query/static/js/app.js similarity index 97% rename from plugins/data_query/static/js/data_query.js rename to plugins/data_query/static/js/app.js index 0d85b50dd..d04569f1f 100755 --- a/plugins/data_query/static/js/data_query.js +++ b/plugins/data_query/static/js/app.js @@ -71,12 +71,12 @@ function initTabRedis(){ //渲染数据 redisGetList(); - $('#redis_add_key').click(function(){ + $('#redis_add_key').unbind('click').click(function(){ redisAdd(); }); //搜索 - $('#redis_ksearch').keyup(function(e){ + $('#redis_ksearch').unbind('click').keyup(function(e){ if (e.keyCode == 13){ var val = $(this).val(); if (val == ''){ @@ -87,7 +87,7 @@ function initTabRedis(){ } }); - $('#redis_ksearch_span').click(function(){ + $('#redis_ksearch_span').unbind('click').click(function(){ var val = $('#redis_ksearch').val(); if (val == ''){ layer.msg('搜索不能为空!',{icon:7}); @@ -97,12 +97,12 @@ function initTabRedis(){ }); //批量删除 - $('#redis_batch_del').click(function(){ + $('#redis_batch_del').unbind('click').click(function(){ redisBatchDel(); }); //清空所有 - $('#redis_clear_all').click(function(){ + $('#redis_clear_all').unbind('click').click(function(){ redisBatchClear(); }); diff --git a/route/static/app/public.js b/route/static/app/public.js index 4f12b7f7f..a65678667 100755 --- a/route/static/app/public.js +++ b/route/static/app/public.js @@ -1049,7 +1049,7 @@ function flySlow(a) { }; function readerTableChecked(){ - $('thead').find('input').bind('click',function(){ + $('thead').find('input').unbind('click').bind('click',function(){ $('tbody').find('tr').each(function(i,obj){ var fin = $(this).find('td')[0]; checked = $(fin).find('input').prop('checked');