mirror of https://github.com/midoks/mdserver-web
parent
f5b4c03354
commit
4893eaf58f
@ -0,0 +1,441 @@ |
|||||||
|
function selectChange() { |
||||||
|
$("#SelectVersion,#selectVer").change(function() { |
||||||
|
var info = $(this).val(); |
||||||
|
var name = info.split(" ")[0]; |
||||||
|
var version = info.split(" ")[1]; |
||||||
|
max = 64 |
||||||
|
msg = "64M" |
||||||
|
if (name == 'mysql') { |
||||||
|
memSize = getCookie('memSize'); |
||||||
|
switch (version) { |
||||||
|
case '5.1': |
||||||
|
max = 256; |
||||||
|
msg = '256M'; |
||||||
|
break; |
||||||
|
case '8.0': |
||||||
|
max = 5200; |
||||||
|
msg = '6GB'; |
||||||
|
break; |
||||||
|
case '5.7': |
||||||
|
max = 1500; |
||||||
|
msg = '2GB'; |
||||||
|
break; |
||||||
|
case '5.6': |
||||||
|
max = 800; |
||||||
|
msg = '1GB'; |
||||||
|
break; |
||||||
|
case 'AliSQL': |
||||||
|
max = 800; |
||||||
|
msg = '1GB'; |
||||||
|
break; |
||||||
|
case 'mariadb_10.0': |
||||||
|
max = 800; |
||||||
|
msg = '1GB'; |
||||||
|
break; |
||||||
|
case 'mariadb_10.1': |
||||||
|
max = 1500; |
||||||
|
msg = '2GB'; |
||||||
|
break; |
||||||
|
} |
||||||
|
if (memSize < max) { |
||||||
|
layer.msg(lan.bt.insatll_mem.replace('{1}', msg).replace('{2}', version), { icon: 5 }); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//设置二进制日志
|
||||||
|
function SetBinLog() { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: 0.3 }); |
||||||
|
$.post('/database?action=BinLog', "", function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); |
||||||
|
mysqlLog(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//清空日志
|
||||||
|
function closeMySqlLog() { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: 0.3 }); |
||||||
|
$.post('/database?action=GetErrorLog', "close=1", function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); |
||||||
|
mysqlLog(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//数据库端口
|
||||||
|
function changeMySQLPort(act) { |
||||||
|
if (act != undefined) { |
||||||
|
layer.confirm(lan.soft.mysql_port_title, { closeBtn: 2, icon: 3 }, function() { |
||||||
|
var port = $("#dataport").val(); |
||||||
|
var data = 'port=' + port; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/database?action=SetMySQLPort', data, function(rdata) { |
||||||
|
layer.close(loadT) |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); |
||||||
|
}); |
||||||
|
}); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
$.post('/database?action=GetMySQLInfo', '', function(rdata) { |
||||||
|
var LimitCon = '<p class="conf_p">\ |
||||||
|
<input id="dataport" class="phpUploadLimit bt-input-text mr20" type="number" value="' + rdata.port + '" name="dataport">\ |
||||||
|
<button style="margin-top: -1px;" class="btn btn-success btn-sm" onclick="changeMySQLPort(1)">' + lan.public.edit + '</button>\ |
||||||
|
</p>'; |
||||||
|
|
||||||
|
$(".soft-man-con").html(LimitCon); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//软件切换版本
|
||||||
|
function softChangeVer(name, version) { |
||||||
|
if (name == "mysqld") name = "mysql"; |
||||||
|
var veropt = version.split("|"); |
||||||
|
var SelectVersion = ''; |
||||||
|
for (var i = 0; i < veropt.length; i++) { |
||||||
|
SelectVersion += '<option>' + name + ' ' + veropt[i] + '</option>'; |
||||||
|
} |
||||||
|
|
||||||
|
var body = "<div class='ver line'><span class='tname'>" + lan.soft.select_version + "</span><select id='selectVer' class='bt-input-text mr20' name='phpVersion' style='width:160px'>"; |
||||||
|
body += SelectVersion + '</select><button class="btn btn-success btn-sm">' + lan.soft.version_to + '</button></div>'; |
||||||
|
|
||||||
|
if (name == 'mysql') { |
||||||
|
body += "<ul class='help-info-text c7 ptb15'><li style='color:red;'>" + lan.soft.mysql_f + "</li></ul>" |
||||||
|
} |
||||||
|
|
||||||
|
$(".soft-man-con").html(body); |
||||||
|
$(".btn-success").click(function() { |
||||||
|
var ver = $("#selectVer").val(); |
||||||
|
oneInstall(name, ver.split(" ")[1]); |
||||||
|
}); |
||||||
|
selectChange(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//设置MySQL配置参数
|
||||||
|
function SetMySQLConf() { |
||||||
|
$.post('/system?action=GetMemInfo', '', function(memInfo) { |
||||||
|
//var memSize = memInfo['memTotal'];
|
||||||
|
//var setSize = parseInt($("input[name='memSize']").val());
|
||||||
|
//if(memSize < setSize){
|
||||||
|
// var msg = lan.soft.mysql_set_err.replace('{1}',memSize).replace('{2}',setSize);
|
||||||
|
// layer.msg(msg,{icon:2,time:5000});
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
var query_cache_size = parseInt($("input[name='query_cache_size']").val()); |
||||||
|
var query_cache_type = 0; |
||||||
|
if (query_cache_size > 0) { |
||||||
|
query_cache_type = 1; |
||||||
|
} |
||||||
|
var data = { |
||||||
|
key_buffer_size: parseInt($("input[name='key_buffer_size']").val()), |
||||||
|
query_cache_size: query_cache_size, |
||||||
|
query_cache_type: query_cache_type, |
||||||
|
tmp_table_size: parseInt($("input[name='tmp_table_size']").val()), |
||||||
|
max_heap_table_size: parseInt($("input[name='tmp_table_size']").val()), |
||||||
|
innodb_buffer_pool_size: parseInt($("input[name='innodb_buffer_pool_size']").val()), |
||||||
|
innodb_log_buffer_size: parseInt($("input[name='innodb_log_buffer_size']").val()), |
||||||
|
sort_buffer_size: parseInt($("input[name='sort_buffer_size']").val()), |
||||||
|
read_buffer_size: parseInt($("input[name='read_buffer_size']").val()), |
||||||
|
read_rnd_buffer_size: parseInt($("input[name='read_rnd_buffer_size']").val()), |
||||||
|
join_buffer_size: parseInt($("input[name='join_buffer_size']").val()), |
||||||
|
thread_stack: parseInt($("input[name='thread_stack']").val()), |
||||||
|
binlog_cache_size: parseInt($("input[name='binlog_cache_size']").val()), |
||||||
|
thread_cache_size: parseInt($("input[name='thread_cache_size']").val()), |
||||||
|
table_open_cache: parseInt($("input[name='table_open_cache']").val()), |
||||||
|
max_connections: parseInt($("input[name='max_connections']").val()) |
||||||
|
}; |
||||||
|
|
||||||
|
$.post('/database?action=SetDbConf', data, function(rdata) { |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//MySQL内存优化方案
|
||||||
|
function MySQLMemOpt(opt) { |
||||||
|
var query_size = parseInt($("input[name='query_cache_size']").val()); |
||||||
|
switch (opt) { |
||||||
|
case '1': |
||||||
|
$("input[name='key_buffer_size']").val(128); |
||||||
|
if (query_size) $("input[name='query_cache_size']").val(64); |
||||||
|
$("input[name='tmp_table_size']").val(64); |
||||||
|
$("input[name='innodb_buffer_pool_size']").val(256); |
||||||
|
$("input[name='sort_buffer_size']").val(768); |
||||||
|
$("input[name='read_buffer_size']").val(768); |
||||||
|
$("input[name='read_rnd_buffer_size']").val(512); |
||||||
|
$("input[name='join_buffer_size']").val(1024); |
||||||
|
$("input[name='thread_stack']").val(256); |
||||||
|
$("input[name='binlog_cache_size']").val(64); |
||||||
|
$("input[name='thread_cache_size']").val(64); |
||||||
|
$("input[name='table_open_cache']").val(128); |
||||||
|
$("input[name='max_connections']").val(100); |
||||||
|
break; |
||||||
|
case '2': |
||||||
|
$("input[name='key_buffer_size']").val(256); |
||||||
|
if (query_size) $("input[name='query_cache_size']").val(128); |
||||||
|
$("input[name='tmp_table_size']").val(384); |
||||||
|
$("input[name='innodb_buffer_pool_size']").val(384); |
||||||
|
$("input[name='sort_buffer_size']").val(768); |
||||||
|
$("input[name='read_buffer_size']").val(768); |
||||||
|
$("input[name='read_rnd_buffer_size']").val(512); |
||||||
|
$("input[name='join_buffer_size']").val(2048); |
||||||
|
$("input[name='thread_stack']").val(256); |
||||||
|
$("input[name='binlog_cache_size']").val(64); |
||||||
|
$("input[name='thread_cache_size']").val(96); |
||||||
|
$("input[name='table_open_cache']").val(192); |
||||||
|
$("input[name='max_connections']").val(200); |
||||||
|
break; |
||||||
|
case '3': |
||||||
|
$("input[name='key_buffer_size']").val(384); |
||||||
|
if (query_size) $("input[name='query_cache_size']").val(192); |
||||||
|
$("input[name='tmp_table_size']").val(512); |
||||||
|
$("input[name='innodb_buffer_pool_size']").val(512); |
||||||
|
$("input[name='sort_buffer_size']").val(1024); |
||||||
|
$("input[name='read_buffer_size']").val(1024); |
||||||
|
$("input[name='read_rnd_buffer_size']").val(768); |
||||||
|
$("input[name='join_buffer_size']").val(2048); |
||||||
|
$("input[name='thread_stack']").val(256); |
||||||
|
$("input[name='binlog_cache_size']").val(128); |
||||||
|
$("input[name='thread_cache_size']").val(128); |
||||||
|
$("input[name='table_open_cache']").val(384); |
||||||
|
$("input[name='max_connections']").val(300); |
||||||
|
break; |
||||||
|
case '4': |
||||||
|
$("input[name='key_buffer_size']").val(512); |
||||||
|
if (query_size) $("input[name='query_cache_size']").val(256); |
||||||
|
$("input[name='tmp_table_size']").val(1024); |
||||||
|
$("input[name='innodb_buffer_pool_size']").val(1024); |
||||||
|
$("input[name='sort_buffer_size']").val(2048); |
||||||
|
$("input[name='read_buffer_size']").val(2048); |
||||||
|
$("input[name='read_rnd_buffer_size']").val(1024); |
||||||
|
$("input[name='join_buffer_size']").val(4096); |
||||||
|
$("input[name='thread_stack']").val(384); |
||||||
|
$("input[name='binlog_cache_size']").val(192); |
||||||
|
$("input[name='thread_cache_size']").val(192); |
||||||
|
$("input[name='table_open_cache']").val(1024); |
||||||
|
$("input[name='max_connections']").val(400); |
||||||
|
break; |
||||||
|
case '5': |
||||||
|
$("input[name='key_buffer_size']").val(1024); |
||||||
|
if (query_size) $("input[name='query_cache_size']").val(384); |
||||||
|
$("input[name='tmp_table_size']").val(2048); |
||||||
|
$("input[name='innodb_buffer_pool_size']").val(4096); |
||||||
|
$("input[name='sort_buffer_size']").val(4096); |
||||||
|
$("input[name='read_buffer_size']").val(4096); |
||||||
|
$("input[name='read_rnd_buffer_size']").val(2048); |
||||||
|
$("input[name='join_buffer_size']").val(8192); |
||||||
|
$("input[name='thread_stack']").val(512); |
||||||
|
$("input[name='binlog_cache_size']").val(256); |
||||||
|
$("input[name='thread_cache_size']").val(256); |
||||||
|
$("input[name='table_open_cache']").val(2048); |
||||||
|
$("input[name='max_connections']").val(500); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//重启MySQL
|
||||||
|
function ReBootMySqld() { |
||||||
|
var loadT = layer.msg(lan.get('service_the', [lan.bt.restart, 'MySQLd']), { icon: 16, time: 0, shade: 0.3 }); |
||||||
|
$.post('/system?action=ServiceAdmin', 'name=mysqld&type=restart', function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//计算MySQL内存开销
|
||||||
|
function ComMySqlMem() { |
||||||
|
var key_buffer_size = parseInt($("input[name='key_buffer_size']").val()); |
||||||
|
var query_cache_size = parseInt($("input[name='query_cache_size']").val()); |
||||||
|
var tmp_table_size = parseInt($("input[name='tmp_table_size']").val()); |
||||||
|
var innodb_buffer_pool_size = parseInt($("input[name='innodb_buffer_pool_size']").val()); |
||||||
|
var innodb_additional_mem_pool_size = parseInt($("input[name='innodb_additional_mem_pool_size']").val()); |
||||||
|
var innodb_log_buffer_size = parseInt($("input[name='innodb_log_buffer_size']").val()); |
||||||
|
|
||||||
|
var sort_buffer_size = $("input[name='sort_buffer_size']").val() / 1024; |
||||||
|
var read_buffer_size = $("input[name='read_buffer_size']").val() / 1024; |
||||||
|
var read_rnd_buffer_size = $("input[name='read_rnd_buffer_size']").val() / 1024; |
||||||
|
var join_buffer_size = $("input[name='join_buffer_size']").val() / 1024; |
||||||
|
var thread_stack = $("input[name='thread_stack']").val() / 1024; |
||||||
|
var binlog_cache_size = $("input[name='binlog_cache_size']").val() / 1024; |
||||||
|
var max_connections = $("input[name='max_connections']").val(); |
||||||
|
|
||||||
|
var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size |
||||||
|
var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size |
||||||
|
var memSize = a + max_connections * b |
||||||
|
$("input[name='memSize']").val(memSize.toFixed(2)); |
||||||
|
} |
||||||
|
|
||||||
|
//数据库存储信置
|
||||||
|
function changeMySQLDataPath(act) { |
||||||
|
if (act != undefined) { |
||||||
|
layer.confirm(lan.soft.mysql_to_msg, { closeBtn: 2, icon: 3 }, function() { |
||||||
|
var datadir = $("#datadir").val(); |
||||||
|
var data = 'datadir=' + datadir; |
||||||
|
var loadT = layer.msg(lan.soft.mysql_to_msg1, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/database?action=SetDataDir', data, function(rdata) { |
||||||
|
layer.close(loadT) |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 }); |
||||||
|
}); |
||||||
|
}); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
$.post('/database?action=GetMySQLInfo', '', function(rdata) { |
||||||
|
var LimitCon = '<p class="conf_p">\ |
||||||
|
<input id="datadir" class="phpUploadLimit bt-input-text mr5" style="width:350px;" type="text" value="' + rdata.datadir + '" name="datadir">\ |
||||||
|
<span onclick="ChangePath(\'datadir\')" class="glyphicon glyphicon-folder-open cursor mr20" style="width:auto"></span><button class="btn btn-success btn-sm" onclick="changeMySQLDataPath(1)">' + lan.soft.mysql_to + '</button>\ |
||||||
|
</p>'; |
||||||
|
$(".soft-man-con").html(LimitCon); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//MySQL-Slow日志
|
||||||
|
function mysqlSlowLog() { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/database?action=GetSlowLogs', {}, function(logs) { |
||||||
|
layer.close(loadT); |
||||||
|
if (logs.status !== true) { |
||||||
|
logs.msg = ''; |
||||||
|
} |
||||||
|
if (logs.msg == '') logs.msg = '当前没有慢日志.'; |
||||||
|
var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">' + logs.msg + '</textarea>'; |
||||||
|
$(".soft-man-con").html(phpCon); |
||||||
|
var ob = document.getElementById('error_log'); |
||||||
|
ob.scrollTop = ob.scrollHeight; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//数据库日志
|
||||||
|
function mysqlLog(act) { |
||||||
|
//获取二进制日志相关信息
|
||||||
|
$.post('/database?action=BinLog', "status=1", function(rdata) { |
||||||
|
var limitCon = '<p class="conf_p">\ |
||||||
|
<span class="f14 c6 mr20">' + lan.soft.mysql_log_bin + ' </span><span class="f14 c6 mr20">' + ToSize(rdata.msg) + '</span>\ |
||||||
|
<button class="btn btn-success btn-xs va0" onclick="SetBinLog();">' + (rdata.status ? lan.soft.off : lan.soft.on) + '</button>\ |
||||||
|
<p class="f14 c6 mtb10" style="border-top:#ddd 1px solid; padding:10px 0">' + lan.soft.mysql_log_err + '<button class="btn btn-default btn-xs" style="float:right;" onclick="closeMySqlLog();">' + lan.soft.mysql_log_close + '</button></p>\ |
||||||
|
<textarea readonly style="margin: 0px;width: 515px;height: 440px;background-color: #333;color:#fff; padding:0 5px" id="error_log"></textarea>\ |
||||||
|
</p>' |
||||||
|
|
||||||
|
$(".soft-man-con").html(limitCon); |
||||||
|
|
||||||
|
//获取错误日志
|
||||||
|
$.post('/database?action=GetErrorLog', "", function(error_body) { |
||||||
|
if (error_body.status === false) { |
||||||
|
layer.msg(error_body.msg, { icon: 5 }); |
||||||
|
error_body = lan.soft.mysql_log_ps1; |
||||||
|
} |
||||||
|
if (error_body == "") error_body = lan.soft.mysql_log_ps1; |
||||||
|
$("#error_log").text(error_body); |
||||||
|
var ob = document.getElementById('error_log'); |
||||||
|
ob.scrollTop = ob.scrollHeight; |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//取数据库运行状态
|
||||||
|
function mysqlRunStatus() { |
||||||
|
$.post('/database?action=GetRunStatus', "", function(rdata) { |
||||||
|
var cache_size = ((parseInt(rdata.Qcache_hits) / (parseInt(rdata.Qcache_hits) + parseInt(rdata.Qcache_inserts))) * 100).toFixed(2) + '%'; |
||||||
|
if (cache_size == 'NaN%') cache_size = 'OFF'; |
||||||
|
var Con = '<div class="divtable"><table class="table table-hover table-bordered" style="width: 490px;margin-bottom:10px;background-color:#fafafa">\ |
||||||
|
<tbody>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title1 + '</th><td>' + getLocalTime(rdata.Run) + '</td><th>' + lan.soft.mysql_status_title5 + '</th><td>' + parseInt(rdata.Questions / rdata.Uptime) + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title2 + '</th><td>' + rdata.Connections + '</td><th>' + lan.soft.mysql_status_title6 + '</th><td>' + parseInt((parseInt(rdata.Com_commit) + parseInt(rdata.Com_rollback)) / rdata.Uptime) + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title3 + '</th><td>' + ToSize(rdata.Bytes_sent) + '</td><th>' + lan.soft.mysql_status_title7 + '</th><td>' + rdata.File + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title4 + '</th><td>' + ToSize(rdata.Bytes_received) + '</td><th>' + lan.soft.mysql_status_title8 + '</th><td>' + rdata.Position + '</td></tr>\ |
||||||
|
</tbody>\ |
||||||
|
</table>\ |
||||||
|
<table class="table table-hover table-bordered" style="width: 490px;">\ |
||||||
|
<thead style="display:none;"><th></th><th></th><th></th><th></th></thead>\ |
||||||
|
<tbody>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title9 + '</th><td>' + rdata.Threads_running + '/' + rdata.Max_used_connections + '</td><td colspan="2">' + lan.soft.mysql_status_ps1 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title10 + '</th><td>' + ((1 - rdata.Threads_created / rdata.Connections) * 100).toFixed(2) + '%</td><td colspan="2">' + lan.soft.mysql_status_ps2 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title11 + '</th><td>' + ((1 - rdata.Key_reads / rdata.Key_read_requests) * 100).toFixed(2) + '%</td><td colspan="2">' + lan.soft.mysql_status_ps3 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title12 + '</th><td>' + ((1 - rdata.Innodb_buffer_pool_reads / rdata.Innodb_buffer_pool_read_requests) * 100).toFixed(2) + '%</td><td colspan="2">' + lan.soft.mysql_status_ps4 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title13 + '</th><td>' + cache_size + '</td><td colspan="2">' + lan.soft.mysql_status_ps5 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title14 + '</th><td>' + ((rdata.Created_tmp_disk_tables / rdata.Created_tmp_tables) * 100).toFixed(2) + '%</td><td colspan="2">' + lan.soft.mysql_status_ps6 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title15 + '</th><td>' + rdata.Open_tables + '</td><td colspan="2">' + lan.soft.mysql_status_ps7 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title16 + '</th><td>' + rdata.Select_full_join + '</td><td colspan="2">' + lan.soft.mysql_status_ps8 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title17 + '</th><td>' + rdata.Select_range_check + '</td><td colspan="2">' + lan.soft.mysql_status_ps9 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title18 + '</th><td>' + rdata.Sort_merge_passes + '</td><td colspan="2">' + lan.soft.mysql_status_ps10 + '</td></tr>\ |
||||||
|
<tr><th>' + lan.soft.mysql_status_title19 + '</th><td>' + rdata.Table_locks_waited + '</td><td colspan="2">' + lan.soft.mysql_status_ps11 + '</td></tr>\ |
||||||
|
<tbody>\ |
||||||
|
</table></div>' |
||||||
|
$(".soft-man-con").html(Con); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//数据库配置状态
|
||||||
|
function mysqlStatus() { |
||||||
|
//获取MySQL配置
|
||||||
|
$.post('/database?action=GetDbStatus', "", function(rdata) { |
||||||
|
var key_buffer_size = ToSizeM(rdata.mem.key_buffer_size) |
||||||
|
var query_cache_size = ToSizeM(rdata.mem.query_cache_size) |
||||||
|
var tmp_table_size = ToSizeM(rdata.mem.tmp_table_size) |
||||||
|
var innodb_buffer_pool_size = ToSizeM(rdata.mem.innodb_buffer_pool_size) |
||||||
|
var innodb_additional_mem_pool_size = ToSizeM(rdata.mem.innodb_additional_mem_pool_size) |
||||||
|
var innodb_log_buffer_size = ToSizeM(rdata.mem.innodb_log_buffer_size) |
||||||
|
|
||||||
|
var sort_buffer_size = ToSizeM(rdata.mem.sort_buffer_size) |
||||||
|
var read_buffer_size = ToSizeM(rdata.mem.read_buffer_size) |
||||||
|
var read_rnd_buffer_size = ToSizeM(rdata.mem.read_rnd_buffer_size) |
||||||
|
var join_buffer_size = ToSizeM(rdata.mem.join_buffer_size) |
||||||
|
var thread_stack = ToSizeM(rdata.mem.thread_stack) |
||||||
|
var binlog_cache_size = ToSizeM(rdata.mem.binlog_cache_size) |
||||||
|
|
||||||
|
var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size |
||||||
|
var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size |
||||||
|
var memSize = a + rdata.mem.max_connections * b |
||||||
|
|
||||||
|
|
||||||
|
var memCon = '<div class="conf_p" style="margin-bottom:0">\ |
||||||
|
<div style="border-bottom:#ccc 1px solid;padding-bottom:10px;margin-bottom:10px"><span><b>' + lan.soft.mysql_set_msg + '</b></span>\ |
||||||
|
<select class="bt-input-text" name="mysql_set" style="margin-left:-4px">\ |
||||||
|
<option value="0">' + lan.soft.mysql_set_select + '</option>\ |
||||||
|
<option value="1">1-2GB</option>\ |
||||||
|
<option value="2">2-4GB</option>\ |
||||||
|
<option value="3">4-8GB</option>\ |
||||||
|
<option value="4">8-16GB</option>\ |
||||||
|
<option value="5">16-32GB</option>\ |
||||||
|
</select>\ |
||||||
|
<span>' + lan.soft.mysql_set_maxmem + ': </span><input style="width:70px;background-color:#eee;" class="bt-input-text mr5" name="memSize" type="text" value="' + memSize.toFixed(2) + '" readonly>MB\ |
||||||
|
</div>\ |
||||||
|
<p><span>key_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="key_buffer_size" value="' + key_buffer_size + '" type="number" >MB, <font>' + lan.soft.mysql_set_key_buffer_size + '</font></p>\ |
||||||
|
<p><span>query_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="query_cache_size" value="' + query_cache_size + '" type="number" >MB, <font>' + lan.soft.mysql_set_query_cache_size + '</font></p>\ |
||||||
|
<p><span>tmp_table_size</span><input style="width: 70px;" class="bt-input-text mr5" name="tmp_table_size" value="' + tmp_table_size + '" type="number" >MB, <font>' + lan.soft.mysql_set_tmp_table_size + '</font></p>\ |
||||||
|
<p><span>innodb_buffer_pool_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_buffer_pool_size" value="' + innodb_buffer_pool_size + '" type="number" >MB, <font>' + lan.soft.mysql_set_innodb_buffer_pool_size + '</font></p>\ |
||||||
|
<p><span>innodb_log_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_log_buffer_size" value="' + innodb_log_buffer_size + '" type="number">MB, <font>' + lan.soft.mysql_set_innodb_log_buffer_size + '</font></p>\ |
||||||
|
<p style="display:none;"><span>innodb_additional_mem_pool_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_additional_mem_pool_size" value="' + innodb_additional_mem_pool_size + '" type="number" >MB</p>\ |
||||||
|
<p><span>sort_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="sort_buffer_size" value="' + (sort_buffer_size * 1024) + '" type="number" >KB * ' + lan.soft.mysql_set_conn + ', <font>' + lan.soft.mysql_set_sort_buffer_size + '</font></p>\ |
||||||
|
<p><span>read_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="read_buffer_size" value="' + (read_buffer_size * 1024) + '" type="number" >KB * ' + lan.soft.mysql_set_conn + ', <font>' + lan.soft.mysql_set_read_buffer_size + ' </font></p>\ |
||||||
|
<p><span>read_rnd_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="read_rnd_buffer_size" value="' + (read_rnd_buffer_size * 1024) + '" type="number" >KB * ' + lan.soft.mysql_set_conn + ', <font>' + lan.soft.mysql_set_read_rnd_buffer_size + ' </font></p>\ |
||||||
|
<p><span>join_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="join_buffer_size" value="' + (join_buffer_size * 1024) + '" type="number" >KB * ' + lan.soft.mysql_set_conn + ', <font>' + lan.soft.mysql_set_join_buffer_size + '</font></p>\ |
||||||
|
<p><span>thread_stack</span><input style="width: 70px;" class="bt-input-text mr5" name="thread_stack" value="' + (thread_stack * 1024) + '" type="number" >KB * ' + lan.soft.mysql_set_conn + ', <font>' + lan.soft.mysql_set_thread_stack + '</font></p>\ |
||||||
|
<p><span>binlog_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="binlog_cache_size" value="' + (binlog_cache_size * 1024) + '" type="number" >KB * ' + lan.soft.mysql_set_conn + ', <font>' + lan.soft.mysql_set_binlog_cache_size + '</font></p>\ |
||||||
|
<p><span>thread_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="thread_cache_size" value="' + rdata.mem.thread_cache_size + '" type="number" ><font> ' + lan.soft.mysql_set_thread_cache_size + '</font></p>\ |
||||||
|
<p><span>table_open_cache</span><input style="width: 70px;" class="bt-input-text mr5" name="table_open_cache" value="' + rdata.mem.table_open_cache + '" type="number" > <font>' + lan.soft.mysql_set_table_open_cache + '</font></p>\ |
||||||
|
<p><span>max_connections</span><input style="width: 70px;" class="bt-input-text mr5" name="max_connections" value="' + rdata.mem.max_connections + '" type="number" ><font> ' + lan.soft.mysql_set_max_connections + '</font></p>\ |
||||||
|
<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" onclick="ReBootMySqld()">' + lan.soft.mysql_set_restart + '</button><button class="btn btn-success btn-sm" onclick="SetMySQLConf()">' + lan.public.save + '</button></div>\ |
||||||
|
</div>' |
||||||
|
|
||||||
|
$(".soft-man-con").html(memCon); |
||||||
|
|
||||||
|
$(".conf_p input[name*='size'],.conf_p input[name='max_connections'],.conf_p input[name='thread_stack']").change(function() { |
||||||
|
ComMySqlMem(); |
||||||
|
}); |
||||||
|
|
||||||
|
$(".conf_p select[name='mysql_set']").change(function() { |
||||||
|
MySQLMemOpt($(this).val()); |
||||||
|
ComMySqlMem(); |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
} |
@ -1,170 +1,616 @@ |
|||||||
function redisOp(a, b) { |
//软件管理
|
||||||
|
function phpSoftMain(name, key) { |
||||||
var c = "name=" + a + "&func=" + b; |
if (!isNaN(name)) { |
||||||
var d = ""; |
var nametext = "php" + name; |
||||||
|
name = name.replace(".", ""); |
||||||
switch(b) { |
} |
||||||
case "stop":d = '停止';break; |
|
||||||
case "start":d = '启动';break; |
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
case "restart":d = '重启';break; |
$.get('/plugins?action=getPluginInfo&name=php', function(rdata) { |
||||||
case "reload":d = '重载';break; |
layer.close(loadT); |
||||||
} |
nameA = rdata.versions[key]; |
||||||
layer.confirm( '您真的要{1}{2}服务吗?'.replace('{1}', d).replace('{2}', a), {icon:3,closeBtn: 2}, function() { |
bodys = [ |
||||||
var e = layer.msg('正在{1}{2}服务,请稍候...'.replace('{1}', d).replace('{2}', a), {icon: 16,time: 0}); |
'<p class="bgw pstate" data-id="0"><a href="javascript:service(\'' + name + '\',' + nameA.run + ')">' + lan.soft.php_main1 + '</a><span class="spanmove"></span></p>', |
||||||
$.post("/plugins/run", c, function(g) { |
'<p data-id="1"><a id="phpext" href="javascript:SetPHPConfig(\'' + name + '\',' + nameA.pathinfo + ')">' + lan.soft.php_main5 + '</a><span class="spanmove"></span></p>', |
||||||
layer.close(e); |
'<p data-id="2"><a href="javascript:SetPHPConf(\'' + name + '\')">' + lan.soft.config_edit + '</a><span class="spanmove"></span></p>', |
||||||
|
'<p data-id="3"><a href="javascript:phpUploadLimit(\'' + name + '\',' + nameA.max + ')">' + lan.soft.php_main2 + '</a><span class="spanmove"></span></p>', |
||||||
var f = g.data == 'ok' ? '{1}服务已{2}'.replace('{1}', a).replace('{2}', d):'{1}服务{2}失败!'.replace('{1}', a).replace('{2}', d); |
'<p class="phphide" data-id="4"><a href="javascript:phpTimeLimit(\'' + name + '\',' + nameA.maxTime + ')">' + lan.soft.php_main3 + '</a><span class="spanmove"></span></p>', |
||||||
layer.msg(f, {icon: g.data == 'ok' ? 1 : 2}); |
'<p data-id="5"><a href="javascript:configChange(\'' + name + '\')">' + lan.soft.php_main4 + '</a><span class="spanmove"></span></p>', |
||||||
|
'<p data-id="6"><a href="javascript:disFun(\'' + name + '\')">' + lan.soft.php_main6 + '</a><span class="spanmove"></span></p>', |
||||||
if(b != "reload" && g.data == 'ok') { |
'<p class="phphide" data-id="7"><a href="javascript:SetFpmConfig(\'' + name + '\')">' + lan.soft.php_main7 + '</a><span class="spanmove"></span></p>', |
||||||
if (b == 'start') { |
'<p class="phphide" data-id="8"><a href="javascript:GetPHPStatus(\'' + name + '\')">' + lan.soft.php_main8 + '</a><span class="spanmove"></span></p>', |
||||||
setRedisService('redis', true); |
'<p class="phphide" data-id="9"><a href="javascript:GetFpmLogs(\'' + name + '\')">FPM日志</a><span class="spanmove"></span></p>', |
||||||
} else if (b=='stop'){ |
'<p class="phphide" data-id="10"><a href="javascript:GetFpmSlowLogs(\'' + name + '\')">慢日志</a><span class="spanmove"></span></p>', |
||||||
setRedisService('redis', false); |
'<p data-id="11"><a href="javascript:BtPhpinfo(\'' + name + '\')">phpinfo</a><span class="spanmove"></span></p>' |
||||||
} else { |
] |
||||||
} |
|
||||||
} |
var sdata = ''; |
||||||
if(g.data != 'ok') { |
if (rdata.phpSort == false) { |
||||||
layer.msg(g.data, {icon: 2,time: 0,shade: 0.3,shadeClose: true}); |
rdata.phpSort = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; |
||||||
} |
} else { |
||||||
},'json').error(function() { |
rdata.phpSort = rdata.phpSort.split('|'); |
||||||
layer.close(e); |
} |
||||||
layer.msg('操作成功!', {icon: 1}); |
for (var i = 0; i < rdata.phpSort.length; i++) { |
||||||
}); |
sdata += bodys[rdata.phpSort[i]]; |
||||||
}) |
} |
||||||
} |
|
||||||
|
layer.open({ |
||||||
//服务
|
type: 1, |
||||||
function setRedisService(name, status){ |
area: '640px', |
||||||
var serviceCon ='<p class="status">当前状态:<span>'+(status ? '开启' : '关闭' )+ |
title: nametext + lan.soft.admin, |
||||||
'</span><span style="color: '+ |
closeBtn: 2, |
||||||
(status?'#20a53a;':'red;')+ |
shift: 0, |
||||||
' margin-left: 3px;" class="glyphicon ' + (status?'glyphicon glyphicon-play':'glyphicon-pause')+'"></span></p><div class="sfm-opt">\ |
content: '<div class="bt-w-main" style="width:640px;">\ |
||||||
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\''+(status?'stop':'start')+'\')">'+(status?'停止':'启动')+'</button>\ |
<input name="softMenuSortOrder" type="hidden" />\ |
||||||
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\'restart\')">重启</button>\ |
<div class="bt-w-menu soft-man-menu">\ |
||||||
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\'reload\')">重载配置</button>\ |
' + sdata + '\ |
||||||
</div>'; |
</div>\ |
||||||
$(".soft-man-con").html(serviceCon); |
<div id="webEdit-con" class="bt-w-con pd15" style="height:555px;overflow:auto">\ |
||||||
} |
<div class="soft-man-con"></div>\ |
||||||
|
</div>\ |
||||||
|
</div>' |
||||||
//服务
|
}); |
||||||
function redisService(){ |
if (name == "52") { |
||||||
|
$(".phphide").hide(); |
||||||
$.post('/plugins/run', {name:'redis', func:'status'}, function(data) { |
} |
||||||
console.log(data); |
|
||||||
if(!data.status){ |
if (rdata.versions.length < 5) { |
||||||
layer.msg(data.msg,{icon:0,time:3000,shade: [0.3, '#000']}); |
$(".phphide").hide(); |
||||||
return; |
$(".pstate").hide(); |
||||||
} |
SetPHPConfig(name, nameA.pathinfo); |
||||||
if (data.data == 'start'){ |
$("p[data-id='4']").addClass('bgw'); |
||||||
setRedisService('redis', true); |
} else { |
||||||
} else { |
service(name, nameA.run); |
||||||
setRedisService('redis', false); |
} |
||||||
} |
|
||||||
},'json'); |
$(".bt-w-menu p a").click(function() { |
||||||
} |
var txt = $(this).text(); |
||||||
|
$(this).parent().addClass("bgw").siblings().removeClass("bgw"); |
||||||
redisService(); |
if (txt != lan.soft.php_menu_ext) $(".soft-man-con").removeAttr("style"); |
||||||
|
}); |
||||||
|
$(".soft-man-menu").dragsort({ dragSelector: ".spanmove", dragEnd: MenusaveOrder }); |
||||||
//配置修改 --- 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>\ |
//FPM日志
|
||||||
<button id="OnlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">保存</button>\ |
function GetFpmLogs(phpversion) { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.get('/ajax?action=GetFpmLogs&version=' + phpversion, function(logs) { |
||||||
|
layer.close(loadT); |
||||||
|
if (logs.status !== true) { |
||||||
|
logs.msg = ''; |
||||||
|
} |
||||||
|
if (logs.msg == '') logs.msg = '当前没有fpm日志.'; |
||||||
|
var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">' + logs.msg + '</textarea>'; |
||||||
|
$(".soft-man-con").html(phpCon); |
||||||
|
var ob = document.getElementById('error_log'); |
||||||
|
ob.scrollTop = ob.scrollHeight; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//FPM-Slow日志
|
||||||
|
function GetFpmSlowLogs(phpversion) { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.get('/ajax?action=GetFpmSlowLogs&version=' + phpversion, function(logs) { |
||||||
|
layer.close(loadT); |
||||||
|
if (logs.status !== true) { |
||||||
|
logs.msg = ''; |
||||||
|
} |
||||||
|
if (logs.msg == '') logs.msg = '当前没有慢日志.'; |
||||||
|
var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">' + logs.msg + '</textarea>'; |
||||||
|
$(".soft-man-con").html(phpCon); |
||||||
|
var ob = document.getElementById('error_log'); |
||||||
|
ob.scrollTop = ob.scrollHeight; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//配置修改
|
||||||
|
function SetPHPConf(version) { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=GetPHPConf', 'version=' + version, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
var mlist = ''; |
||||||
|
for (var i = 0; i < rdata.length; i++) { |
||||||
|
var w = '70' |
||||||
|
if (rdata[i].name == 'error_reporting') w = '250'; |
||||||
|
var ibody = '<input style="width: ' + w + 'px;" class="bt-input-text mr5" name="' + rdata[i].name + '" value="' + rdata[i].value + '" type="text" >'; |
||||||
|
switch (rdata[i].type) { |
||||||
|
case 0: |
||||||
|
var selected_1 = (rdata[i].value == 1) ? 'selected' : ''; |
||||||
|
var selected_0 = (rdata[i].value == 0) ? 'selected' : ''; |
||||||
|
ibody = '<select class="bt-input-text mr5" name="' + rdata[i].name + '" style="width: ' + w + 'px;"><option value="1" ' + selected_1 + '>开启</option><option value="0" ' + selected_0 + '>关闭</option></select>' |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
var selected_1 = (rdata[i].value == 'On') ? 'selected' : ''; |
||||||
|
var selected_0 = (rdata[i].value == 'Off') ? 'selected' : ''; |
||||||
|
ibody = '<select class="bt-input-text mr5" name="' + rdata[i].name + '" style="width: ' + w + 'px;"><option value="On" ' + selected_1 + '>开启</option><option value="Off" ' + selected_0 + '>关闭</option></select>' |
||||||
|
break; |
||||||
|
} |
||||||
|
mlist += '<p><span>' + rdata[i].name + '</span>' + ibody + ', <font>' + rdata[i].ps + '</font></p>' |
||||||
|
} |
||||||
|
var phpCon = '<style>.conf_p p{margin-bottom: 2px}</style><div class="conf_p" style="margin-bottom:0">\ |
||||||
|
' + mlist + '\ |
||||||
|
<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" onclick="SetPHPConf(' + version + ')">' + lan.public.fresh + '</button><button class="btn btn-success btn-sm" onclick="SubmitPHPConf(' + version + ')">' + lan.public.save + '</button></div>\ |
||||||
|
</div>' |
||||||
|
$(".soft-man-con").html(phpCon); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//提交PHP配置
|
||||||
|
function SubmitPHPConf(version) { |
||||||
|
var data = { |
||||||
|
version: version, |
||||||
|
display_errors: $("select[name='display_errors']").val(), |
||||||
|
'cgi.fix_pathinfo': $("select[name='cgi.fix_pathinfo']").val(), |
||||||
|
'date.timezone': $("input[name='date.timezone']").val(), |
||||||
|
short_open_tag: $("select[name='short_open_tag']").val(), |
||||||
|
asp_tags: $("select[name='asp_tags']").val() || 'On', |
||||||
|
safe_mode: $("select[name='safe_mode']").val(), |
||||||
|
max_execution_time: $("input[name='max_execution_time']").val(), |
||||||
|
max_input_time: $("input[name='max_input_time']").val(), |
||||||
|
memory_limit: $("input[name='memory_limit']").val(), |
||||||
|
post_max_size: $("input[name='post_max_size']").val(), |
||||||
|
file_uploads: $("select[name='file_uploads']").val(), |
||||||
|
upload_max_filesize: $("input[name='upload_max_filesize']").val(), |
||||||
|
max_file_uploads: $("input[name='max_file_uploads']").val(), |
||||||
|
default_socket_timeout: $("input[name='default_socket_timeout']").val(), |
||||||
|
error_reporting: $("input[name='error_reporting']").val() || 'On' |
||||||
|
} |
||||||
|
|
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=SetPHPConf', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//php超时限制
|
||||||
|
function phpTimeLimit(version, max) { |
||||||
|
var LimitCon = '<p class="conf_p"><input class="phpTimeLimit bt-input-text mr5" type="number" value="' + max + '">' + lan.bt.s + '<button class="btn btn-success btn-sm" onclick="SetPHPMaxTime(\'' + version + '\')" style="margin-left:20px">' + lan.public.save + '</button></p>'; |
||||||
|
$(".soft-man-con").html(LimitCon); |
||||||
|
} |
||||||
|
//设置超时限制
|
||||||
|
function SetPHPMaxTime(version) { |
||||||
|
var max = $(".phpTimeLimit").val(); |
||||||
|
var loadT = layer.msg(lan.soft.the_save, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=setPHPMaxTime', 'version=' + version + '&time=' + max, function(rdata) { |
||||||
|
$(".bt-w-menu .active").attr('onclick', "phpTimeLimit('" + version + "'," + max + ")"); |
||||||
|
$(".bt-w-menu .active a").attr('href', "javascript:phpTimeLimit('" + version + "'," + max + ");"); |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
} |
||||||
|
//设置PHP上传限制
|
||||||
|
function SetPHPMaxSize(version) { |
||||||
|
max = $(".phpUploadLimit").val(); |
||||||
|
if (max < 2) { |
||||||
|
alert(max); |
||||||
|
layer.msg(lan.soft.php_upload_size, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
var loadT = layer.msg(lan.soft.the_save, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=setPHPMaxSize', '&version=' + version + '&max=' + max, function(rdata) { |
||||||
|
$(".bt-w-menu .active").attr('onclick', "phpUploadLimit('" + version + "'," + max + ")"); |
||||||
|
$(".bt-w-menu .active a").attr('href', "javascript:phpUploadLimit('" + version + "'," + max + ");"); |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}) |
||||||
|
} |
||||||
|
//配置修改
|
||||||
|
function configChange(type) { |
||||||
|
var con = '<p style="color: #666; margin-bottom: 7px">' + lan.bt.edit_ps + '</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;">' + lan.public.save + '</button>\ |
||||||
<ul class="help-info-text c7 ptb15">\ |
<ul class="help-info-text c7 ptb15">\ |
||||||
<li>此处为redis主配置文件,若您不了解配置规则,请勿随意修改。</li>\ |
<li>' + lan.get('config_edit_ps', [type]) + '</li>\ |
||||||
</ul>'; |
</ul>'; |
||||||
$(".soft-man-con").html(con); |
$(".soft-man-con").html(con); |
||||||
|
var fileName = ''; |
||||||
var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']}); |
switch (type) { |
||||||
$.post('/plugins/run', {name:'redis', func:'conf'},function (data) { |
case 'mysqld': |
||||||
layer.close(loadT); |
fileName = '/etc/my.cnf'; |
||||||
|
break; |
||||||
var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']}); |
case 'nginx': |
||||||
var fileName = data.data; |
fileName = '/www/server/nginx/conf/nginx.conf'; |
||||||
$.post('/files/get_body', 'path=' + fileName, function(rdata) { |
break; |
||||||
layer.close(loadT2); |
case 'pure-ftpd': |
||||||
if (!rdata.status){ |
fileName = '/www/server/pure-ftpd/etc/pure-ftpd.conf'; |
||||||
layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); |
break; |
||||||
return; |
case 'apache': |
||||||
} |
fileName = '/www/server/apache/conf/httpd.conf'; |
||||||
$("#textBody").empty().text(rdata.data.data); |
break; |
||||||
$(".CodeMirror").remove(); |
case 'tomcat': |
||||||
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { |
fileName = '/www/server/tomcat/conf/server.xml'; |
||||||
extraKeys: { |
break; |
||||||
"Ctrl-Space": "autocomplete", |
case 'memcached': |
||||||
"Ctrl-F": "findPersistent", |
fileName = '/etc/init.d/memcached'; |
||||||
"Ctrl-H": "replaceAll", |
break; |
||||||
"Ctrl-S": function() { |
case 'redis': |
||||||
redisConfSafe(fileName); |
fileName = '/www/server/redis/redis.conf'; |
||||||
} |
break; |
||||||
}, |
default: |
||||||
lineNumbers: true, |
fileName = '/www/server/php/' + type + '/etc/php.ini'; |
||||||
matchBrackets:true, |
break; |
||||||
}); |
} |
||||||
editor.focus(); |
var loadT = layer.msg(lan.soft.get, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); |
$.post('/files?action=GetFileBody', 'path=' + fileName, function(rdata) { |
||||||
$("#OnlineEditFileBtn").click(function(){ |
layer.close(loadT); |
||||||
$("#textBody").text(editor.getValue()); |
$("#textBody").empty().text(rdata.data); |
||||||
redisConfSafe(fileName); |
$(".CodeMirror").remove(); |
||||||
}); |
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { |
||||||
},'json'); |
extraKeys: { "Ctrl-Space": "autocomplete" }, |
||||||
},'json'); |
lineNumbers: true, |
||||||
} |
matchBrackets: true, |
||||||
|
}); |
||||||
//配置保存
|
editor.focus(); |
||||||
function redisConfSafe(fileName) { |
$(".CodeMirror-scroll").css({ "height": "300px", "margin": 0, "padding": 0 }); |
||||||
var data = encodeURIComponent($("#textBody").val()); |
$("#OnlineEditFileBtn").click(function() { |
||||||
var encoding = 'utf-8'; |
$("#textBody").text(editor.getValue()); |
||||||
var loadT = layer.msg('保存中...', { |
confSafe(fileName); |
||||||
icon: 16, |
}); |
||||||
time: 0 |
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//设置PATHINFO
|
||||||
|
function SetPathInfo(version, type) { |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=setPathInfo', 'version=' + version + '&type=' + type, function(rdata) { |
||||||
|
var pathinfo = (type == 'on') ? true : false; |
||||||
|
var pathinfoOpt = '<a style="color:red;" href="javascript:SetPathInfo(\'' + version + '\',\'off\');">' + lan.public.off + '</a>' |
||||||
|
if (!pathinfo) { |
||||||
|
pathinfoOpt = '<a class="link" href="javascript:SetPathInfo(\'' + version + '\',\'on\');">' + lan.public.on + '</a>' |
||||||
|
} |
||||||
|
var pathinfo1 = '<td>PATH_INFO</td><td>' + lan.soft.php_menu_ext + '</td><td>' + lan.soft.mvc_ps + '</td><td><span class="ico-' + (pathinfo ? 'start' : 'stop') + ' glyphicon glyphicon-' + (pathinfo ? 'ok' : 'remove') + '"></span></td><td style="text-align: right;" width="50">' + pathinfoOpt + '</td>'; |
||||||
|
$("#pathInfo").html(pathinfo1); |
||||||
|
$(".bt-w-menu .bgw").attr('onclick', "SetPHPConfig('" + version + "'," + pathinfo + ",1)"); |
||||||
|
$(".bt-w-menu .bgw a").attr('href', "javascript:SetPHPConfig('" + version + "'," + pathinfo + ",1);"); |
||||||
|
layer.msg(rdata.msg, { icon: 1 }); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//PHP扩展配置
|
||||||
|
function SetPHPConfig(version, pathinfo, go) { |
||||||
|
$.get('/ajax?action=GetPHPConfig&version=' + version, function(rdata) { |
||||||
|
var body = "" |
||||||
|
var opt = "" |
||||||
|
for (var i = 0; i < rdata.libs.length; i++) { |
||||||
|
if (rdata.libs[i].versions.indexOf(version) == -1) continue; |
||||||
|
if (rdata.libs[i]['task'] == '-1' && rdata.libs[i].phpversions.indexOf(version) != -1) { |
||||||
|
opt = '<a style="color:green;" href="javascript:messagebox();">' + lan.soft.the_install + '</a>' |
||||||
|
} else if (rdata.libs[i]['task'] == '0' && rdata.libs[i].phpversions.indexOf(version) != -1) { |
||||||
|
opt = '<a style="color:#C0C0C0;" href="javascript:messagebox();">' + lan.soft.sleep_install + '</a>' |
||||||
|
} else if (rdata.libs[i].status) { |
||||||
|
opt = '<a style="color:red;" href="javascript:UninstallPHPLib(\'' + version + '\',\'' + rdata.libs[i].name + '\',\'' + rdata.libs[i].title + '\',' + pathinfo + ');">' + lan.soft.uninstall + '</a>' |
||||||
|
} else { |
||||||
|
opt = '<a class="btlink" href="javascript:InstallPHPLib(\'' + version + '\',\'' + rdata.libs[i].name + '\',\'' + rdata.libs[i].title + '\',' + pathinfo + ');">' + lan.soft.install + '</a>' |
||||||
|
} |
||||||
|
|
||||||
|
body += '<tr>' + |
||||||
|
'<td>' + rdata.libs[i].name + '</td>' + |
||||||
|
'<td>' + rdata.libs[i].type + '</td>' + |
||||||
|
'<td>' + rdata.libs[i].msg + '</td>' + |
||||||
|
'<td><span class="ico-' + (rdata.libs[i].status ? 'start' : 'stop') + ' glyphicon glyphicon-' + (rdata.libs[i].status ? 'ok' : 'remove') + '"></span></td>' + |
||||||
|
'<td style="text-align: right;">' + opt + '</td>' + |
||||||
|
'</tr>' |
||||||
|
} |
||||||
|
|
||||||
|
var pathinfoOpt = '<a style="color:red;" href="javascript:SetPathInfo(\'' + version + '\',\'off\');">' + lan.soft.off + '</a>' |
||||||
|
if (!rdata.pathinfo) { |
||||||
|
pathinfoOpt = '<a class="btlink" href="javascript:SetPathInfo(\'' + version + '\',\'on\');">' + lan.soft.on + '</a>' |
||||||
|
} |
||||||
|
var pathinfo1 = '<tr id="pathInfo"><td>PATH_INFO</td><td>' + lan.soft.php_menu_ext + '</td><td>' + lan.soft.mvc_ps + '</td><td><span class="ico-' + (rdata.pathinfo ? 'start' : 'stop') + ' glyphicon glyphicon-' + (rdata.pathinfo ? 'ok' : 'remove') + '"></span></td><td style="text-align: right;" width="50">' + pathinfoOpt + '</td></tr>'; |
||||||
|
var con = '<div class="divtable" id="phpextdiv" style="margin-right:10px;height: 420px; overflow: auto; margin-right: 0px;">' + |
||||||
|
'<table class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0">' + |
||||||
|
'<thead>' + |
||||||
|
'<tr>' + |
||||||
|
'<th>' + lan.soft.php_ext_name + '</th>' + |
||||||
|
'<th width="64">' + lan.soft.php_ext_type + '</th>' + |
||||||
|
'<th>' + lan.soft.php_ext_ps + '</th>' + |
||||||
|
'<th width="40">' + lan.soft.php_ext_status + '</th>' + |
||||||
|
'<th style="text-align: right;" width="50">' + lan.public.action + '</th>' + |
||||||
|
'</tr>' + |
||||||
|
'</thead>' + |
||||||
|
'<tbody>' + pathinfo1 + body + '</tbody>' + |
||||||
|
'</table>' + |
||||||
|
'</div>' + |
||||||
|
'<ul class="help-info-text c7 pull-left"><li>请按实际需求安装扩展,不要安装不必要的PHP扩展,这会影响PHP执行效率,甚至出现异常</li><li>Redis扩展只允许在1个PHP版本中使用,安装到其它PHP版本请在[软件管理]重装Redis</li><li>opcache/xcache/apc等脚本缓存扩展,请只安装其中1个,否则可能导致您的站点程序异常</li></ul>'; |
||||||
|
var divObj = document.getElementById('phpextdiv'); |
||||||
|
var scrollTopNum = 0; |
||||||
|
if (divObj) scrollTopNum = divObj.scrollTop; |
||||||
|
$(".soft-man-con").html(con); |
||||||
|
document.getElementById('phpextdiv').scrollTop = scrollTopNum; |
||||||
|
}); |
||||||
|
|
||||||
|
if (go == undefined) { |
||||||
|
setTimeout(function() { |
||||||
|
if ($(".bgw #phpext").html() != '安装扩展') { |
||||||
|
return; |
||||||
|
} |
||||||
|
SetPHPConfig(version, pathinfo); |
||||||
|
}, 3000); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//安装扩展
|
||||||
|
function InstallPHPLib(version, name, title, pathinfo) { |
||||||
|
layer.confirm(lan.soft.php_ext_install_confirm.replace('{1}', name), { icon: 3, closeBtn: 2 }, function() { |
||||||
|
name = name.toLowerCase(); |
||||||
|
var data = "name=" + name + "&version=" + version + "&type=1"; |
||||||
|
var loadT = layer.msg(lan.soft.add_install, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/files?action=InstallSoft', data, function(rdata) { |
||||||
|
setTimeout(function() { |
||||||
|
layer.close(loadT); |
||||||
|
SetPHPConfig(version, pathinfo, true); |
||||||
|
setTimeout(function() { |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}, 1000); |
||||||
|
}, 1000); |
||||||
|
}); |
||||||
|
|
||||||
|
fly("bi-btn"); |
||||||
|
InstallTips(); |
||||||
|
GetTaskCount(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//卸载扩展
|
||||||
|
function UninstallPHPLib(version, name, title, pathinfo) { |
||||||
|
layer.confirm(lan.soft.php_ext_uninstall_confirm.replace('{1}', name), { icon: 3, closeBtn: 2 }, function() { |
||||||
|
name = name.toLowerCase(); |
||||||
|
var data = 'name=' + name + '&version=' + version; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/files?action=UninstallSoft', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
SetPHPConfig(version, pathinfo, true); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
||||||
|
//禁用函数
|
||||||
|
function disFun(version) { |
||||||
|
$.get('/ajax?action=GetPHPConfig&version=' + version, function(rdata) { |
||||||
|
var disable_functions = rdata.disable_functions.split(','); |
||||||
|
var dbody = '' |
||||||
|
for (var i = 0; i < disable_functions.length; i++) { |
||||||
|
if (disable_functions[i] == '') continue; |
||||||
|
dbody += "<tr><td>" + disable_functions[i] + "</td><td><a style='float:right;' href=\"javascript:disable_functions('" + version + "','" + disable_functions[i] + "','" + rdata.disable_functions + "');\">" + lan.public.del + "</a></td></tr>"; |
||||||
|
} |
||||||
|
|
||||||
|
var con = "<div class='dirBinding'>" + |
||||||
|
"<input class='bt-input-text mr5' type='text' placeholder='" + lan.soft.fun_ps1 + "' id='disable_function_val' style='height: 28px; border-radius: 3px;width: 410px;' />" + |
||||||
|
"<button class='btn btn-success btn-sm' onclick=\"disable_functions('" + version + "',1,'" + rdata.disable_functions + "')\">" + lan.public.add + "</button>" + |
||||||
|
"</div>" + |
||||||
|
"<div class='divtable mtb15' style='height:350px;overflow:auto'><table class='table table-hover' width='100%' style='margin-bottom:0'>" + |
||||||
|
"<thead><tr><th>" + lan.soft.php_ext_name + "</th><th width='100' class='text-right'>" + lan.public.action + "</th></tr></thead>" + |
||||||
|
"<tbody id='blacktable'>" + dbody + "</tbody>" + |
||||||
|
"</table></div>"; |
||||||
|
|
||||||
|
con += '\ |
||||||
|
<ul class="help-info-text">\ |
||||||
|
<li>' + lan.soft.fun_ps2 + '</li>\ |
||||||
|
<li>' + lan.soft.fun_ps3 + '</li>\ |
||||||
|
</ul>'; |
||||||
|
|
||||||
|
$(".soft-man-con").html(con); |
||||||
|
}); |
||||||
|
} |
||||||
|
//设置禁用函数
|
||||||
|
function disable_functions(version, act, fs) { |
||||||
|
var fsArr = fs.split(','); |
||||||
|
if (act == 1) { |
||||||
|
var functions = $("#disable_function_val").val(); |
||||||
|
for (var i = 0; i < fsArr.length; i++) { |
||||||
|
if (functions == fsArr[i]) { |
||||||
|
layer.msg(lan.soft.fun_msg, { icon: 5 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
fs += ',' + functions; |
||||||
|
msg = lan.public.add_success; |
||||||
|
} else { |
||||||
|
|
||||||
|
fs = ''; |
||||||
|
for (var i = 0; i < fsArr.length; i++) { |
||||||
|
if (act == fsArr[i]) continue; |
||||||
|
fs += fsArr[i] + ',' |
||||||
|
} |
||||||
|
msg = lan.public.del_success; |
||||||
|
fs = fs.substr(0, fs.length - 1); |
||||||
|
} |
||||||
|
|
||||||
|
var data = 'version=' + version + '&disable_functions=' + fs; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=setPHPDisable', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.status ? msg : rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
disFun(version); |
||||||
|
}); |
||||||
|
} |
||||||
|
//性能调整
|
||||||
|
function SetFpmConfig(version, action) { |
||||||
|
if (action == 1) { |
||||||
|
$.post('/system?action=GetMemInfo', '', function(memInfo) { |
||||||
|
var limit_children = parseInt(memInfo['memTotal'] / 8); |
||||||
|
var max_children = Number($("input[name='max_children']").val()); |
||||||
|
var start_servers = Number($("input[name='start_servers']").val()); |
||||||
|
var min_spare_servers = Number($("input[name='min_spare_servers']").val()); |
||||||
|
var max_spare_servers = Number($("input[name='max_spare_servers']").val()); |
||||||
|
var pm = $("select[name='pm']").val(); |
||||||
|
|
||||||
|
if (limit_children < max_children) { |
||||||
|
layer.msg('当前服务器内存不足,最大允许[' + limit_children + ']个子进程!', { icon: 2 }); |
||||||
|
$("input[name='max_children']").focus(); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (max_children < max_spare_servers) { |
||||||
|
layer.msg(lan.soft.php_fpm_err1, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (min_spare_servers > start_servers) { |
||||||
|
layer.msg(lan.soft.php_fpm_err2, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (max_spare_servers < min_spare_servers) { |
||||||
|
layer.msg(lan.soft.php_fpm_err3, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (max_children < start_servers) { |
||||||
|
layer.msg(lan.soft.php_fpm_err4, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (max_children < 1 || start_servers < 1 || min_spare_servers < 1 || max_spare_servers < 1) { |
||||||
|
layer.msg(lan.soft.php_fpm_err5, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
var data = 'version=' + version + '&max_children=' + max_children + '&start_servers=' + start_servers + '&min_spare_servers=' + min_spare_servers + '&max_spare_servers=' + max_spare_servers + '&pm=' + pm; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/config?action=setFpmConfig', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
var loadT = layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}).error(function() { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(lan.public.config_ok, { icon: 1 }); |
||||||
|
}); |
||||||
|
}); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
$.post('/config?action=getFpmConfig', 'version=' + version, function(rdata) { |
||||||
|
|
||||||
|
var limitList = "<option value='0'>" + lan.soft.concurrency_m + "</option>" + |
||||||
|
"<option value='1' " + (rdata.max_children == 30 ? 'selected' : '') + ">30" + lan.soft.concurrency + "</option>" + |
||||||
|
"<option value='2' " + (rdata.max_children == 50 ? 'selected' : '') + ">50" + lan.soft.concurrency + "</option>" + |
||||||
|
"<option value='3' " + (rdata.max_children == 100 ? 'selected' : '') + ">100" + lan.soft.concurrency + "</option>" + |
||||||
|
"<option value='4' " + (rdata.max_children == 200 ? 'selected' : '') + ">200" + lan.soft.concurrency + "</option>" + |
||||||
|
"<option value='5' " + (rdata.max_children == 300 ? 'selected' : '') + ">300" + lan.soft.concurrency + "</option>" + |
||||||
|
"<option value='6' " + (rdata.max_children == 500 ? 'selected' : '') + ">500" + lan.soft.concurrency + "</option>" |
||||||
|
var pms = [{ 'name': 'static', 'title': lan.bt.static }, { 'name': 'dynamic', 'title': lan.bt.dynamic }]; |
||||||
|
var pmList = ''; |
||||||
|
for (var i = 0; i < pms.length; i++) { |
||||||
|
pmList += '<option value="' + pms[i].name + '" ' + ((pms[i].name == rdata.pm) ? 'selected' : '') + '>' + pms[i].title + '</option>'; |
||||||
|
} |
||||||
|
var body = "<div class='bingfa'>" + |
||||||
|
"<p class='line'><span class='span_tit'>" + lan.soft.concurrency_type + ":</span><select class='bt-input-text' name='limit' style='width:100px;'>" + limitList + "</select></p>" + |
||||||
|
"<p class='line'><span class='span_tit'>" + lan.soft.php_fpm_model + ":</span><select class='bt-input-text' name='pm' style='width:100px;'>" + pmList + "</select><span class='c9'>*" + lan.soft.php_fpm_ps1 + "</span></p>" + |
||||||
|
"<p class='line'><span class='span_tit'>max_children:</span><input class='bt-input-text' type='number' name='max_children' value='" + rdata.max_children + "' /><span class='c9'>*" + lan.soft.php_fpm_ps2 + "</span></p>" + |
||||||
|
"<p class='line'><span class='span_tit'>start_servers:</span><input class='bt-input-text' type='number' name='start_servers' value='" + rdata.start_servers + "' /> <span class='c9'>*" + lan.soft.php_fpm_ps3 + "</span></p>" + |
||||||
|
"<p class='line'><span class='span_tit'>min_spare_servers:</span><input class='bt-input-text' type='number' name='min_spare_servers' value='" + rdata.min_spare_servers + "' /> <span class='c9'>*" + lan.soft.php_fpm_ps4 + "</span></p>" + |
||||||
|
"<p class='line'><span class='span_tit'>max_spare_servers:</span><input class='bt-input-text' type='number' name='max_spare_servers' value='" + rdata.max_spare_servers + "' /> <span class='c9'>*" + lan.soft.php_fpm_ps5 + "</span></p>" + |
||||||
|
"<div class='mtb15'><button class='btn btn-success btn-sm' onclick='SetFpmConfig(\"" + version + "\",1)'>" + lan.public.save + "</button></div>" + |
||||||
|
"</div>" |
||||||
|
|
||||||
|
$(".soft-man-con").html(body); |
||||||
|
$("select[name='limit']").change(function() { |
||||||
|
var type = $(this).val(); |
||||||
|
var max_children = rdata.max_children; |
||||||
|
var start_servers = rdata.start_servers; |
||||||
|
var min_spare_servers = rdata.min_spare_servers; |
||||||
|
var max_spare_servers = rdata.max_spare_servers; |
||||||
|
switch (type) { |
||||||
|
case '1': |
||||||
|
max_children = 30; |
||||||
|
start_servers = 5; |
||||||
|
min_spare_servers = 5; |
||||||
|
max_spare_servers = 20; |
||||||
|
break; |
||||||
|
case '2': |
||||||
|
max_children = 50; |
||||||
|
start_servers = 15; |
||||||
|
min_spare_servers = 15; |
||||||
|
max_spare_servers = 35; |
||||||
|
break; |
||||||
|
case '3': |
||||||
|
max_children = 100; |
||||||
|
start_servers = 20; |
||||||
|
min_spare_servers = 20; |
||||||
|
max_spare_servers = 70; |
||||||
|
break; |
||||||
|
case '4': |
||||||
|
max_children = 200; |
||||||
|
start_servers = 25; |
||||||
|
min_spare_servers = 25; |
||||||
|
max_spare_servers = 150; |
||||||
|
break; |
||||||
|
case '5': |
||||||
|
max_children = 300; |
||||||
|
start_servers = 30; |
||||||
|
min_spare_servers = 30; |
||||||
|
max_spare_servers = 180; |
||||||
|
break; |
||||||
|
case '6': |
||||||
|
max_children = 500; |
||||||
|
start_servers = 35; |
||||||
|
min_spare_servers = 35; |
||||||
|
max_spare_servers = 250; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
$("input[name='max_children']").val(max_children); |
||||||
|
$("input[name='start_servers']").val(start_servers); |
||||||
|
$("input[name='min_spare_servers']").val(min_spare_servers); |
||||||
|
$("input[name='max_spare_servers']").val(max_spare_servers); |
||||||
|
}); |
||||||
}); |
}); |
||||||
$.post('/files/save_body', 'data=' + data + '&path=' + fileName + '&encoding=' + encoding, function(rdata) { |
} |
||||||
|
|
||||||
|
//phpinfo
|
||||||
|
function BtPhpinfo(version) { |
||||||
|
var con = '<button class="btn btn-default btn-sm" onclick="GetPHPInfo(\'' + version + '\')">' + lan.soft.phpinfo + '</button>'; |
||||||
|
$(".soft-man-con").html(con); |
||||||
|
} |
||||||
|
//获取PHPInfo
|
||||||
|
function GetPHPInfo(version) { |
||||||
|
var loadT = layer.msg(lan.soft.get, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.get('/ajax?action=GetPHPInfo&version=' + version, function(rdata) { |
||||||
layer.close(loadT); |
layer.close(loadT); |
||||||
layer.msg(rdata.msg, { |
layer.open({ |
||||||
icon: rdata.status ? 1 : 2 |
type: 1, |
||||||
|
title: "PHP-" + version + "-PHPINFO", |
||||||
|
area: ['70%', '90%'], |
||||||
|
closeBtn: 2, |
||||||
|
shadeClose: true, |
||||||
|
content: rdata.replace('a:link {color: #009; text-decoration: none; background-color: #fff;}', '').replace('a:link {color: #000099; text-decoration: none; background-color: #ffffff;}', '') |
||||||
}); |
}); |
||||||
},'json'); |
}); |
||||||
} |
} |
||||||
//配置修改 --- end
|
|
||||||
|
|
||||||
//redis负载状态 start
|
//查看PHP负载状态
|
||||||
function redisStatus() { |
function GetPHPStatus(version) { |
||||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); |
$.post('/ajax?action=GetPHPStatus', 'version=' + version, function(rdata) { |
||||||
$.post('/plugins/run', {name:'redis', func:'run_info'}, function(data) { |
var con = "<div style='height:420px;overflow:hidden;'><table class='table table-hover table-bordered GetPHPStatus' style='margin:0;padding:0'>\ |
||||||
layer.close(loadT); |
<tr><th>" + lan.bt.php_pool + "</th><td>" + rdata.pool + "</td></tr>\ |
||||||
if (!data.status){ |
<tr><th>" + lan.bt.php_manager + "</th><td>" + ((rdata['process manager'] == 'dynamic') ? lan.bt.dynamic : lan.bt.static) + "</td></tr>\ |
||||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); |
<tr><th>" + lan.bt.php_start + "</th><td>" + rdata['start time'] + "</td></tr>\ |
||||||
return; |
<tr><th>" + lan.bt.php_accepted + "</th><td>" + rdata['accepted conn'] + "</td></tr>\ |
||||||
} |
<tr><th>" + lan.bt.php_queue + "</th><td>" + rdata['listen queue'] + "</td></tr>\ |
||||||
|
<tr><th>" + lan.bt.php_max_queue + "</th><td>" + rdata['max listen queue'] + "</td></tr>\ |
||||||
var rdata = $.parseJSON(data.data); |
<tr><th>" + lan.bt.php_len_queue + "</th><td>" + rdata['listen queue len'] + "</td></tr>\ |
||||||
hit = (parseInt(rdata.keyspace_hits) / (parseInt(rdata.keyspace_hits) + parseInt(rdata.keyspace_misses)) * 100).toFixed(2); |
<tr><th>" + lan.bt.php_idle + "</th><td>" + rdata['idle processes'] + "</td></tr>\ |
||||||
var Con = '<div class="divtable">\ |
<tr><th>" + lan.bt.php_active + "</th><td>" + rdata['active processes'] + "</td></tr>\ |
||||||
<table class="table table-hover table-bordered" style="width: 490px;">\ |
<tr><th>" + lan.bt.php_total + "</th><td>" + rdata['total processes'] + "</td></tr>\ |
||||||
<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\ |
<tr><th>" + lan.bt.php_max_active + "</th><td>" + rdata['max active processes'] + "</td></tr>\ |
||||||
<tbody>\ |
<tr><th>" + lan.bt.php_max_children + "</th><td>" + rdata['max children reached'] + "</td></tr>\ |
||||||
<tr><th>uptime_in_days</th><td>' + rdata.uptime_in_days + '</td><td>已运行天数</td></tr>\ |
<tr><th>" + lan.bt.php_slow + "</th><td>" + rdata['slow requests'] + "</td></tr>\ |
||||||
<tr><th>tcp_port</th><td>' + rdata.tcp_port + '</td><td>当前监听端口</td></tr>\ |
</table></div>"; |
||||||
<tr><th>connected_clients</th><td>' + rdata.connected_clients + '</td><td>连接的客户端数量</td></tr>\ |
$(".soft-man-con").html(con); |
||||||
<tr><th>used_memory_rss</th><td>' + ToSize(rdata.used_memory_rss) + '</td><td>Redis当前占用的系统内存总量</td></tr>\ |
$(".GetPHPStatus td,.GetPHPStatus th").css("padding", "7px"); |
||||||
<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>\ |
//php上传限制
|
||||||
<tr><th>instantaneous_ops_per_sec</th><td>' + rdata.instantaneous_ops_per_sec + '</td><td>服务器每秒钟执行的命令数量</td></tr>\ |
function phpUploadLimit(version, max) { |
||||||
<tr><th>keyspace_hits</th><td>' + rdata.keyspace_hits + '</td><td>查找数据库键成功的次数</td></tr>\ |
var LimitCon = '<p class="conf_p"><input class="phpUploadLimit bt-input-text mr5" type="number" value="' + max + '" name="max">MB<button class="btn btn-success btn-sm" onclick="SetPHPMaxSize(\'' + version + '\')" style="margin-left:20px">' + lan.public.save + '</button></p>'; |
||||||
<tr><th>keyspace_misses</th><td>' + rdata.keyspace_misses + '</td><td>查找数据库键失败的次数</td></tr>\ |
$(".soft-man-con").html(LimitCon); |
||||||
<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
|
|
||||||
|
@ -0,0 +1,118 @@ |
|||||||
|
//phpmyadmin安全设置
|
||||||
|
function safeConf(name, port, auth) { |
||||||
|
var con = '<div class="ver line">\ |
||||||
|
<span style="margin-right:10px">' + lan.soft.pma_port + '</span>\ |
||||||
|
<input class="bt-input-text phpmyadmindk mr20" name="Name" id="pmport" value="' + port + '" placeholder="' + lan.soft.pma_port_title + '" maxlength="5" type="number">\ |
||||||
|
<button class="btn btn-success btn-sm" onclick="phpmyadminport()">' + lan.public.save + '</button>\ |
||||||
|
</div>\ |
||||||
|
<div class="user_pw_tit">\ |
||||||
|
<span class="tit">' + lan.soft.pma_pass + '</span>\ |
||||||
|
<span class="btswitch-p"><input class="btswitch btswitch-ios" id="phpmyadminsafe" type="checkbox" ' + (auth ? 'checked' : '') + '>\ |
||||||
|
<label class="btswitch-btn phpmyadmin-btn" for="phpmyadminsafe" onclick="phpmyadminSafe()"></label>\ |
||||||
|
</span>\ |
||||||
|
</div>\ |
||||||
|
<div class="user_pw">\ |
||||||
|
<p><span>' + lan.soft.pma_user + '</span><input id="username_get" class="bt-input-text" name="username_get" value="" type="text" placeholder="' + lan.soft.edit_empty + '"></p>\ |
||||||
|
<p><span>' + lan.soft.pma_pass1 + '</span><input id="password_get_1" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="' + lan.soft.edit_empty + '"></p>\ |
||||||
|
<p><span>' + lan.soft.pma_pass2 + '</span><input id="password_get_2" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="' + lan.soft.edit_empty + '"></p>\ |
||||||
|
<p><button class="btn btn-success btn-sm" onclick="phpmyadmin(\'get\')">' + lan.public.save + '</button></p>\ |
||||||
|
</div>\ |
||||||
|
<ul class="help-info-text c7"><li>' + lan.soft.pma_ps + '</li></ul>'; |
||||||
|
$(".soft-man-con").html(con); |
||||||
|
if (auth) { |
||||||
|
$(".user_pw").show(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
function phpVerChange(type, msg) { |
||||||
|
var data = type + '=' + $("#" + msg).val(); |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/ajax?action=setPHPMyAdmin', data, function(rdata) { |
||||||
|
layer.closeAll(); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
if (rdata.status) { |
||||||
|
setTimeout(function() { |
||||||
|
window.location.reload(); |
||||||
|
}, 3000); |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//phpmyadmin切换php版本
|
||||||
|
function phpVer(name, version) { |
||||||
|
$.post('/site?action=GetPHPVersion', function(rdata) { |
||||||
|
var body = "<div class='ver line'><span class='tname'>" + lan.soft.php_version + "</span><select id='get' class='bt-input-text mr20' name='phpVersion' style='width:110px'>"; |
||||||
|
var optionSelect = ''; |
||||||
|
for (var i = 0; i < rdata.length; i++) { |
||||||
|
optionSelect = rdata[i].version == version ? 'selected' : ''; |
||||||
|
body += "<option value='" + rdata[i].version + "' " + optionSelect + ">" + rdata[i].name + "</option>" |
||||||
|
} |
||||||
|
body += '</select><button class="btn btn-success btn-sm" onclick="phpVerChange(\'phpversion\',\'get\')">' + lan.public.save + '</button></div>'; |
||||||
|
$(".soft-man-con").html(body); |
||||||
|
}) |
||||||
|
} |
||||||
|
//修改phpmyadmin端口
|
||||||
|
function phpmyadminport() { |
||||||
|
var pmport = $("#pmport").val(); |
||||||
|
if (pmport < 80 || pmport > 65535) { |
||||||
|
layer.msg(lan.firewall.port_err, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
var data = 'port=' + pmport; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/ajax?action=setPHPMyAdmin', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
//phpmyadmin二级密码
|
||||||
|
function phpmyadminSafe() { |
||||||
|
var stat = $("#phpmyadminsafe").prop("checked"); |
||||||
|
if (stat) { |
||||||
|
$(".user_pw").hide(); |
||||||
|
phpmyadmin('close'); |
||||||
|
} else { |
||||||
|
$(".user_pw").show(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//设置phpmyadmin二级密码
|
||||||
|
function phpmyadmin(msg) { |
||||||
|
type = 'password'; |
||||||
|
if (msg == 'close') { |
||||||
|
password_1 = msg; |
||||||
|
username = msg; |
||||||
|
layer.confirm(lan.soft.pma_pass_close, { closeBtn: 2, icon: 3 }, function() { |
||||||
|
var data = type + '=' + msg + '&siteName=phpmyadmin'; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/ajax?action=setPHPMyAdmin', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
}); |
||||||
|
return; |
||||||
|
} else { |
||||||
|
username = $("#username_get").val() |
||||||
|
password_1 = $("#password_get_1").val() |
||||||
|
password_2 = $("#password_get_2").val() |
||||||
|
if (username.length < 1 || password_1.length < 1) { |
||||||
|
layer.msg(lan.soft.pma_pass_empty, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (password_1 != password_2) { |
||||||
|
layer.msg(lan.bt.pass_err_re, { icon: 2 }); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
msg = password_1 + '&username=' + username + '&siteName=phpmyadmin'; |
||||||
|
var data = type + '=' + msg; |
||||||
|
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); |
||||||
|
$.post('/ajax?action=setPHPMyAdmin', data, function(rdata) { |
||||||
|
layer.close(loadT); |
||||||
|
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,352 @@ |
|||||||
|
# coding: utf-8 |
||||||
|
|
||||||
|
import time |
||||||
|
import psutil |
||||||
|
import random |
||||||
|
import os |
||||||
|
import urllib |
||||||
|
import binascii |
||||||
|
import json |
||||||
|
import public |
||||||
|
import re |
||||||
|
|
||||||
|
|
||||||
|
class score_main: |
||||||
|
|
||||||
|
__APIURL = 'https://www.bt.cn/api/Auth' |
||||||
|
__UPATH = 'data/userInfo.json' |
||||||
|
__userInfo = None |
||||||
|
__PDATA = None |
||||||
|
|
||||||
|
def CheckToken(self): |
||||||
|
pdata = {} |
||||||
|
data = {} |
||||||
|
if os.path.exists(self.__UPATH): |
||||||
|
self.__userInfo = json.loads(public.readFile(self.__UPATH)) |
||||||
|
if self.__userInfo: |
||||||
|
pdata['access_key'] = self.__userInfo['access_key'] |
||||||
|
data['secret_key'] = self.__userInfo['secret_key'] |
||||||
|
else: |
||||||
|
pdata['access_key'] = 'test' |
||||||
|
data['secret_key'] = '123456' |
||||||
|
pdata['data'] = data |
||||||
|
self.__PDATA = pdata |
||||||
|
|
||||||
|
# 修正信息 |
||||||
|
def SetScore(self, get): |
||||||
|
if hasattr(get, 'ips'): |
||||||
|
return self.SubmitSetScore('ips', get.ips) |
||||||
|
if hasattr(get, 'virt'): |
||||||
|
return self.SubmitSetScore('virt', get.virt) |
||||||
|
|
||||||
|
# 发送信息修正 |
||||||
|
def SubmitSetScore(self, key, value): |
||||||
|
self.CheckToken() |
||||||
|
self.__PDATA['data'][key] = value |
||||||
|
self.__PDATA['data'] = self.De_Code(self.__PDATA['data']) |
||||||
|
result = json.loads(public.httpPost( |
||||||
|
self.__APIURL + '/SetSocre', self.__PDATA)) |
||||||
|
result['data'] = self.En_Code(result['data']) |
||||||
|
return result |
||||||
|
|
||||||
|
# 获取得分列表 |
||||||
|
def GetScore(self, get): |
||||||
|
self.CheckToken() |
||||||
|
self.__PDATA['data'] = self.De_Code(self.__PDATA['data']) |
||||||
|
result = json.loads(public.httpPost( |
||||||
|
self.__APIURL + '/GetSocre', self.__PDATA)) |
||||||
|
result['data'] = self.En_Code(result['data']) |
||||||
|
return result |
||||||
|
|
||||||
|
# 获取配置信息 |
||||||
|
def GetConfig(self, get=None): |
||||||
|
virt = '/usr/sbin/virt-what' |
||||||
|
if not os.path.exists(virt): |
||||||
|
if os.path.exists('/etc/yum.repos.d/epel.repo'): |
||||||
|
os.system( |
||||||
|
'mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo_backup') |
||||||
|
os.system('yum install virt-what -y') |
||||||
|
if os.path.exists('/etc/yum.repos.d/epel.repo_backup'): |
||||||
|
os.system( |
||||||
|
'mv /etc/yum.repos.d/epel.repo_backup /etc/yum.repos.d/epel.repo') |
||||||
|
|
||||||
|
data = {} |
||||||
|
data['virt'] = public.ExecShell('virt-what')[0].strip() |
||||||
|
cpuinfo = open('/proc/cpuinfo', 'r').read() |
||||||
|
rep = "model\s+name\s+:\s+(.+)" |
||||||
|
tmp = re.search(rep, cpuinfo) |
||||||
|
|
||||||
|
data['cpu'] = tmp.groups()[0] |
||||||
|
data['core'] = psutil.cpu_count() |
||||||
|
data['memory'] = psutil.virtual_memory().total / 1024 / 1024 |
||||||
|
data['system'] = self.GetSystemVersion() |
||||||
|
|
||||||
|
scoreInfo = self.readScore() |
||||||
|
data['disk'] = str(scoreInfo['read']) + ',' + str(scoreInfo['write']) |
||||||
|
data['mem_score'] = scoreInfo['mem'] |
||||||
|
data['cpu_score'] = scoreInfo['cpu1'] + \ |
||||||
|
scoreInfo['cpu2'] + scoreInfo['cpu3'] + scoreInfo['cpu4'] |
||||||
|
data['disk_score'] = scoreInfo['disk_score'] |
||||||
|
data['total_score'] = scoreInfo['mem'] + \ |
||||||
|
data['cpu_score'] + scoreInfo['disk_score'] |
||||||
|
return data |
||||||
|
|
||||||
|
# 提交到云端 |
||||||
|
def SubmitScore(self, get): |
||||||
|
try: |
||||||
|
self.CheckToken() |
||||||
|
pdata = self.GetConfig(get) |
||||||
|
if not pdata['total_score']: |
||||||
|
return public.returnMsg(False, '请先跑分!') |
||||||
|
pdata['secret_key'] = self.__userInfo['secret_key'] |
||||||
|
self.__PDATA['data'] = self.De_Code(pdata) |
||||||
|
result = json.loads(public.httpPost( |
||||||
|
self.__APIURL + '/SubmitScore', self.__PDATA)) |
||||||
|
result['data'] = self.En_Code(result['data']) |
||||||
|
return result |
||||||
|
except: |
||||||
|
return None |
||||||
|
|
||||||
|
# 取操作系统版本 |
||||||
|
def GetSystemVersion(self): |
||||||
|
version = public.readFile('/etc/redhat-release') |
||||||
|
if not version: |
||||||
|
version = public.readFile( |
||||||
|
'/etc/issue').replace('\\n \\l', '').strip() |
||||||
|
else: |
||||||
|
version = version.replace('release ', '').strip() |
||||||
|
return version |
||||||
|
|
||||||
|
# 写当前得分 |
||||||
|
def writeScore(self, type, value): |
||||||
|
scoreFile = '/www/server/panel/plugin/score/score.json' |
||||||
|
if not os.path.exists(scoreFile): |
||||||
|
data = {} |
||||||
|
data['cpu1'] = 0 |
||||||
|
data['cpu2'] = 0 |
||||||
|
data['cpu3'] = 0 |
||||||
|
data['cpu4'] = 0 |
||||||
|
data['mem'] = 0 |
||||||
|
data['disk_score'] = 0 |
||||||
|
data['read'] = 0 |
||||||
|
data['write'] = 0 |
||||||
|
public.writeFile(scoreFile, json.dumps(data)) |
||||||
|
|
||||||
|
data = json.loads(public.readFile(scoreFile)) |
||||||
|
data[type] = value |
||||||
|
public.writeFile(scoreFile, json.dumps(data)) |
||||||
|
|
||||||
|
# 读当前得分 |
||||||
|
def readScore(self): |
||||||
|
scoreFile = '/www/server/panel/plugin/score/score.json' |
||||||
|
if not os.path.exists(scoreFile): |
||||||
|
data = {} |
||||||
|
data['cpu1'] = 0 |
||||||
|
data['cpu2'] = 0 |
||||||
|
data['cpu3'] = 0 |
||||||
|
data['cpu4'] = 0 |
||||||
|
data['mem'] = 0 |
||||||
|
data['disk_score'] = 0 |
||||||
|
data['read'] = 0 |
||||||
|
data['write'] = 0 |
||||||
|
public.writeFile(scoreFile, json.dumps(data)) |
||||||
|
data = json.loads(public.readFile(scoreFile)) |
||||||
|
return data |
||||||
|
|
||||||
|
# 测试CPU |
||||||
|
def testCpu(self, get, n=1): |
||||||
|
data = {} |
||||||
|
data['cpuCount'] = psutil.cpu_count() |
||||||
|
if not hasattr(get, 'type'): |
||||||
|
get.type = '0' |
||||||
|
import re |
||||||
|
cpuinfo = open('/proc/cpuinfo', 'r').read() |
||||||
|
rep = "model\s+name\s+:\s+(.+)" |
||||||
|
tmp = re.search(rep, cpuinfo) |
||||||
|
data['cpuType'] = "" |
||||||
|
if tmp: |
||||||
|
data['cpuType'] = tmp.groups()[0] |
||||||
|
|
||||||
|
import system |
||||||
|
data['system'] = system.system().GetSystemVersion() |
||||||
|
path = '/www/server/panel/plugin/score/testcpu' |
||||||
|
if not os.path.exists(path): |
||||||
|
os.system('gcc ' + path + '.c -o ' + path + ' -lpthread') |
||||||
|
start = time.time() |
||||||
|
os.system(path + ' 32 ' + get.type) |
||||||
|
end = time.time() |
||||||
|
data['score'] = int(400 * 10 / (end - start)) |
||||||
|
if not os.path.exists(path): |
||||||
|
data['score'] = 0 |
||||||
|
self.writeScore('cpu' + get.type, data['score']) |
||||||
|
return data |
||||||
|
pass |
||||||
|
|
||||||
|
# 测试整数运算 |
||||||
|
def testInt(self): |
||||||
|
return self.testIntOrFloat(1) |
||||||
|
|
||||||
|
# 测试浮点运行 |
||||||
|
def testFloat(self): |
||||||
|
return self.testIntOrFloat(1.01) |
||||||
|
|
||||||
|
# CPU测试体 |
||||||
|
def testIntOrFloat(self, n=1): |
||||||
|
start = time.time() |
||||||
|
num = 10000 * 100 |
||||||
|
for i in range(num): |
||||||
|
if i == 0: |
||||||
|
continue |
||||||
|
a = n + i |
||||||
|
b = n - i |
||||||
|
c = n * i |
||||||
|
d = n / i |
||||||
|
n = n + 1 |
||||||
|
|
||||||
|
end = time.time() |
||||||
|
usetime = end - start |
||||||
|
return num / 100 / usetime |
||||||
|
|
||||||
|
# 冒泡算法测试 |
||||||
|
def testBubble(self): |
||||||
|
start = time.time() |
||||||
|
num = 10000 * 5 |
||||||
|
xx = 'qwertyuiopasdfghjklzxcvbnm1234567890' |
||||||
|
for c in xrange(num): |
||||||
|
lst = [] |
||||||
|
for k in range(10): |
||||||
|
lst.append(xx[random.randint(0, len(xx) - 1)]) |
||||||
|
lst = self.bubbleSort(lst) |
||||||
|
end = time.time() |
||||||
|
usetime = end - start |
||||||
|
return num / 5 / usetime |
||||||
|
|
||||||
|
# 冒泡排序 |
||||||
|
def bubbleSort(self, lst): |
||||||
|
length = len(lst) |
||||||
|
for i in xrange(0, length, 1): |
||||||
|
for j in xrange(0, length - 1 - i, 1): |
||||||
|
if lst[j] < lst[j + 1]: |
||||||
|
temp = lst[j] |
||||||
|
lst[j] = lst[j + 1] |
||||||
|
lst[j + 1] = temp |
||||||
|
return lst |
||||||
|
|
||||||
|
# 二叉树算法测试 |
||||||
|
def testTree(self): |
||||||
|
import testTree |
||||||
|
|
||||||
|
start = time.time() |
||||||
|
elems = range(3000) # 生成树节点 |
||||||
|
tree = testTree.Tree() # 新建一个树对象 |
||||||
|
for elem in elems: |
||||||
|
tree.add(elem) # 逐个加入树的节点 |
||||||
|
|
||||||
|
tree.level_queue(tree.root) |
||||||
|
tree.front_digui(tree.root) |
||||||
|
tree.middle_digui(tree.root) |
||||||
|
tree.later_digui(tree.root) |
||||||
|
tree.front_stack(tree.root) |
||||||
|
tree.middle_stack(tree.root) |
||||||
|
tree.later_stack(tree.root) |
||||||
|
|
||||||
|
end = time.time() |
||||||
|
usetime = end - start |
||||||
|
return 3000 / usetime |
||||||
|
|
||||||
|
# 测试内存 |
||||||
|
def testMem(self, get): |
||||||
|
mem = psutil.virtual_memory() |
||||||
|
self.writeScore('mem', mem.total / 1024 / 1024) |
||||||
|
# 提交数据 |
||||||
|
self.SubmitScore(get) |
||||||
|
return mem.total / 1024 / 1024 |
||||||
|
|
||||||
|
# 测试磁盘 |
||||||
|
def testDisk(self, get): |
||||||
|
import os |
||||||
|
data = {} |
||||||
|
os.system('rm -f testDisk_*') |
||||||
|
filename = "testDisk_" + \ |
||||||
|
time.strftime('%Y%m%d%H%M%S', time.localtime()) |
||||||
|
data['write'] = self.testDiskWrite(filename) |
||||||
|
import shutil |
||||||
|
filename2 = "testDisk_" + \ |
||||||
|
time.strftime('%Y%m%d%H%M%S', time.localtime()) |
||||||
|
shutil.move(filename, filename2) |
||||||
|
data['read'] = self.testDiskRead(filename2) |
||||||
|
diskIo = psutil.disk_partitions() |
||||||
|
diskInfo = [] |
||||||
|
for disk in diskIo: |
||||||
|
tmp = {} |
||||||
|
tmp['path'] = disk[1] |
||||||
|
tmp['size'] = psutil.disk_usage(disk[1])[0] |
||||||
|
diskInfo.append(tmp) |
||||||
|
data['diskInfo'] = diskInfo |
||||||
|
writeDisk = data['write'] |
||||||
|
if data['write'] > 1000: |
||||||
|
writeDisk = 1000 |
||||||
|
readDisk = data['read'] |
||||||
|
if data['read'] > 1000: |
||||||
|
readDisk = 1000 |
||||||
|
|
||||||
|
data['score'] = (writeDisk * 6) + (readDisk * 6) |
||||||
|
os.remove(filename2) |
||||||
|
|
||||||
|
self.writeScore('disk_score', data['score']) |
||||||
|
self.writeScore('write', data['write']) |
||||||
|
self.writeScore('read', data['read']) |
||||||
|
return data |
||||||
|
pass |
||||||
|
|
||||||
|
# 测试磁盘写入速度 |
||||||
|
def testDiskWrite(self, filename): |
||||||
|
import random |
||||||
|
start = time.time() |
||||||
|
fp = open(filename, 'w+') |
||||||
|
strTest = "" |
||||||
|
strTmp = "" |
||||||
|
for n in range(4): |
||||||
|
strTmp += chr(random.randint(97, 122)) |
||||||
|
for n in range(1024): |
||||||
|
strTest += strTmp |
||||||
|
|
||||||
|
for i in range(1024 * 256): |
||||||
|
fp.write(strTest) |
||||||
|
|
||||||
|
del(strTest) |
||||||
|
del(strTmp) |
||||||
|
fp.close() |
||||||
|
end = time.time() |
||||||
|
usetime = end - start |
||||||
|
return int(1024 / usetime) |
||||||
|
|
||||||
|
# 测试磁盘读取速度 |
||||||
|
def testDiskRead(self, filename): |
||||||
|
os.system('echo 3 > /proc/sys/vm/drop_caches') |
||||||
|
import random |
||||||
|
start = time.time() |
||||||
|
fp = open(filename, 'r') |
||||||
|
size = 4096 |
||||||
|
while True: |
||||||
|
tmp = fp.read(size) |
||||||
|
if not tmp: |
||||||
|
break |
||||||
|
del(tmp) |
||||||
|
fp.close() |
||||||
|
end = time.time() |
||||||
|
usetime = end - start |
||||||
|
return int(1024 / usetime) |
||||||
|
|
||||||
|
def testWorkNet(self): |
||||||
|
pass |
||||||
|
|
||||||
|
# 加密数据 |
||||||
|
def De_Code(self, data): |
||||||
|
pdata = urllib.urlencode(data) |
||||||
|
return binascii.hexlify(pdata) |
||||||
|
|
||||||
|
# 解密数据 |
||||||
|
def En_Code(self, data): |
||||||
|
result = urllib.unquote(binascii.unhexlify(data)) |
||||||
|
return json.loads(result) |
@ -1,340 +0,0 @@ |
|||||||
#coding: utf-8 |
|
||||||
# +------------------------------------------------------------------- |
|
||||||
# | 宝塔Linux面板 x3 |
|
||||||
# +------------------------------------------------------------------- |
|
||||||
# | Copyright (c) 2015-2016 宝塔软件(http://bt.cn) All rights reserved. |
|
||||||
# +------------------------------------------------------------------- |
|
||||||
# | Author: 黄文良 <2879625666@qq.com> |
|
||||||
# +------------------------------------------------------------------- |
|
||||||
|
|
||||||
#+-------------------------------------------------------------------- |
|
||||||
#| 服务器测试 |
|
||||||
#+-------------------------------------------------------------------- |
|
||||||
|
|
||||||
import time,psutil,random,os,urllib,binascii,json,public,re; |
|
||||||
class score_main: |
|
||||||
|
|
||||||
__APIURL = 'https://www.bt.cn/api/Auth'; |
|
||||||
__UPATH = 'data/userInfo.json'; |
|
||||||
__userInfo = None; |
|
||||||
__PDATA = None; |
|
||||||
|
|
||||||
def CheckToken(self): |
|
||||||
pdata = {} |
|
||||||
data = {} |
|
||||||
if os.path.exists(self.__UPATH): |
|
||||||
self.__userInfo = json.loads(public.readFile(self.__UPATH)); |
|
||||||
if self.__userInfo: |
|
||||||
pdata['access_key'] = self.__userInfo['access_key']; |
|
||||||
data['secret_key'] = self.__userInfo['secret_key']; |
|
||||||
else: |
|
||||||
pdata['access_key'] = 'test'; |
|
||||||
data['secret_key'] = '123456'; |
|
||||||
pdata['data'] = data; |
|
||||||
self.__PDATA = pdata; |
|
||||||
|
|
||||||
#修正信息 |
|
||||||
def SetScore(self,get): |
|
||||||
if hasattr(get,'ips'): |
|
||||||
return self.SubmitSetScore('ips',get.ips); |
|
||||||
if hasattr(get,'virt'): |
|
||||||
return self.SubmitSetScore('virt',get.virt); |
|
||||||
|
|
||||||
#发送信息修正 |
|
||||||
def SubmitSetScore(self,key,value): |
|
||||||
self.CheckToken(); |
|
||||||
self.__PDATA['data'][key] = value |
|
||||||
self.__PDATA['data'] = self.De_Code(self.__PDATA['data']); |
|
||||||
result = json.loads(public.httpPost(self.__APIURL+'/SetSocre',self.__PDATA)); |
|
||||||
result['data'] = self.En_Code(result['data']); |
|
||||||
return result; |
|
||||||
|
|
||||||
#获取得分列表 |
|
||||||
def GetScore(self,get): |
|
||||||
self.CheckToken(); |
|
||||||
self.__PDATA['data'] = self.De_Code(self.__PDATA['data']); |
|
||||||
result = json.loads(public.httpPost(self.__APIURL+'/GetSocre',self.__PDATA)); |
|
||||||
result['data'] = self.En_Code(result['data']); |
|
||||||
return result; |
|
||||||
|
|
||||||
#获取配置信息 |
|
||||||
def GetConfig(self,get=None): |
|
||||||
virt = '/usr/sbin/virt-what' |
|
||||||
if not os.path.exists(virt): |
|
||||||
if os.path.exists('/etc/yum.repos.d/epel.repo'): |
|
||||||
os.system('mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo_backup'); |
|
||||||
os.system('yum install virt-what -y'); |
|
||||||
if os.path.exists('/etc/yum.repos.d/epel.repo_backup'): |
|
||||||
os.system('mv /etc/yum.repos.d/epel.repo_backup /etc/yum.repos.d/epel.repo'); |
|
||||||
|
|
||||||
data = {} |
|
||||||
data['virt'] = public.ExecShell('virt-what')[0].strip(); |
|
||||||
cpuinfo = open('/proc/cpuinfo','r').read(); |
|
||||||
rep = "model\s+name\s+:\s+(.+)" |
|
||||||
tmp = re.search(rep,cpuinfo); |
|
||||||
|
|
||||||
data['cpu'] = tmp.groups()[0]; |
|
||||||
data['core'] = psutil.cpu_count(); |
|
||||||
data['memory'] = psutil.virtual_memory().total/1024/1024 |
|
||||||
data['system'] = self.GetSystemVersion(); |
|
||||||
|
|
||||||
scoreInfo = self.readScore(); |
|
||||||
data['disk'] = str(scoreInfo['read'])+','+str(scoreInfo['write']) |
|
||||||
data['mem_score'] = scoreInfo['mem']; |
|
||||||
data['cpu_score'] = scoreInfo['cpu1'] + scoreInfo['cpu2'] + scoreInfo['cpu3'] + scoreInfo['cpu4']; |
|
||||||
data['disk_score'] = scoreInfo['disk_score']; |
|
||||||
data['total_score'] = scoreInfo['mem']+data['cpu_score']+scoreInfo['disk_score']; |
|
||||||
return data; |
|
||||||
|
|
||||||
#提交到云端 |
|
||||||
def SubmitScore(self,get): |
|
||||||
try: |
|
||||||
self.CheckToken(); |
|
||||||
pdata = self.GetConfig(get); |
|
||||||
if not pdata['total_score']: return public.returnMsg(False,'请先跑分!'); |
|
||||||
pdata['secret_key'] = self.__userInfo['secret_key']; |
|
||||||
self.__PDATA['data'] = self.De_Code(pdata); |
|
||||||
result = json.loads(public.httpPost(self.__APIURL+'/SubmitScore',self.__PDATA)); |
|
||||||
result['data'] = self.En_Code(result['data']); |
|
||||||
return result; |
|
||||||
except: |
|
||||||
return None; |
|
||||||
|
|
||||||
#取操作系统版本 |
|
||||||
def GetSystemVersion(self): |
|
||||||
version = public.readFile('/etc/redhat-release') |
|
||||||
if not version: |
|
||||||
version = public.readFile('/etc/issue').replace('\\n \\l','').strip(); |
|
||||||
else: |
|
||||||
version = version.replace('release ','').strip(); |
|
||||||
return version |
|
||||||
|
|
||||||
#写当前得分 |
|
||||||
def writeScore(self,type,value): |
|
||||||
scoreFile = '/www/server/panel/plugin/score/score.json'; |
|
||||||
if not os.path.exists(scoreFile): |
|
||||||
data = {} |
|
||||||
data['cpu1'] = 0; |
|
||||||
data['cpu2'] = 0; |
|
||||||
data['cpu3'] = 0; |
|
||||||
data['cpu4'] = 0; |
|
||||||
data['mem'] = 0; |
|
||||||
data['disk_score'] = 0; |
|
||||||
data['read'] = 0; |
|
||||||
data['write'] = 0; |
|
||||||
public.writeFile(scoreFile,json.dumps(data)); |
|
||||||
|
|
||||||
data = json.loads(public.readFile(scoreFile)); |
|
||||||
data[type] = value; |
|
||||||
public.writeFile(scoreFile,json.dumps(data)); |
|
||||||
|
|
||||||
#读当前得分 |
|
||||||
def readScore(self): |
|
||||||
scoreFile = '/www/server/panel/plugin/score/score.json'; |
|
||||||
if not os.path.exists(scoreFile): |
|
||||||
data = {} |
|
||||||
data['cpu1'] = 0; |
|
||||||
data['cpu2'] = 0; |
|
||||||
data['cpu3'] = 0; |
|
||||||
data['cpu4'] = 0; |
|
||||||
data['mem'] = 0; |
|
||||||
data['disk_score'] = 0; |
|
||||||
data['read'] = 0; |
|
||||||
data['write'] = 0; |
|
||||||
public.writeFile(scoreFile,json.dumps(data)); |
|
||||||
data = json.loads(public.readFile(scoreFile)); |
|
||||||
return data; |
|
||||||
|
|
||||||
|
|
||||||
#测试CPU |
|
||||||
def testCpu(self,get,n = 1): |
|
||||||
data = {} |
|
||||||
data['cpuCount'] = psutil.cpu_count(); |
|
||||||
if not hasattr(get,'type'): get.type = '0'; |
|
||||||
import re; |
|
||||||
cpuinfo = open('/proc/cpuinfo','r').read(); |
|
||||||
rep = "model\s+name\s+:\s+(.+)" |
|
||||||
tmp = re.search(rep,cpuinfo); |
|
||||||
data['cpuType'] = "" |
|
||||||
if tmp: |
|
||||||
data['cpuType'] = tmp.groups()[0]; |
|
||||||
|
|
||||||
import system |
|
||||||
data['system'] = system.system().GetSystemVersion(); |
|
||||||
path = '/www/server/panel/plugin/score/testcpu'; |
|
||||||
if not os.path.exists(path): os.system('gcc '+path+'.c -o ' +path + ' -lpthread'); |
|
||||||
start = time.time(); |
|
||||||
os.system(path + ' 32 ' + get.type); |
|
||||||
end = time.time(); |
|
||||||
data['score'] = int(400 * 10 / (end - start)); |
|
||||||
if not os.path.exists(path): data['score'] = 0; |
|
||||||
self.writeScore('cpu'+get.type, data['score']) |
|
||||||
return data; |
|
||||||
pass |
|
||||||
|
|
||||||
#测试整数运算 |
|
||||||
def testInt(self): |
|
||||||
return self.testIntOrFloat(1); |
|
||||||
|
|
||||||
#测试浮点运行 |
|
||||||
def testFloat(self): |
|
||||||
return self.testIntOrFloat(1.01); |
|
||||||
|
|
||||||
#CPU测试体 |
|
||||||
def testIntOrFloat(self,n=1): |
|
||||||
start = time.time(); |
|
||||||
num = 10000 * 100; |
|
||||||
for i in range(num): |
|
||||||
if i == 0: continue; |
|
||||||
a = n + i; |
|
||||||
b = n - i; |
|
||||||
c = n * i; |
|
||||||
d = n / i; |
|
||||||
n = n + 1; |
|
||||||
|
|
||||||
end = time.time(); |
|
||||||
usetime = end - start; |
|
||||||
return num / 100 / usetime; |
|
||||||
|
|
||||||
#冒泡算法测试 |
|
||||||
def testBubble(self): |
|
||||||
start = time.time(); |
|
||||||
num = 10000 * 5; |
|
||||||
xx = 'qwertyuiopasdfghjklzxcvbnm1234567890' |
|
||||||
for c in xrange(num): |
|
||||||
lst = [] |
|
||||||
for k in range(10): |
|
||||||
lst.append(xx[random.randint(0,len(xx)-1)]) |
|
||||||
lst = self.bubbleSort(lst) |
|
||||||
end = time.time(); |
|
||||||
usetime = end - start; |
|
||||||
return num / 5 / usetime; |
|
||||||
|
|
||||||
#冒泡排序 |
|
||||||
def bubbleSort(self,lst): |
|
||||||
length = len(lst) |
|
||||||
for i in xrange(0, length, 1): |
|
||||||
for j in xrange(0, length-1-i, 1): |
|
||||||
if lst[j] < lst[j+1]: |
|
||||||
temp = lst[j] |
|
||||||
lst[j] = lst[j+1] |
|
||||||
lst[j+1] = temp |
|
||||||
return lst |
|
||||||
|
|
||||||
#二叉树算法测试 |
|
||||||
def testTree(self): |
|
||||||
import testTree |
|
||||||
|
|
||||||
start = time.time(); |
|
||||||
elems = range(3000) #生成树节点 |
|
||||||
tree = testTree.Tree() #新建一个树对象 |
|
||||||
for elem in elems: |
|
||||||
tree.add(elem) #逐个加入树的节点 |
|
||||||
|
|
||||||
tree.level_queue(tree.root) |
|
||||||
tree.front_digui(tree.root) |
|
||||||
tree.middle_digui(tree.root) |
|
||||||
tree.later_digui(tree.root) |
|
||||||
tree.front_stack(tree.root) |
|
||||||
tree.middle_stack(tree.root) |
|
||||||
tree.later_stack(tree.root) |
|
||||||
|
|
||||||
end = time.time(); |
|
||||||
usetime = end - start; |
|
||||||
return 3000 / usetime; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#测试内存 |
|
||||||
def testMem(self,get): |
|
||||||
mem = psutil.virtual_memory() |
|
||||||
self.writeScore('mem', mem.total/1024/1024) |
|
||||||
#提交数据 |
|
||||||
self.SubmitScore(get) |
|
||||||
return mem.total/1024/1024; |
|
||||||
|
|
||||||
#测试磁盘 |
|
||||||
def testDisk(self,get): |
|
||||||
import os |
|
||||||
data = {} |
|
||||||
os.system('rm -f testDisk_*'); |
|
||||||
filename = "testDisk_" + time.strftime('%Y%m%d%H%M%S',time.localtime()); |
|
||||||
data['write'] = self.testDiskWrite(filename); |
|
||||||
import shutil |
|
||||||
filename2 = "testDisk_" + time.strftime('%Y%m%d%H%M%S',time.localtime()); |
|
||||||
shutil.move(filename,filename2); |
|
||||||
data['read'] = self.testDiskRead(filename2); |
|
||||||
diskIo = psutil.disk_partitions() |
|
||||||
diskInfo = [] |
|
||||||
for disk in diskIo: |
|
||||||
tmp = {} |
|
||||||
tmp['path'] = disk[1] |
|
||||||
tmp['size'] = psutil.disk_usage(disk[1])[0] |
|
||||||
diskInfo.append(tmp) |
|
||||||
data['diskInfo'] = diskInfo; |
|
||||||
writeDisk = data['write']; |
|
||||||
if data['write'] > 1000: writeDisk = 1000; |
|
||||||
readDisk = data['read']; |
|
||||||
if data['read'] > 1000: readDisk = 1000; |
|
||||||
|
|
||||||
data['score'] = (writeDisk * 6) + (readDisk * 6) |
|
||||||
os.remove(filename2); |
|
||||||
|
|
||||||
self.writeScore('disk_score', data['score']) |
|
||||||
self.writeScore('write', data['write']) |
|
||||||
self.writeScore('read', data['read']) |
|
||||||
return data; |
|
||||||
pass |
|
||||||
|
|
||||||
#测试磁盘写入速度 |
|
||||||
def testDiskWrite(self,filename): |
|
||||||
import random |
|
||||||
start = time.time(); |
|
||||||
fp = open(filename,'w+'); |
|
||||||
strTest = ""; |
|
||||||
strTmp = ""; |
|
||||||
for n in range(4): |
|
||||||
strTmp += chr(random.randint(97, 122)) |
|
||||||
for n in range(1024): |
|
||||||
strTest += strTmp; |
|
||||||
|
|
||||||
for i in range(1024 * 256): |
|
||||||
fp.write(strTest); |
|
||||||
|
|
||||||
del(strTest); |
|
||||||
del(strTmp); |
|
||||||
fp.close() |
|
||||||
end = time.time(); |
|
||||||
usetime = end - start; |
|
||||||
return int(1024/usetime); |
|
||||||
|
|
||||||
#测试磁盘读取速度 |
|
||||||
def testDiskRead(self,filename): |
|
||||||
os.system('echo 3 > /proc/sys/vm/drop_caches'); |
|
||||||
import random |
|
||||||
start = time.time(); |
|
||||||
fp = open(filename,'r'); |
|
||||||
size = 4096; |
|
||||||
while True: |
|
||||||
tmp = fp.read(size); |
|
||||||
if not tmp: break; |
|
||||||
del(tmp); |
|
||||||
fp.close() |
|
||||||
end = time.time(); |
|
||||||
usetime = end - start; |
|
||||||
return int(1024/usetime); |
|
||||||
|
|
||||||
def testWorkNet(self): |
|
||||||
pass |
|
||||||
|
|
||||||
|
|
||||||
#加密数据 |
|
||||||
def De_Code(self,data): |
|
||||||
pdata = urllib.urlencode(data); |
|
||||||
return binascii.hexlify(pdata); |
|
||||||
|
|
||||||
#解密数据 |
|
||||||
def En_Code(self,data): |
|
||||||
result = urllib.unquote(binascii.unhexlify(data)); |
|
||||||
return json.loads(result); |
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue