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