From 2bda3ab18da9fab80f512fbd9671465b81b3c981 Mon Sep 17 00:00:00 2001 From: midoks Date: Sun, 25 Nov 2018 16:46:23 +0800 Subject: [PATCH] mem --- plugins/memcached/ico.png | Bin 0 -> 801 bytes plugins/memcached/index.html | 16 +++ plugins/memcached/index.py | 96 ++++++++++++++++++ plugins/memcached/info.json | 17 ++++ plugins/memcached/install.sh | 43 ++++++++ plugins/memcached/js/redis.js | 178 ++++++++++++++++++++++++++++++++++ plugins/redis/info.json | 1 - plugins/redis/js/redis.js | 16 +-- 8 files changed, 354 insertions(+), 13 deletions(-) create mode 100755 plugins/memcached/ico.png create mode 100755 plugins/memcached/index.html create mode 100755 plugins/memcached/index.py create mode 100755 plugins/memcached/info.json create mode 100755 plugins/memcached/install.sh create mode 100755 plugins/memcached/js/redis.js diff --git a/plugins/memcached/ico.png b/plugins/memcached/ico.png new file mode 100755 index 0000000000000000000000000000000000000000..2183430fdead232dc1dd81e5e151b1783e2eb531 GIT binary patch literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jb)0X`wF z|NsAI=)cR*3q-dWy6-S_-(={#&d`1xBm!iEL~b*50?|#dAW#iZ5Udg?0@Zbsp$DcC zWC&OmC<0+aq~PKZEm#GC8WG}mzzzT#1u_uE04rGiLhKgM{Wc{*e!&ca5TFDB#vtGV z2BAQZ1_b5hQK$!8;-MT+O zL75WQh?3y^w370~qErUQl>DSr1-Hzi)bjkI>|zDyV6zu{HuW$tFi!DwaSXBOy*v4K z*dYS}*X3eb;iqL)ZfI$6Nhor4Uj6@Hzc_dDfm5GCKTj!6E3-D9%k*dYYw5Ap=%D@x)X74=;RThPYJB&sRy9EkPuYVu*&yeZG>eo+{EN&IJY=f;aUGT#|g|{;6S` zvFGm@_E)p5%u9&o2J@uIZ~(4jpybrD1jY|KaEC YZ#b4~Uc4L`2#iMtPgg&ebxsLQ086=EvH$=8 literal 0 HcmV?d00001 diff --git a/plugins/memcached/index.html b/plugins/memcached/index.html new file mode 100755 index 000000000..be3a7fdbd --- /dev/null +++ b/plugins/memcached/index.html @@ -0,0 +1,16 @@ +
+
+
+

服务

+

配置修改

+

负载状态

