From 9c9b0b9ae5ed3f06db39c39846325d09ea27ec3a Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Thu, 9 Nov 2023 15:08:45 +0800 Subject: [PATCH] =?UTF-8?q?redis=20=E5=A4=8D=E5=88=B6=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/redis/index.html | 12 +++++- plugins/redis/index.py | 87 +++++++++++++++++++++++++++++++++++---- plugins/redis/js/redis.js | 47 ++++++++++++++++++--- 3 files changed, 131 insertions(+), 15 deletions(-) diff --git a/plugins/redis/index.html b/plugins/redis/index.html index 67ebd4838..394238251 100755 --- a/plugins/redis/index.html +++ b/plugins/redis/index.html @@ -1,3 +1,12 @@ + +
@@ -8,10 +17,11 @@

配置修改

性能调整

负载状态

+

复制状态

日志

-
+
diff --git a/plugins/redis/index.py b/plugins/redis/index.py index 88fa8d8d9..5bf4413af 100755 --- a/plugins/redis/index.py +++ b/plugins/redis/index.py @@ -228,13 +228,8 @@ def getPort(): return '6379' -def runInfo(): - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - requirepass = "" - +def getRedisCmd(): + equirepass = "" conf = getServerDir() + '/redis.conf' content = mw.readFile(conf) rep = "^(requirepass" + ')\s*([.0-9A-Za-z_& ~]+)' @@ -252,10 +247,22 @@ def runInfo(): if requirepass != "": cmd = getServerDir() + '/bin/redis-cli -h ' + default_ip + \ - ' -p ' + port + ' -a "' + requirepass + '" info' + ' -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', # 已运行天数 @@ -282,6 +289,68 @@ def runInfo(): 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 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 initdStatus(): current_os = mw.getOs() @@ -425,6 +494,8 @@ if __name__ == "__main__": print(initdUinstall()) elif func == 'run_info': print(runInfo()) + elif func == 'info_replication': + print(infoReplication()) elif func == 'conf': print(getConf()) elif func == 'run_log': diff --git a/plugins/redis/js/redis.js b/plugins/redis/js/redis.js index 4dd189aca..d5cd24115 100755 --- a/plugins/redis/js/redis.js +++ b/plugins/redis/js/redis.js @@ -53,15 +53,11 @@ function redisPostCallbak(method, version, args,callback){ },'json'); } -//redis负载状态 start +//redis状态 start function redisStatus(version) { redisPost('run_info',version, {},function(data){ var rdata = $.parseJSON(data.data); - // if (!rdata.status){ - // layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); - // return; - // } hit = (parseInt(rdata.keyspace_hits) / (parseInt(rdata.keyspace_hits) + parseInt(rdata.keyspace_misses)) * 100).toFixed(2); var con = '
\ @@ -87,7 +83,46 @@ function redisStatus(version) { $(".soft-man-con").html(con); }); } -//redis负载状态 end + +function replStatus(version){ + redisPost('info_replication', version, {},function(data){ + var rdata = $.parseJSON(data.data); + + console.log(rdata) + // if (!rdata.status){ + // layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + // return; + // } + + var con = '
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
字段当前值说明
role' + rdata.role + '角色
master_host' + rdata.master_host + '连接主库HOST
master_port' + rdata.master_port + '连接主库PORT
master_link_status' + rdata.master_link_status + '连接主库状态
master_last_io_seconds_ago' + rdata.master_last_io_seconds_ago + '上次同步时间
master_sync_in_progress' +rdata.master_sync_in_progress + '正在同步中
slave_read_repl_offset' + rdata.slave_read_repl_offset + '从库读取复制位置
slave_repl_offset' + rdata.slave_repl_offset + '从库复制位置
slave_priority' + rdata.slave_priority + '从库同步优先级
slave_read_only' + rdata.slave_read_only + '从库是否仅读
replica_announced' + rdata.replica_announced + '已复制副本
connected_slaves' + rdata.connected_slaves + '连接数量
master_failover_state'+rdata.master_failover_state+'主库故障状态
master_replid' + rdata.master_replid + '主库复制ID
master_repl_offset'+rdata.master_repl_offset+'主库复制位置
second_repl_offset'+rdata.second_repl_offset+'主库复制位置时间
repl_backlog_size'+rdata.repl_backlog_size+'复制大小
repl_backlog_first_byte_offset'+rdata.repl_backlog_first_byte_offset+'第一个字节偏移量
repl_backlog_histlen'+rdata.repl_backlog_histlen+'backlog中数据的长度
'; + $(".soft-man-con").html(con); + }); +} +//redis状态 end //配置修改 function getRedisConfig(version) {