This commit is contained in:
parent
1271b2f637
commit
3530e83bb9
|
|
@ -1,3 +1,41 @@
|
|||
|
||||
<style type="text/css">
|
||||
.bt-w-main{
|
||||
height: 600px;
|
||||
}
|
||||
|
||||
.session_clear_list {
|
||||
border:1px solid #ececec;
|
||||
margin-bottom: 15px;
|
||||
width: 270px;
|
||||
}
|
||||
|
||||
.session_clear_list .line {
|
||||
padding: 0;
|
||||
border-bottom: 1px solid #ececec;
|
||||
width: 270px;
|
||||
}
|
||||
|
||||
.session_clear_list .line:last-child {
|
||||
border-bottom: 0px;
|
||||
}
|
||||
|
||||
.session_clear_list .line span{
|
||||
width: auto;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
text-align: left;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.session_clear_list .line span:first-child {
|
||||
width: 170px;
|
||||
border-right: 1px solid #ececec;
|
||||
background: #f7f7f7;
|
||||
float: left;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="bt-form">
|
||||
<div class='plugin_version'></div>
|
||||
<div class="bt-w-main">
|
||||
|
|
@ -13,6 +51,7 @@
|
|||
<p onclick="disableFunc($('.plugin_version').attr('version'));">禁用函数</p>
|
||||
<p onclick="getFpmConfig($('.plugin_version').attr('version'));">性能调整</p>
|
||||
<p onclick="getFpmStatus($('.plugin_version').attr('version'));">负载状况</p>
|
||||
<p onclick="getSessionConfig($('.plugin_version').attr('version'));" title="session管理">会话管理</p>
|
||||
<p onclick="pluginLogs('php-apt',$('.plugin_version').attr('version'),'fpm_log');">FPM日志</p>
|
||||
<p onclick="pluginLogs('php-apt',$('.plugin_version').attr('version'),'fpm_slow_log');">慢日志</p>
|
||||
<p onclick="getPhpinfo($('.plugin_version').attr('version'));">PHPIFNO</p>
|
||||
|
|
|
|||
|
|
@ -490,6 +490,176 @@ def getFpmStatus(version):
|
|||
return mw.returnJson(True, "OK", data)
|
||||
|
||||
|
||||
def getSessionConf(version):
|
||||
filename = getConf(version)
|
||||
if not os.path.exists(filename):
|
||||
return mw.returnJson(False, '指定PHP版本不存在!')
|
||||
|
||||
phpini = mw.readFile(filename)
|
||||
|
||||
rep = r'session.save_handler\s*=\s*([0-9A-Za-z_& ~]+)(\s*;?|\r?\n)'
|
||||
save_handler = re.search(rep, phpini)
|
||||
if save_handler:
|
||||
save_handler = save_handler.group(1)
|
||||
else:
|
||||
save_handler = "files"
|
||||
|
||||
reppath = r'\nsession.save_path\s*=\s*"tcp\:\/\/([\d\.]+):(\d+).*\r?\n'
|
||||
passrep = r'\nsession.save_path\s*=\s*"tcp://[\w\.\?\:]+=(.*)"\r?\n'
|
||||
memcached = r'\nsession.save_path\s*=\s*"([\d\.]+):(\d+)"'
|
||||
save_path = re.search(reppath, phpini)
|
||||
if not save_path:
|
||||
save_path = re.search(memcached, phpini)
|
||||
passwd = re.search(passrep, phpini)
|
||||
port = ""
|
||||
if passwd:
|
||||
passwd = passwd.group(1)
|
||||
else:
|
||||
passwd = ""
|
||||
if save_path:
|
||||
port = save_path.group(2)
|
||||
save_path = save_path.group(1)
|
||||
|
||||
else:
|
||||
save_path = ""
|
||||
|
||||
data = {"save_handler": save_handler, "save_path": save_path,
|
||||
"passwd": passwd, "port": port}
|
||||
return mw.returnJson(True, 'ok', data)
|
||||
|
||||
|
||||
def setSessionConf(version):
|
||||
|
||||
args = getArgs()
|
||||
|
||||
ip = args['ip']
|
||||
port = args['port']
|
||||
passwd = args['passwd']
|
||||
save_handler = args['save_handler']
|
||||
|
||||
if save_handler != "file":
|
||||
iprep = r"(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})"
|
||||
if not re.search(iprep, ip):
|
||||
return mw.returnJson(False, '请输入正确的IP地址')
|
||||
|
||||
try:
|
||||
port = int(port)
|
||||
if port >= 65535 or port < 1:
|
||||
return mw.returnJson(False, '请输入正确的端口号')
|
||||
except:
|
||||
return mw.returnJson(False, '请输入正确的端口号')
|
||||
prep = r"[\~\`\/\=]"
|
||||
if re.search(prep, passwd):
|
||||
return mw.returnJson(False, '请不要输入以下特殊字符 " ~ ` / = "')
|
||||
|
||||
filename = getConf(version)
|
||||
if not os.path.exists(filename):
|
||||
return mw.returnJson(False, '指定PHP版本不存在!')
|
||||
phpini = mw.readFile(filename)
|
||||
|
||||
session_tmp = getServerDir() + "/tmp/session"
|
||||
|
||||
rep = r'session.save_handler\s*=\s*(.+)\r?\n'
|
||||
val = r'session.save_handler = ' + save_handler + '\n'
|
||||
phpini = re.sub(rep, val, phpini)
|
||||
|
||||
if save_handler == "memcached":
|
||||
if not re.search("memcached.so", phpini):
|
||||
return mw.returnJson(False, '请先安装%s扩展' % save_handler)
|
||||
rep = r'\nsession.save_path\s*=\s*(.+)\r?\n'
|
||||
val = r'\nsession.save_path = "%s:%s" \n' % (ip, port)
|
||||
if re.search(rep, phpini):
|
||||
phpini = re.sub(rep, val, phpini)
|
||||
else:
|
||||
phpini = re.sub('\n;session.save_path = "' + session_tmp + '"',
|
||||
'\n;session.save_path = "' + session_tmp + '"' + val, phpini)
|
||||
|
||||
if save_handler == "memcache":
|
||||
if not re.search("memcache.so", phpini):
|
||||
return mw.returnJson(False, '请先安装%s扩展' % save_handler)
|
||||
rep = r'\nsession.save_path\s*=\s*(.+)\r?\n'
|
||||
val = r'\nsession.save_path = "%s:%s" \n' % (ip, port)
|
||||
if re.search(rep, phpini):
|
||||
phpini = re.sub(rep, val, phpini)
|
||||
else:
|
||||
phpini = re.sub('\n;session.save_path = "' + session_tmp + '"',
|
||||
'\n;session.save_path = "' + session_tmp + '"' + val, phpini)
|
||||
|
||||
if save_handler == "redis":
|
||||
if not re.search("redis.so", phpini):
|
||||
return mw.returnJson(False, '请先安装%s扩展' % save_handler)
|
||||
if passwd:
|
||||
passwd = "?auth=" + passwd
|
||||
else:
|
||||
passwd = ""
|
||||
rep = r'\nsession.save_path\s*=\s*(.+)\r?\n'
|
||||
val = r'\nsession.save_path = "tcp://%s:%s%s"\n' % (ip, port, passwd)
|
||||
res = re.search(rep, phpini)
|
||||
if res:
|
||||
phpini = re.sub(rep, val, phpini)
|
||||
else:
|
||||
phpini = re.sub('\n;session.save_path = "' + session_tmp + '"',
|
||||
'\n;session.save_path = "' + session_tmp + '"' + val, phpini)
|
||||
|
||||
if save_handler == "file":
|
||||
rep = r'\nsession.save_path\s*=\s*(.+)\r?\n'
|
||||
val = r'\nsession.save_path = "' + session_tmp + '"\n'
|
||||
if re.search(rep, phpini):
|
||||
phpini = re.sub(rep, val, phpini)
|
||||
else:
|
||||
phpini = re.sub('\n;session.save_path = "' + session_tmp + '"',
|
||||
'\n;session.save_path = "' + session_tmp + '"' + val, phpini)
|
||||
|
||||
mw.writeFile(filename, phpini)
|
||||
reload(version)
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
|
||||
def getSessionCount_Origin(version):
|
||||
session_tmp = getServerDir() + "/tmp/session"
|
||||
d = [session_tmp]
|
||||
count = 0
|
||||
for i in d:
|
||||
if not os.path.exists(i):
|
||||
mw.execShell('mkdir -p %s' % i)
|
||||
list = os.listdir(i)
|
||||
for l in list:
|
||||
if os.path.isdir(i + "/" + l):
|
||||
l1 = os.listdir(i + "/" + l)
|
||||
for ll in l1:
|
||||
if "sess_" in ll:
|
||||
count += 1
|
||||
continue
|
||||
if "sess_" in l:
|
||||
count += 1
|
||||
|
||||
s = "find /tmp -mtime +1 |grep 'sess_' | wc -l"
|
||||
old_file = int(mw.execShell(s)[0].split("\n")[0])
|
||||
|
||||
s = "find " + session_tmp + " -mtime +1 |grep 'sess_'|wc -l"
|
||||
old_file += int(mw.execShell(s)[0].split("\n")[0])
|
||||
return {"total": count, "oldfile": old_file}
|
||||
|
||||
|
||||
def getSessionCount(version):
|
||||
data = getSessionCount_Origin(version)
|
||||
return mw.returnJson(True, 'ok!', data)
|
||||
|
||||
|
||||
def cleanSessionOld(version):
|
||||
s = "find /tmp -mtime +1 |grep 'sess_'|xargs rm -f"
|
||||
mw.execShell(s)
|
||||
|
||||
session_tmp = getServerDir() + "/tmp/session"
|
||||
s = "find " + session_tmp + " -mtime +1 |grep 'sess_' |xargs rm -f"
|
||||
mw.execShell(s)
|
||||
old_file_conf = getSessionCount_Origin(version)["oldfile"]
|
||||
if old_file_conf == 0:
|
||||
return mw.returnJson(True, '清理成功')
|
||||
else:
|
||||
return mw.returnJson(True, '清理失败')
|
||||
|
||||
|
||||
def getDisableFunc(version):
|
||||
filename = getConf(version)
|
||||
if not os.path.exists(filename):
|
||||
|
|
@ -688,6 +858,14 @@ if __name__ == "__main__":
|
|||
print(setFpmConfig(version))
|
||||
elif func == 'get_fpm_status':
|
||||
print(getFpmStatus(version))
|
||||
elif func == 'get_session_conf':
|
||||
print(getSessionConf(version))
|
||||
elif func == 'set_session_conf':
|
||||
print(setSessionConf(version))
|
||||
elif func == 'get_session_count':
|
||||
print(getSessionCount(version))
|
||||
elif func == 'clean_session_old':
|
||||
print(cleanSessionOld(version))
|
||||
elif func == 'get_disable_func':
|
||||
print(getDisableFunc(version))
|
||||
elif func == 'set_disable_func':
|
||||
|
|
|
|||
|
|
@ -368,6 +368,151 @@ function disableFunc(version) {
|
|||
$(".soft-man-con").html(con);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getSessionConfig(version){
|
||||
phpPost('get_session_conf', version, '', function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
if(!rdata.status){
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
return;
|
||||
}
|
||||
var rdata = rdata.data;
|
||||
|
||||
var cacheList = "<option value='file' " + (rdata.save_handler == "file" ? 'selected' : '') + ">file</option>" +
|
||||
"<option value='redis' " + (rdata.save_handler == "redis" ? 'selected' : '') + ">redis</option>" +
|
||||
"<option value='memcache' " + (rdata.save_handler == "memcache" ? 'selected' : '') + ">memcache</option>" +
|
||||
"<option value='memcached' " + (rdata.save_handler == "memcached" ? 'selected' : '') + ">memcached</option>";
|
||||
|
||||
|
||||
var info = rdata.save_path.split(":");
|
||||
var con = "<div class='conf_p'>" +
|
||||
"<p class='line'><span class='span_tit'>存储模式:</span><select class='bt-input-text' name='save_handler' style='width:200px;'>" + cacheList + "</select></p>" +
|
||||
"<p class='line'><span class='span_tit'>IP地址:</span><input class='bt-input-text' type='text' name='ip' style='width:200px;' value='"+ info[0] +"' /></p>" +
|
||||
"<p class='line'><span class='span_tit'>端口:</span><input class='bt-input-text' type='text' name='port' style='width:200px;' value='"+rdata.port+"' /></p>" +
|
||||
"<p class='line'><span class='span_tit'>密码:</span><input class='bt-input-text' type='text' name='passwd' style='width:200px;' value='"+rdata.passwd+"' /></p>" +
|
||||
"<p class='line'><div class='mtb15' style='margin-left:100px;'><button class='btn btn-success btn-sm' onclick='setSessionConfig(\"" + version + "\",1)'>保存</button></div></p>" +
|
||||
"</div>\
|
||||
<ul class='help-info-text c7'>\
|
||||
<li>若你的站点并发比较高,使用Redis,Memcache能有效提升PHP并发能力</li>\
|
||||
<li>若调整Session模式后,网站访问异常,请切换回原来的模式</li>\
|
||||
<li>切换Session模式会使在线的用户会话丢失,请在流量小的时候切换</li>\
|
||||
</ul>\
|
||||
<div id='session_clear' class='session_clear' style='border-top: #ccc 1px dashed;padding-top: 15px;margin-top: 15px;'>\
|
||||
</div>\
|
||||
</div>";
|
||||
|
||||
$(".soft-man-con").html(con);
|
||||
|
||||
if (rdata.save_handler == 'file'){
|
||||
$('input[name="ip"]').attr('disabled','disabled');
|
||||
$('input[name="port"]').attr('disabled','disabled');
|
||||
$('input[name="passwd"]').attr('placeholder','如果没有密码留空');
|
||||
$('input[name="passwd"]').attr('disabled','disabled');
|
||||
}
|
||||
|
||||
// change event
|
||||
$("select[name='save_handler']").change(function() {
|
||||
var type = $(this).val();
|
||||
|
||||
var passwd = $('input[name="passwd"]').val();
|
||||
if (passwd == ""){
|
||||
$('input[name="passwd"]').attr('placeholder','如果没有密码留空');
|
||||
}
|
||||
|
||||
var ip = $('input[name="ip"]').val();
|
||||
if (ip == ""){
|
||||
$('input[name="ip"]').val('127.0.0.1');
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case 'redis':
|
||||
var port = $('input[name="port"]').val();
|
||||
if (port == ""){
|
||||
$('input[name="port"]').val('6379');
|
||||
}
|
||||
$('input[name="ip"]').removeAttr('disabled');
|
||||
$('input[name="port"]').removeAttr('disabled');
|
||||
$('input[name="passwd"]').removeAttr('disabled');
|
||||
break;
|
||||
case 'file':
|
||||
$('input[name="ip"]').val("").attr('disabled','disabled');
|
||||
$('input[name="port"]').val("").attr('disabled','disabled');
|
||||
$('input[name="passwd"]').val("").attr('disabled','disabled');
|
||||
break;
|
||||
case 'memcache':
|
||||
var port = $('input[name="port"]').val();
|
||||
if (port == ""){
|
||||
$('input[name="port"]').val('11211');
|
||||
}
|
||||
$('input[name="ip"]').removeAttr('disabled');
|
||||
$('input[name="port"]').removeAttr('disabled');
|
||||
$('input[name="passwd"]').removeAttr('disabled');
|
||||
break;
|
||||
case 'memcached':
|
||||
var port = $('input[name="port"]').val();
|
||||
if (port == ""){
|
||||
$('input[name="port"]').val('11211');
|
||||
}
|
||||
$('input[name="ip"]').removeAttr('disabled');
|
||||
$('input[name="port"]').removeAttr('disabled');
|
||||
$('input[name="passwd"]').removeAttr('disabled');
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
//load session stats
|
||||
phpPost('get_session_count', version, '', function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
if(!rdata.status){
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
return;
|
||||
}
|
||||
var rdata = rdata.data;
|
||||
|
||||
var html_var = "<div class='clear_title' style='padding-bottom:15px;'>清理Session文件</div>\
|
||||
<div class='clear_conter'>\
|
||||
<div class='session_clear_list'>\
|
||||
<div class='line'><span>总Session文件数量</span><span>"+rdata.total+"</span></div>\
|
||||
<div class='line'><span>可清理的Session文件数量</span><span>"+rdata.oldfile+"</span></div>\
|
||||
</div>\
|
||||
<button id='clean_func' class='btn btn-success btn-sm clear_session_file'>清理session文件</button>";
|
||||
|
||||
$("#session_clear").html(html_var);
|
||||
|
||||
|
||||
$('#clean_func').click(function(){
|
||||
phpPost('clean_session_old', version, '', function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
showMsg(rdata.msg,function(){
|
||||
getSessionConfig(version);
|
||||
},{ icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function setSessionConfig(version){
|
||||
var ip = $('input[name="ip"]').val();
|
||||
var port = $('input[name="port"]').val();
|
||||
var passwd = $('input[name="passwd"]').val();
|
||||
var save_handler = $("select[name='save_handler']").val();
|
||||
var data = {
|
||||
ip:ip,
|
||||
port:port,
|
||||
passwd:passwd,
|
||||
save_handler:save_handler,
|
||||
};
|
||||
phpPost('set_session_conf', version, data, function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//设置禁用函数
|
||||
function setDisableFunc(version, act, fs) {
|
||||
var fsArr = fs.split(',');
|
||||
|
|
|
|||
Loading…
Reference in New Issue