+
+
+
+
+
+ +
+ \ No newline at end of file diff --git a/plugins/memcached/index.py b/plugins/memcached/index.py new file mode 100755 index 000000000..e954d4d0f --- /dev/null +++ b/plugins/memcached/index.py @@ -0,0 +1,96 @@ +# coding:utf-8 + +import sys +import io +import os +import time + +sys.path.append(os.getcwd() + "/class/core") +import public + + +def status(): + data = public.execShell( + "ps -ef|grep redis |grep -v grep | grep -v python | awk '{print $2}'") + if data[0] == '': + return 'stop' + return 'start' + + +def start(): + path = os.path.dirname(os.getcwd()) + cmd = path + "/redis/bin/redis-server" + cmd = cmd + " " + path + "/redis/redis.conf" + data = public.execShell(cmd) + if data[0] == '': + return 'ok' + return 'fail' + + +def stop(): + data = public.execShell( + "ps -ef|grep redis |grep -v grep |grep -v python |awk '{print $2}' | xargs kill -9") + if data[0] == '': + return 'ok' + return 'fail' + + +def restart(): + return 'ok' + + +def reload(): + return 'ok' + + +def runInfo(): + path = os.path.dirname(os.getcwd()) + cmd = path + "/redis/bin/redis-cli info" + data = public.execShell(cmd)[0] + 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 public.getJson(result) + + +def getConf(): + path = os.path.dirname(os.getcwd()) + "/redis/redis.conf" + return path + +if __name__ == "__main__": + func = sys.argv[1] + if func == 'run_info': + print runInfo() + elif func == 'conf': + print getConf() + elif func == 'status': + print status() + elif func == 'start': + print start() + elif func == 'stop': + print stop() + elif func == 'restart': + print restart() + elif func == 'reload': + print reload() diff --git a/plugins/memcached/info.json b/plugins/memcached/info.json new file mode 100755 index 000000000..7bc555caf --- /dev/null +++ b/plugins/memcached/info.json @@ -0,0 +1,17 @@ +{ + "sort": 7, + "ps": "Memcached 是一个高性能的分布式内存对象缓存系统", + "name": "memcached", + "title": "Memcached", + "shell": "install.sh", + "versions":["1.5"], + "updates":["1.5.12"], + "tip": "soft", + "checks": "server/memcached", + "display": 1, + "author": "Zend", + "date": "2017-04-01", + "home": "http://memcached.org/", + "type": 0, + "pid": "2" +} \ No newline at end of file diff --git a/plugins/memcached/install.sh b/plugins/memcached/install.sh new file mode 100755 index 000000000..355155d96 --- /dev/null +++ b/plugins/memcached/install.sh @@ -0,0 +1,43 @@ +#!/bin/bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH + +curPath=`pwd` +rootPath=$(dirname "$curPath") +rootPath=$(dirname "$rootPath") +serverPath=$(dirname "$rootPath") + + +install_tmp=${rootPath}/tmp/bt_install.pl + + +Install_mem() +{ + mkdir -p $serverPath/tmp + + echo '正在安装脚本文件...' > $install_tmp + + wget -O $serverPath/tmp/redis.tar.gz http://download.redis.io/releases/redis-4.0.11.tar.gz + cd $serverPath/tmp && tar -zxvf redis.tar.gz + + mkdir -p $serverPath/redis + cd redis* && make PREFIX=$serverPath/redis install + sed '/^ *#/d' redis.conf > $serverPath/redis/redis.conf + + echo '安装完成' > $install_tmp + + rm -rf $serverPath/tmp +} + +Uninstall_mem() +{ + echo "Uninstall_mem" +} + + +action=$1 +if [ "${1}" == 'install' ];then + Install_mem +else + Uninstall_mem +fi diff --git a/plugins/memcached/js/redis.js b/plugins/memcached/js/redis.js new file mode 100755 index 000000000..d90e983ac --- /dev/null +++ b/plugins/memcached/js/redis.js @@ -0,0 +1,178 @@ +function redisOp(a, b) { + + var c = "name=" + a + "&func=" + b; + var d = ""; + + switch(b) { + case "stop": + d = '停止'; + break; + case "start": + d = '启动'; + break; + case "restart": + d = '重启'; + break; + case "reload": + d = '重载'; + break + } + layer.confirm( '您真的要{1}{2}服务吗?'.replace('{1}', d).replace('{2}', a), {icon:3,closeBtn: 2}, function() { + var e = layer.msg('正在{1}{2}服务,请稍候...'.replace('{1}', d).replace('{2}', a), {icon: 16,time: 0}); + $.post("/plugins/run", c, function(g) { + layer.close(e); + + var f = g.data == 'ok' ? '{1}服务已{2}'.replace('{1}', a).replace('{2}', d):'{1}服务{2}失败!'.replace('{1}', a).replace('{2}', d); + layer.msg(f, {icon: g.data == 'ok' ? 1 : 2}); + + if(b != "reload" && g.data == 'ok') { + if (b == 'start') { + setRedisService('redis', true); + } else if (b=='stop'){ + setRedisService('redis', false); + } else { + } + } + if(g.data != 'ok') { + layer.msg(g.data, {icon: 2,time: 0,shade: 0.3,shadeClose: true}); + } + },'json').error(function() { + layer.close(e); + layer.msg('操作成功!', {icon: 1}); + }); + }) +} + +//服务 +function setRedisService(name, status){ + var serviceCon ='

当前状态:'+(status ? '开启' : '关闭' )+ + '

\ + \ + \ + \ +
'; + $(".soft-man-con").html(serviceCon); +} + + +//服务 +function redisService(){ + + $.post('/plugins/run', {name:'redis', func:'status'}, function(data) { + console.log(data); + if(!data.status){ + layer.msg(data.msg,{icon:0,time:3000,shade: [0.3, '#000']}); + return; + } + if (data.data == 'start'){ + setRedisService('redis', true); + } else { + setRedisService('redis', false); + } + },'json'); +} + +redisService(); + + +//配置修改 --- start +function redisConfig(type){ + + var con = '

提示:Ctrl+F 搜索关键字,Ctrl+G 查找下一个,Ctrl+S 保存,Ctrl+Shift+R 查找替换!

\ + \ +
    \ +
  • 此处为redis主配置文件,若您不了解配置规则,请勿随意修改。
  • \ +
