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 查找替换!

\ \ '; $(".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 //memcached负载状态 function MemcachedStatus() { var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); $.get('/ajax?action=GetMemcachedStatus', function(rdata) { layer.close(loadT); var Con = '
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
字段当前值说明
BindIP' + rdata.bind + '监听IP
PORT' + rdata.port + '监听端口
CACHESIZE' + rdata.cachesize + ' MB最大缓存容量
MAXCONN' + rdata.maxconn + '最大连接数限制
curr_connections' + rdata.curr_connections + '当前打开的连接数
cmd_get' + rdata.cmd_get + 'GET请求数
get_hits' + rdata.get_hits + 'GET命中次数
get_misses' + rdata.get_misses + 'GET失败次数
hit' + rdata.hit.toFixed(2) + '%GET命中率
curr_items' + rdata.curr_items + '当前被缓存的数据行数
evictions' + rdata.evictions + '因内存不足而被清理的缓存行数
bytes' + ToSize(rdata.bytes) + '当前已使用内存
bytes_read' + ToSize(rdata.bytes_read) + '请求总大小
bytes_written' + ToSize(rdata.bytes_written) + '发送总大小
' $(".soft-man-con").html(Con); }); } //memcached性能调整 function MemcachedCache() { var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); $.get('/ajax?action=GetMemcachedStatus', function(rdata) { layer.close(loadT); var memCon = '
\

BindIP监听IP,请勿随意修改

\

PORT监听端口,一般无需修改

\

CACHESIZEMB,缓存大小,建议不要大于512M

\

MAXCONN最大连接数,建议不要大于40960

\
\
' $(".soft-man-con").html(memCon); }); } //memcached提交配置 function SetMemcachedConf() { var data = { ip: $("input[name='membind']").val(), port: $("input[name='memport']").val(), cachesize: $("input[name='memcachesize']").val(), maxconn: $("input[name='memmaxconn']").val() } if (data.ip.split('.').length < 4) { layer.msg('IP地址格式不正确!', { icon: 2 }); return; } if (data.port < 1 || data.port > 65535) { layer.msg('端口范围不正确!', { icon: 2 }); return; } if (data.cachesize < 8) { layer.msg('缓存值过小', { icon: 2 }); return; } if (data.maxconn < 4) { layer.msg('最大连接数过小', { icon: 2 }); return; } var loadT = layer.msg('正在保存...', { icon: 16, time: 0, shade: 0.3 }); $.post('/ajax?action=SetMemcachedCache', data, function(rdata) { layer.close(loadT); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); }