pull/109/head
midoks 7 years ago
parent 1a00d43469
commit 2bda3ab18d
  1. BIN
      plugins/memcached/ico.png
  2. 16
      plugins/memcached/index.html
  3. 96
      plugins/memcached/index.py
  4. 17
      plugins/memcached/info.json
  5. 43
      plugins/memcached/install.sh
  6. 178
      plugins/memcached/js/redis.js
  7. 1
      plugins/redis/info.json
  8. 16
      plugins/redis/js/redis.js

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

@ -0,0 +1,16 @@
<div class="bt-form">
<div class="bt-w-main">
<div class="bt-w-menu">
<p class="bgw" onclick="redisService();">服务</p>
<p onclick="redisConfig();">配置修改</p>
<p onclick="redisStatus();">负载状态</p>
</div>
<div class="bt-w-con pd15">
<div class="soft-man-con"></div>
</div>
</div>
</div>
<script type="text/javascript">
$.getScript( "/plugins/file?name=redis&f=js/redis.js");
</script>

@ -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()

@ -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"
}

@ -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

@ -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 ='<p class="status">当前状态:<span>'+(status ? '开启' : '关闭' )+
'</span><span style="color: '+
(status?'#20a53a;':'red;')+
' margin-left: 3px;" class="glyphicon ' + (status?'glyphicon glyphicon-play':'glyphicon-pause')+'"></span></p><div class="sfm-opt">\
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\''+(status?'stop':'start')+'\')">'+(status?'停止':'启动')+'</button>\
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\'restart\')">重启</button>\
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\'reload\')">重载配置</button>\
</div>';
$(".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 = '<p style="color: #666; margin-bottom: 7px">提示Ctrl+F 搜索关键字Ctrl+G 查找下一个Ctrl+S 保存Ctrl+Shift+R 查找替换!</p><textarea class="bt-input-text" style="height: 320px; line-height:18px;" id="textBody"></textarea>\
<button id="OnlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">保存</button>\
<ul class="help-info-text c7 ptb15">\
<li>此处为redis主配置文件,若您不了解配置规则,请勿随意修改</li>\
</ul>';
$(".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 = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>字段</th><th></th><th></th></thead>\
<tbody>\
<tr><th>uptime_in_days</th><td>' + rdata.uptime_in_days + '</td><td></td></tr>\
<tr><th>tcp_port</th><td>' + rdata.tcp_port + '</td><td></td></tr>\
<tr><th>connected_clients</th><td>' + rdata.connected_clients + '</td><td></td></tr>\
<tr><th>used_memory_rss</th><td>' + ToSize(rdata.used_memory_rss) + '</td><td>Redis</td></tr>\
<tr><th>used_memory</th><td>' + ToSize(rdata.used_memory) + '</td><td>Redis</td></tr>\
<tr><th>used_memory_peak</th><td>' + ToSize(rdata.used_memory_peak) + '</td><td>Redis</td></tr>\
<tr><th>mem_fragmentation_ratio</th><td>' + rdata.mem_fragmentation_ratio + '%</td><td></td></tr>\
<tr><th>total_connections_received</th><td>' + rdata.total_connections_received + '</td><td></td></tr>\
<tr><th>total_commands_processed</th><td>' + rdata.total_commands_processed + '</td><td></td></tr>\
<tr><th>instantaneous_ops_per_sec</th><td>' + rdata.instantaneous_ops_per_sec + '</td><td></td></tr>\
<tr><th>keyspace_hits</th><td>' + rdata.keyspace_hits + '</td><td></td></tr>\
<tr><th>keyspace_misses</th><td>' + rdata.keyspace_misses + '</td><td></td></tr>\
<tr><th>hit</th><td>' + hit + '%</td><td></td></tr>\
<tr><th>latest_fork_usec</th><td>' + rdata.latest_fork_usec + '</td><td> fork() </td></tr>\
<tbody>\
</table></div>'
$(".soft-man-con").html(Con);
},'json');
}
//redis负载状态 end

@ -4,7 +4,6 @@
"name": "redis", "name": "redis",
"title": "Redis", "title": "Redis",
"shell": "install.sh", "shell": "install.sh",
"default": false,
"versions":["4.0"], "versions":["4.0"],
"updates":["4.0.11"], "updates":["4.0.11"],
"tip": "soft", "tip": "soft",

@ -4,18 +4,10 @@ function redisOp(a, b) {
var d = ""; var d = "";
switch(b) { switch(b) {
case "stop": case "stop":d = '停止';break;
d = '停止'; case "start":d = '启动';break;
break; case "restart":d = '重启';break;
case "start": case "reload":d = '重载';break;
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() { 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}); var e = layer.msg('正在{1}{2}服务,请稍候...'.replace('{1}', d).replace('{2}', a), {icon: 16,time: 0});

Loading…
Cancel
Save