pull/109/head
midoks 7 years ago
parent 7ef22d011a
commit 5bfed66c11
  1. 3
      plugins/memcached/index.html
  2. 82
      plugins/memcached/index.py
  3. 10
      plugins/memcached/init.d/memcached.tpl
  4. 33
      plugins/memcached/js/mem.js

@ -3,9 +3,8 @@
<div class="bt-w-menu"> <div class="bt-w-menu">
<p class="bgw" onclick="pluginService('memcached');">服务</p> <p class="bgw" onclick="pluginService('memcached');">服务</p>
<p onclick="pluginConfig('memcached');">配置修改</p> <p onclick="pluginConfig('memcached');">配置修改</p>
<p onclick="redisConfig();">切换版本</p>
<p onclick="memcachedStatus();">负载状态</p> <p onclick="memcachedStatus();">负载状态</p>
<p onclick="redisStatus();">性能调整</p> <p onclick="memcachedCache();">性能调整</p>
</div> </div>
<div class="bt-w-con pd15"> <div class="bt-w-con pd15">
<div class="soft-man-con"></div> <div class="soft-man-con"></div>

@ -19,8 +19,8 @@ def status():
def initDreplace(): def initDreplace():
file_tpl = os.getcwd() + '/plugins/memcached/init.d/memcached.tpl' file_tpl = getConf()
file_bin = getConf() file_bin = os.getcwd() + '/plugins/memcached/init.d/memcached'
if os.path.exists(file_bin): if os.path.exists(file_bin):
return file_bin return file_bin
@ -28,7 +28,7 @@ def initDreplace():
content = public.readFile(file_tpl) content = public.readFile(file_tpl)
service_path = os.path.dirname(os.getcwd()) service_path = os.path.dirname(os.getcwd())
content = content.replace('{$PATH}', service_path) content = content.replace('{$SERVER_PATH}', service_path)
public.writeFile(file_bin, content) public.writeFile(file_bin, content)
public.execShell('chmod +x ' + file_bin) public.execShell('chmod +x ' + file_bin)
@ -71,47 +71,63 @@ def runInfo():
# 获取memcached状态 # 获取memcached状态
import telnetlib import telnetlib
import re import re
tn = telnetlib.Telnet('127.0.0.1', 11211)
tn.write(b"stats\n") try:
tn.write(b"quit\n") tn = telnetlib.Telnet('127.0.0.1', 11211)
data = tn.read_all() tn.write(b"stats\n")
if type(data) == bytes: tn.write(b"quit\n")
data = data.decode('utf-8') data = tn.read_all()
data = data.replace('STAT', '').replace('END', '').split("\n") if type(data) == bytes:
result = {} data = data.decode('utf-8')
res = ['cmd_get', 'get_hits', 'get_misses', 'limit_maxbytes', 'curr_items', 'bytes', data = data.replace('STAT', '').replace('END', '').split("\n")
'evictions', 'limit_maxbytes', 'bytes_written', 'bytes_read', 'curr_connections'] result = {}
for d in data: res = ['cmd_get', 'get_hits', 'get_misses', 'limit_maxbytes', 'curr_items', 'bytes',
if len(d) < 3: 'evictions', 'limit_maxbytes', 'bytes_written', 'bytes_read', 'curr_connections']
continue for d in data:
t = d.split() if len(d) < 3:
if not t[0] in res: continue
continue t = d.split()
result[t[0]] = int(t[1]) if not t[0] in res:
result['hit'] = 1 continue
if result['get_hits'] > 0 and result['cmd_get'] > 0: result[t[0]] = int(t[1])
result['hit'] = float(result['get_hits']) / \ result['hit'] = 1
float(result['cmd_get']) * 100 if result['get_hits'] > 0 and result['cmd_get'] > 0:
result['hit'] = float(result['get_hits']) / \
conf = public.readFile(getConf()) float(result['cmd_get']) * 100
result['bind'] = re.search('IP=(.+)', conf).groups()[0]
result['port'] = int(re.search('PORT=(\d+)', conf).groups()[0]) conf = public.readFile(getConf())
result['maxconn'] = int(re.search('MAXCONN=(\d+)', conf).groups()[0]) result['bind'] = re.search('IP=(.+)', conf).groups()[0]
result['cachesize'] = int( result['port'] = int(re.search('PORT=(\d+)', conf).groups()[0])
re.search('CACHESIZE=(\d+)', conf).groups()[0]) result['maxconn'] = int(re.search('MAXCONN=(\d+)', conf).groups()[0])
return public.getJson(result) result['cachesize'] = int(
re.search('CACHESIZE=(\d+)', conf).groups()[0])
return public.getJson(result)
except Exception, e:
return public.getJson({})
def getConf(): def getConf():
path = os.getcwd() + "/plugins/memcached/init.d/memcached.tpl" path = os.getcwd() + "/plugins/memcached/init.d/memcached.tpl"
return path return path
def saveConf():
args = sys.argv[2]
if args == '':
return 'fail'
print args
if __name__ == "__main__": if __name__ == "__main__":
func = sys.argv[1] func = sys.argv[1]
print sys.argv
if func == 'run_info': if func == 'run_info':
print runInfo() print runInfo()
elif func == 'conf': elif func == 'conf':
print getConf() print getConf()
elif func == 'save_conf':
print saveConf()
elif func == 'status': elif func == 'status':
print status() print status()
elif func == 'start': elif func == 'start':
@ -122,3 +138,5 @@ if __name__ == "__main__":
print restart() print restart()
elif func == 'reload': elif func == 'reload':
print reload() print reload()
else:
print 'fail'