'; + $(".soft-man-con").html(con); + + var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']}); + $.post('/plugins/run', {name:'redis', func:'conf'},function (data) { + layer.close(loadT); + + var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']}); + var fileName = data.data; + $.post('/files/get_body', 'path=' + fileName, function(rdata) { + layer.close(loadT2); + if (!rdata.status){ + layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + $("#textBody").empty().text(rdata.data.data); + $(".CodeMirror").remove(); + var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { + extraKeys: { + "Ctrl-Space": "autocomplete", + "Ctrl-F": "findPersistent", + "Ctrl-H": "replaceAll", + "Ctrl-S": function() { + redisConfSafe(fileName); + } + }, + lineNumbers: true, + matchBrackets:true, + }); + editor.focus(); + $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); + $("#OnlineEditFileBtn").click(function(){ + $("#textBody").text(editor.getValue()); + redisConfSafe(fileName); + }); + },'json'); + },'json'); +} + +//配置保存 +function redisConfSafe(fileName) { + var data = encodeURIComponent($("#textBody").val()); + var encoding = 'utf-8'; + var loadT = layer.msg('保存中...', { + icon: 16, + time: 0 + }); + $.post('/files/save_body', 'data=' + data + '&path=' + fileName + '&encoding=' + encoding, function(rdata) { + layer.close(loadT); + layer.msg(rdata.msg, { + icon: rdata.status ? 1 : 2 + }); + },'json'); +} +//配置修改 --- end + +//redis负载状态 start +function redisStatus() { + var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); + $.post('/plugins/run', {name:'redis', func:'run_info'}, function(data) { + layer.close(loadT); + if (!data.status){ + layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + + var rdata = $.parseJSON(data.data); + hit = (parseInt(rdata.keyspace_hits) / (parseInt(rdata.keyspace_hits) + parseInt(rdata.keyspace_misses)) * 100).toFixed(2); + var Con = '
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
字段当前值说明
uptime_in_days' + rdata.uptime_in_days + '已运行天数
tcp_port' + rdata.tcp_port + '当前监听端口
connected_clients' + rdata.connected_clients + '连接的客户端数量
used_memory_rss' + ToSize(rdata.used_memory_rss) + 'Redis当前占用的系统内存总量
used_memory' + ToSize(rdata.used_memory) + 'Redis当前已分配的内存总量
used_memory_peak' + ToSize(rdata.used_memory_peak) + 'Redis历史分配内存的峰值
mem_fragmentation_ratio' + rdata.mem_fragmentation_ratio + '%内存碎片比率
total_connections_received' + rdata.total_connections_received + '运行以来连接过的客户端的总数量
total_commands_processed' + rdata.total_commands_processed + '运行以来执行过的命令的总数量
instantaneous_ops_per_sec' + rdata.instantaneous_ops_per_sec + '服务器每秒钟执行的命令数量
keyspace_hits' + rdata.keyspace_hits + '查找数据库键成功的次数
keyspace_misses' + rdata.keyspace_misses + '查找数据库键失败的次数
hit' + hit + '%查找数据库键命中率
latest_fork_usec' + rdata.latest_fork_usec + '最近一次 fork() 操作耗费的微秒数
' + $(".soft-man-con").html(Con); + },'json'); +} +//redis负载状态 end \ No newline at end of file diff --git a/plugins/redis/info.json b/plugins/redis/info.json index 0b3cb00c9..e65adf706 100755 --- a/plugins/redis/info.json +++ b/plugins/redis/info.json @@ -4,7 +4,6 @@ "name": "redis", "title": "Redis", "shell": "install.sh", - "default": false, "versions":["4.0"], "updates":["4.0.11"], "tip": "soft", diff --git a/plugins/redis/js/redis.js b/plugins/redis/js/redis.js index d90e983ac..eedb5c495 100755 --- a/plugins/redis/js/redis.js +++ b/plugins/redis/js/redis.js @@ -4,18 +4,10 @@ function redisOp(a, b) { var d = ""; switch(b) { - case "stop": - d = '停止'; - break; - case "start": - d = '启动'; - break; - case "restart": - d = '重启'; - break; - case "reload": - d = '重载'; - break + case "stop":d = '停止';break; + case "start":d = '启动';break; + case "restart":d = '重启';break; + case "reload":d = '重载';break; } layer.confirm( '您真的要{1}{2}服务吗?'.replace('{1}', d).replace('{2}', a), {icon:3,closeBtn: 2}, function() { var e = layer.msg('正在{1}{2}服务,请稍候...'.replace('{1}', d).replace('{2}', a), {icon: 16,time: 0});