@ -27,9 +27,11 @@ OPTIONS=""
RETVAL=0 RETVAL=0
prog="memcached" prog="memcached"
MEM_PATH={$SERVER_PATH}/memcached
start () { start () {
echo -n $"Starting $prog: " echo -n $"Starting $prog: "
{$PATH}/memcached/bin/memcached -d -l $IP -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P {$PATH}/memcached/memcached.pid $OPTIONS $MEM_PATH/bin/memcached -d -l $IP -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P $MEM_PATH/memcached.pid $OPTIONS
if [ "$?" != 0 ] ; then if [ "$?" != 0 ] ; then
echo " failed" echo " failed"
exit 1 exit 1
@ -39,16 +41,16 @@ start () {
} }
stop () { stop () {
echo -n $"Stopping $prog: " echo -n $"Stopping $prog: "
if [ ! -e {$PATH}/memcached/$prog.pid ]; then if [ ! -e $MEM_PATH/$prog.pid ]; then
echo -n $"$prog is not running." echo -n $"$prog is not running."
exit 1 exit 1
fi fi
kill `cat {$PATH}/memcached/memcached.pid` kill `cat $MEM_PATH/memcached.pid`
if [ "$?" != 0 ] ; then if [ "$?" != 0 ] ; then
echo " failed" echo " failed"
exit 1 exit 1
else else
rm -f {$PATH}/memcached/memcached.pid rm -f ${MEM_PATH}/memcached.pid
echo " done" echo " done"
fi fi
} }

@ -5,12 +5,18 @@
function memcachedStatus() { function memcachedStatus() {
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
$.post('/plugins/run', {name:'memcached', func:'run_info'}, function(data) { $.post('/plugins/run', {name:'memcached', func:'run_info'}, function(data) {
if (!data.status){ layer.close(loadT);
if (!data.status){
showMsg(data.msg, function(){}, null,13000); showMsg(data.msg, function(){}, null,13000);
return; return;
} }
layer.close(loadT);
var rdata = $.parseJSON(data.data); var rdata = $.parseJSON(data.data);
if ($.isEmptyObject(rdata)){
showMsg('memcached服务没有启动!', function(){}, undefined, 3000);
return;
}
var Con = '<div class="divtable">\ var Con = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\ <table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>字段</th><th></th><th></th></thead>\ <thead><th>字段</th><th></th><th></th></thead>\
@ -38,17 +44,29 @@ function memcachedStatus() {
//memcached性能调整 //memcached性能调整
function memcachedCache() { function memcachedCache() {
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
$.get('/ajax?action=GetMemcachedStatus', function(rdata) { $.post('/plugins/run', {name:'memcached', func:'run_info'}, function(data) {
layer.close(loadT); layer.close(loadT);
if (!data.status){
showMsg(data.msg, function(){}, null,13000);
return;
}
var rdata = $.parseJSON(data.data);
if ($.isEmptyObject(rdata)){
showMsg('memcached服务没有启动!', function(){}, undefined, 3000);
return;
}
var memCon = '<div class="conf_p" style="margin-bottom:0">\ var memCon = '<div class="conf_p" style="margin-bottom:0">\
<p><span>BindIP</span><input style="width: 120px;" class="bt-input-text mr5" name="membind" value="' + rdata.bind + '" type="text" ><font>IP,</font></p>\ <p><span>BindIP</span><input style="width: 120px;" class="bt-input-text mr5" name="membind" value="' + rdata.bind + '" type="text" ><font>IP,</font></p>\
<p><span>PORT</span><input style="width: 120px;" class="bt-input-text mr5" max="65535" name="memport" value="' + rdata.port + '" type="number" ><font>,</font></p>\ <p><span>PORT</span><input style="width: 120px;" class="bt-input-text mr5" max="65535" name="memport" value="' + rdata.port + '" type="number" ><font>,</font></p>\
<p><span>CACHESIZE</span><input style="width: 120px;" class="bt-input-text mr5" name="memcachesize" value="' + rdata.cachesize + '" type="number" >MB,<font>,512M</font></p>\ <p><span>CACHESIZE</span><input style="width: 120px;" class="bt-input-text mr5" name="memcachesize" value="' + rdata.cachesize + '" type="number" >MB,<font>,512M</font></p>\
<p><span>MAXCONN</span><input style="width: 120px;" class="bt-input-text mr5" name="memmaxconn" value="' + rdata.maxconn + '" type="number" ><font>,40960</font></p>\ <p><span>MAXCONN</span><input style="width: 120px;" class="bt-input-text mr5" name="memmaxconn" value="' + rdata.maxconn + '" type="number" ><font>,40960</font></p>\
<div style="margin-top:10px; padding-right:230px" class="text-right"><button class="btn btn-success btn-sm" onclick="SetMemcachedConf()">' + lan.public.save + '</button></div>\ <div style="margin-top:10px; padding-right:230px" class="text-right"><button class="btn btn-success btn-sm" onclick="setMemcachedConf()">保存</button></div>\
</div>' </div>'
$(".soft-man-con").html(memCon); $(".soft-man-con").html(memCon);
}); },'json');
} }
//memcached提交配置 //memcached提交配置
@ -79,9 +97,10 @@ function setMemcachedConf() {
layer.msg('最大连接数过小', { icon: 2 }); layer.msg('最大连接数过小', { icon: 2 });
return; return;
} }
var loadT = layer.msg('正在保存...', { icon: 16, time: 0, shade: 0.3 }); var loadT = layer.msg('正在保存...', { icon: 16, time: 0, shade: 0.3 });
$.post('/ajax?action=SetMemcachedCache', data, function(rdata) { $.post('/plugins/run', {name:'memcached', func:'save_conf',args:JSON.stringify(data) }, function(rdata) {
layer.close(loadT); layer.close(loadT);
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
}); },'json');
} }
Loading…
Cancel
Save