function tmPostCallback(method, args, callback, version='1.0'){
var req_data = {};
req_data['name'] = 'task_manager';
req_data['func'] = method;
req_data['script']='task_manager_index';
args['version'] = version;
if (typeof(args) == 'string' && args == ''){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/callback', req_data, function(data) {
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
var tab_name = 'p_list';
var search_val = '';
var select_pid = undefined; // 当前选中进程的id
var realProcess = []; // 进程数组
var originProcess = []; // 当前进程展示的列表
var wrapPid = {}; // 展开的父进程
var TaskProcessLayerIndex = ''; // 进程详情弹窗的index
var canScroll2TaskMangerPossess = true; // 是否可以定位到选中的进程
$('.t-mana .man-menu-sub span').click(function () {
$(this).siblings().removeClass("on");
tab_name = $(this).attr('class');
$(this).addClass("on")
// console.log(tab_name);
if (tab_name == 'p_resource') {
$('.resource-panel').addClass('resource-panel-show')
$('.taskdivtable').addClass('divtable-hide')
$('.ts-line').addClass('divtable-hide')
} else if (tab_name !== 'p_resource on') {
$('.resource-panel').removeClass('resource-panel-show')
$('.taskdivtable').removeClass('divtable-hide')
$('.ts-line').removeClass('divtable-hide')
}
search_val = $('.search-bar .search_input').val('')
get_list_bytab(false);
});
$('.search-bar .search_input').on({
'keyup': function (e) {
if (e.keyCode == 13) {
get_list_bytab();
}
},
'blur': function () {
get_list_bytab(true);
},
});
$('.search-bar .glyphicon').click(function (e) {
get_list_bytab();
});
var process_list_s = 0;
get_process_list();
function setTableHead(data) {
$.each(Object.keys(data.meter_head), function (index, item) {
if (!$('.' + item).hasClass('disabled')) {
if (data.meter_head[item]) {
$('.' + item).addClass('active');
} else {
$('.' + item).removeClass('active');
}
}
});
$('#change_thead').bind("contextmenu", function () {
return false;
})
$(".plug_menu").bind("contextmenu", function () {
return false;
})
$('#change_thead').mousedown(function (e) {
e.preventDefault();
if (e.which == 3) { // 1 = 鼠标左键; 2 = 鼠标中键; 3 = 鼠标右键
var menu = $('.setting_ul');
var offset = $(this).offset();
var x = e.pageX - offset.left;
var y = e.pageY - offset.top;
var width = menu.outerWidth();
$(".plug_menu").removeAttr('style');
$(".setting_ul").removeClass('undisplay');
if ($('#change_thead').width() - x < width) {
$(".plug_menu").css({
position: 'absolute',
left: x - width + 150 + "px",
top: y + 50 + "px",
}).show();
} else {
$(".plug_menu").css({
position: 'absolute',
left: x + width + "px",
top: y + 50 + "px",
}).show();
}
}
$(".setting_ul").show();
});
}
$('.layui-layer').not($('.setting_ul_li')).click(function () {
$(".plug_menu").hide()
$(".setting_ul").hide();
});
var isProcessing = false; // 设置标志
$('.setting_ul_li').off('click').click(function (e) {
var that = $(this)
e.stopPropagation()
// 检查标志
if (isProcessing) {
return;
}
if (!$(this).hasClass('disabled')) {
isProcessing = true; // 点击事件被触发,设置标志
var name = $(this).attr("name")
clearInterval(process_list_s);
bt_tools.send({
url: 'plugin?action=a&name=task_manager&s=set_meter_head',
data: {meter_head_name: name}
}, function (data) {
isProcessing = false; // 操作完成,清除标志
if (!data) {
layer.msg('设置失败');
}
that.toggleClass('active')
get_process_list(null, null, false);
clearInterval(process_list_s);
process_list_s = setInterval(function () {
if ($(".t-mana").length == 0) {
clearInterval(process_list_s);
process_list_s = 0;
console.log('进程列表轮询任务已停止');
}
get_process_list(null, null, true);
}, 3000);
})
}
})
$('.setting_btn').on('click',function (e) {
e.stopPropagation()
var offset = $('.man-menu-sub').offset();
var x = e.pageX - offset.left;
var y = e.pageY - offset.top;
var width = $('.man-menu-sub').outerWidth();
if ($('.man-menu-sub').width() - x < width) {
$(".plug_menu").css({
position: 'absolute',
right: "14.5px",
top:"40px",
}).toggle();
$('.setting_ul').addClass('undisplay')
}
$(".setting_ul").toggle();
})
if (process_list_s === 0) {
process_list_s = setInterval(function () {
if ($(".t-mana").length == 0) {
clearInterval(process_list_s);
process_list_s = 0;
console.log('进程列表轮询任务已停止')
}
get_process_list(null, null, true);
}, 3000);
}
function get_list_bytab(isblur) {
if (isblur && $('.search-bar .search_input').val() === search_val) {
return;
}
search_val = $('.search-bar .search_input').val();
get_process_list();
switch (tab_name) {
case 'p_list':
$('.table_config').show();
$('.search-bar span').addClass('r56');
select_pid = ''
wrapPid = {}
canScroll2TaskMangerPossess = true
get_process_list();
break;
case 'p_resource':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_resource_list();
break;
case 'p_run':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_run_list();
break;
case 'p_service':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_service_list();
break;
case 'p_network':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_network_list();
break;
case 'p_user':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_user_list();
break;
case 'p_cron':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_cron_list();
break;
case 'p_session':
$('.table_config').hide();
$('.search-bar span').removeClass('r56');
get_who_list();
break;
}
}
function get_process_list(sortx, reverse, rx) {
if ($('.t-mana .man-menu-sub .on').attr('class') != 'p_list on') return;
var cookie_key = 'task_process_sort';
var s_tmp = getCookie(cookie_key);
if (sortx == undefined || sortx == null) {
if (s_tmp) {
sortx_arr = s_tmp.split('|');
sortx = sortx_arr[0];
reverse = sortx_arr[1];
} else {
sortx = 'cpu_percent';
}
}
res_list = {
True: 'False',
False: 'True'
};
setCookie(cookie_key, sortx + '|' + reverse);
if (!rx) {
var loadT = layer.msg('正在获取进程列表..', {icon: 16, time: 0, shade: [0.3, '#000']})
}
tmPostCallback('get_process_list', {sortx: sortx,reverse: reverse,search:search_val}, function(rdata){
console.log(rdata);
if (!rx) layer.close(loadT);
if ($('.t-mana .man-menu-sub .on').attr('class') != 'p_list on') return;
if (rdata.status === false) {
layer.closeAll();
layer.msg(rdata.msg, {icon: 2});
return;
}
var data = rdata.data;
var year = new Date().getFullYear();
realProcess = [];
originProcess = [];
var list = data.process_list;
for (var i = 0; i < list.length; i++) {
list[i].haschild = false;
if (list[i].children && list[i].children.length > 0) {
list[i].haschild = true;
}
originProcess.push(list[i]);
realProcess.push(list[i]);
}
var selectline = buildRealProcess();
var tbody_tr = createProcessTable(true, data);
var tbody = '\
\
应用名称 | \
PID | \
线程 | \
用户 | \
CPU | \
内存 | \
io读 | \
io写 | \
上行 | \
下行 | \
连接 | \
状态 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
var topMsg = '\
CPU:' + data.info.cpu + '%
内存:' + toSize(data.info.mem) + '
\
负载(load average)
' + data.info.load_average[1] + ', ' + data.info.load_average[5] + ', ' + data.info.load_average[15] + '
\
进程数:' + data.process_list.length + '
磁盘:' + toSize(data.info.disk) + '
\
';
$("#load_average").html(topMsg).show();
$(".pro_" + sortx).append('');
$(".table-cont").css("height", "500px");
scropll2selectPossess(selectline);
show_task();
setTableHead(data);
if(getCookie('table_config_tip')=='false'||!getCookie('table_config_tip')){
layer.tips('点击可设置表头', '.setting_btn', {
tips: [1, '#20a53a'],
time: 3000
});
setCookie('table_config_tip',true);
}
// 清除掉之前绑定的滚动事件
$("#table-cont").unbind('scroll');
// 重新绑定滚动事件
$('#table-cont').scroll(task_manager_possess_scroll());
});
}
function task_manager_possess_scroll() {
var timer = null;
var set2selected = null
// 滚动节流
return function () {
if (timer !== null) return
timer = setTimeout(function () {
timer = null
canScroll2TaskMangerPossess = false
if (set2selected !== null) clearTimeout(set2selected)
// 最后一次滚动后2秒内不再滚动,才能滚动到选中的行
set2selected = setTimeout(function () {
canScroll2TaskMangerPossess = true
}, 2000)
}, 500)
}
}
function scropll2selectPossess(selectline) {
if (canScroll2TaskMangerPossess && selectline !== -1) {
var top = $('#table-cont')[0].scrollTop;
// if(selectline > 2)
if (selectline * 38 > top + 500 || selectline * 38 < top) {
$('#table-cont')[0].scrollTo(0, (selectline - 2) * 38, 'smooth');
}
}
}
function show_process_child(pid) {
wrapPid[pid + ''] = true;
// buildRealProcess()
// createProcessTable()
}
function colp_process_child(pid) {
// select_pid = pid+'';
wrapPid[pid + ''] = false;
// buildRealProcess()
// createProcessTable()
}
function click_process_tr(e, pid, fpid) {
select_pid = pid + '';
if (e.target.innerText === '结束' && fpid) {
select_pid = fpid + '';
}
var selectline = buildRealProcess()
createProcessTable()
scropll2selectPossess(selectline)
}
// 构建真实进程列表
function buildRealProcess() {
realProcess = [];
var len = originProcess.length;
for (var i = 0; i < len; i++) {
realProcess.push(originProcess[i]);
if (wrapPid[originProcess[i].pid + '']) {
// console.log(originProcess[i]);
if (!originProcess[i].children) {
wrapPid[originProcess[i].pid + ''] = false;
continue;
}
var childSelected = false;
for (var j = 0; j < originProcess[i].children.length; j++) {
originProcess[i].children[j].fpid = originProcess[i].pid + ''
originProcess[i].children[j].ischild = true
originProcess[i].children[j].isselect = false
if (originProcess[i].pid + '' === select_pid) {
originProcess[i].children[j].isselect = true
}
if (originProcess[i].children[j].pid + '' === select_pid) {
var childSelected = true;
}
realProcess.push(originProcess[i].children[j]);
// 显示选中的父子进程
}
if (childSelected) {
for (var k = 0; k <= originProcess[i].children.length; k++) {
realProcess.pop()
}
originProcess[i].isselect = true
realProcess.push(originProcess[i])
for (var l = 0; l < originProcess[i].children.length; l++) {
originProcess[i].children[l].isselect = true
realProcess.push(originProcess[i].children[l]);
}
}
}
}
for (var i = 0; i < realProcess.length; i++) {
if (realProcess[i].pid + '' === select_pid) {
return i// 返回选中的下标
}
}
return -1
}
// 生成进程表格内容
function createProcessTable(getboday, data) {
var tbody_tr = '';
for (var i = 0; i < realProcess.length; i++) {
if (realProcess[i].status == '活动') realProcess[i].status = '活动';
var colp = realProcess[i].haschild ? '' : '';
if (wrapPid[realProcess[i].pid + '']) {
colp = '';
}
var childNums = realProcess[i].haschild ? '(' + realProcess[i].children.length + ')' : '';
var namewidth = "max-width:120px;"
if (realProcess[i].ischild) {
namewidth = "max-width:80px;"
}
if (realProcess[i].haschild) {
namewidth = "max-width:100px;"
}
var processName = '' + realProcess[i].ps + '';
var isProcessChild = realProcess[i].ischild ? 'process-child' : '';
var childStyle = realProcess[i].ischild ? 'width:100px' : '';
var selected = realProcess[i].pid + '' === select_pid || realProcess[i].isselect ? 'class="process-select"' : '';
var selected_one = realProcess[i].pid + '' === select_pid ? 'style="background-color:#F6F6F6;"' : '';
var kill_process = realProcess[i].haschild ? 'kill_process_all' : 'kill_process';
var tbody_td = '';
if ('io_read_bytes' in realProcess[i]){
tbody_td += '' + toSize(realProcess[i].io_read_speed).replace(' ', '') + ' | ';
tbody_td += '' + toSize(realProcess[i].io_write_speed).replace(' ', '') + ' | ';
tbody_td += '' + toSize(realProcess[i].up).replace(' ', '') + ' | ';
tbody_td += '' + toSize(realProcess[i].down).replace(' ', '') + ' | ';
}
tbody_tr += '\
\
' + colp + '\
\
' + processName + '\
' + childNums + '\
| \
' + realProcess[i].pid + ' | \
' + realProcess[i].threads + ' | \
' + realProcess[i].user + ' | \
' + realProcess[i].cpu_percent + '% | \
' + toSize(realProcess[i].memory_used).replace(' ', '') + ' | \
'+tbody_td+'\
' + realProcess[i].connects + ' | \
' + realProcess[i].status + ' | \
结束 | \
';
}
if (getboday) return tbody_tr;
$("#TaskManagement tbody").html(tbody_tr);
}
// 获取资源列表
function get_resource_list() {
// console.log('get_resource_list----------');
var url = '/plugin?action=a&name=task_manager&s=cpu_status'
// url = 'plugin?action=a&name=task_manager&s=get_disk_staus'
var res_list = {
True: 'False',
False: 'True'
}
var reverse = 'True'
$.post(url, function (data) {
console.log(data);
realProcess = []
originProcess = []
var list = data.process_list
for (var i = 0; i < list.length; i++) {
list[i].haschild = false
if (list[i].children && list[i].children.length > 0) {
list[i].haschild = true
}
originProcess.push(list[i])
realProcess.push(list[i])
}
// console.log('realllll');
buildRealProcess()
var tbody_tr = createProcessTable(true);
var tbody = '\
\
应用名称 | \
PID | \
线程 | \
用户 | \
CPU | \
内存 | \
io读 | \
io写 | \
上行 | \
下行 | \
连接 | \
状态 | \
操作 | \
\
\
' + tbody_tr + ''
$('#taskResourceTable').html(tbody);
$(".table-cont").css("height", "220px");
})
$("#load_average").html('')
}
//查看计划任务列表
function get_cron_list() {
var loadT = layer.msg('获取计划任务列表..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_cron_list', {search:search_val}, function(rdata){
layer.close(loadT);
var tbody_tr = '';
for (var i = 0; i < rdata.length; i++) {
tbody_tr += '\
' + rdata[i].cycle + ' | \
' + rdata[i].exe + ' | \
' + rdata[i].ps + ' | \
删除 | \
';
}
var tbody = '\
\
周期 | \
执行 | \
描述 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
var topMsg = '';
$("#load_average").html(topMsg).hide();
$(".table-cont").css("height", "597px");
show_task();
});
}
//查看网络状态
function get_network_list(rflush) {
var loadT = layer.msg(lan.public.the_get, {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_network_list', {search:search_val}, function(rdata){
layer.close(loadT);
if (rdata.data['is_mac']){
tbody_tr += "mac无法使用 |
";
tbody = "\
\
" + lan.index.net_protocol + " | \
" + lan.index.net_address_dst + " | \
" + lan.index.net_address_src + " | \
" + lan.index.net_address_status + "? | \
" + lan.index.net_process + " | \
" + lan.index.net_process_pid + " | \
\
\
" + tbody_tr + "";
$("#TaskManagement").html(tbody);
show_task();
return;
}
var rdata = rdata.data;
var tbody_tr = "";
for (var i = 0; i < rdata.list.length; i++) {
tbody_tr += ""
+ "" + rdata.list[i].type + " | "
+ "" + rdata.list[i].laddr[0] + ":" + rdata.list[i].laddr[1] + " | "
+ "" + (rdata.list[i].raddr.length > 1 ? "" + rdata.list[i].raddr[0] + ":" + rdata.list[i].raddr[1] : 'NONE') + " | "
+ "" + rdata.list[i].status + " | "
+ "" + rdata.list[i].process + " | "
+ "" + rdata.list[i].pid + " | "
+ "
";
}
tbody = "\
\
" + lan.index.net_protocol + " | \
" + lan.index.net_address_dst + " | \
" + lan.index.net_address_src + " | \
" + lan.index.net_address_status + "? | \
" + lan.index.net_process + " | \
" + lan.index.net_process_pid + " | \
\
\
" + tbody_tr + "";
$("#TaskManagement").html(tbody);
var topMsg = '\
\
总发送:' + toSize(rdata.state.upTotal) + '
\
总接收:' + toSize(rdata.state.downTotal) + '
\
\
\
上行:' + toSize(rdata.state.up) + '
\
下行:' + toSize(rdata.state.down) + '
\
\
\
总发包:' + to_max(rdata.state.upPackets) + '
\
总收包:' + to_max(rdata.state.downPackets) + '
\
\
\
包发送/秒:' + to_max(rdata.state.upPackets_s) + '
\
包接收/秒:' + to_max(rdata.state.downPackets_s) + '
\
\
';
$("#load_average").html(topMsg).show();
$(".table-cont").css("height", "500px");
show_task();
});
}
function to_max(num) {
if (num > 10000) {
num = num / 10000;
if (num > 10000) {
num = num / 10000;
return num.toFixed(5) + ' 亿';
}
return num.toFixed(5) + ' 万';
}
return num;
}
//获取会话列表
function get_who_list() {
var loadT = layer.msg('正在获取用户会话列表..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_who', {search:search_val}, function(data){
layer.close(loadT);
var rdata = data.data;
var tbody_tr = '';
for (var i = 0; i < rdata.length; i++) {
tbody_tr += '\
' + rdata[i].user + ' | \
' + rdata[i].pts + ' | \
' + rdata[i].ip + ' | \
' + rdata[i].date + ' | \
强制断开 | \
';
}
var tbody = '\
\
用户 | \
PTS | \
登陆IP | \
登陆时间 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
var topMsg = '';
$("#load_average").html(topMsg).hide();
$(".table-cont").css("height", "597px");
show_task();
});
}
//获取启动列表
function get_run_list() {
var loadT = layer.msg('正在获取启动项列表..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_run_list', {search:search_val}, function(rdata){
layer.close(loadT);
if (rdata.data['is_mac']){
tbody_tr += "mac无法使用 |
";
var tbody = '\
\
名称 | \
启动路径 | \
文件大小 | \
文件权限 | \
描述 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
return;
}
var rdata = rdata.data;
var tbody_tr = '';
for (var i = 0; i < rdata.run_list.length; i++) {
tbody_tr += '\
' + rdata.run_list[i].name + ' | \
' + rdata.run_list[i].srcfile + ' | \
' + toSize(rdata.run_list[i].size) + ' | \
' + rdata.run_list[i].access + ' | \
' + rdata.run_list[i].ps + ' | \
编辑 | \
';
}
var tbody = '\
\
名称 | \
启动路径 | \
文件大小 | \
文件权限 | \
描述 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
var topMsg = '当前运行级别: level-' + rdata.run_level + '
? ';
$("#load_average").html(topMsg).show();
$(".table-cont").css("height", "500px");
show_task();
});
}
//获取服务列表
function get_service_list() {
var loadT = layer.msg('正在获取服务列表..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_service_list', {search:search_val}, function(rdata){
layer.close(loadT);
if (rdata.data['is_mac']){
tbody_tr += "mac无法使用 |
";
var tbody = '\
\
名称 | \
Level-0 | \
Level-1 | \
Level-2 | \
Level-3 | \
Level-4 | \
Level-5 | \
Level-6 | \
描述 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
return;
}
var rdata = rdata.data;
var tbody_tr = '';
for (var i = 0; i < rdata.serviceList.length; i++) {
tbody_tr += '\
' + rdata.serviceList[i].name + ' | \
' + rdata.serviceList[i].runlevel_0 + ' | \
' + rdata.serviceList[i].runlevel_1 + ' | \
' + rdata.serviceList[i].runlevel_2 + ' | \
' + rdata.serviceList[i].runlevel_3 + ' | \
' + rdata.serviceList[i].runlevel_4 + ' | \
' + rdata.serviceList[i].runlevel_5 + ' | \
' + rdata.serviceList[i].runlevel_6 + ' | \
' + rdata.serviceList[i].ps + ' | \
删除 | \
';
}
var tbody = '\
\
名称 | \
Level-0 | \
Level-1 | \
Level-2 | \
Level-3 | \
Level-4 | \
Level-5 | \
Level-6 | \
描述 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
var topMsg = '当前运行级别: level-' + rdata.runlevel + '
? ';
$("#load_average").html(topMsg).show();
$(".table-cont").css("height", "500px");
show_task();
});
}
//取用户列表
function get_user_list() {
var loadT = layer.msg('正在获取用户列表..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_user_list', {search:search_val}, function(data){
layer.close(loadT);
var rdata = data.data;
var tbody_tr = '';
for (var i = 0; i < rdata.length; i++) {
tbody_tr += '\
' + rdata[i].username + ' | \
' + rdata[i].home + ' | \
' + rdata[i].group + ' | \
' + rdata[i].uid + ' | \
' + rdata[i].gid + ' | \
' + rdata[i].login_shell + ' | \
' + rdata[i].ps + ' | \
删除 | \
';
}
var tbody = '\
\
用户名 | \
home | \
用户组 | \
uid | \
gid | \
登陆脚本? | \
描述 | \
操作 | \
\
\
' + tbody_tr + '';
$("#TaskManagement").html(tbody);
var topMsg = '';
$("#load_average").html(topMsg).hide();
$(".table-cont").css("height", "597px");
show_task();
});
}
//删除用户
function userdel(user) {
safeMessage('删除用户【' + user + '】', '删除后可能导致您的环境无法正常运行,继续吗?', function () {
var loadT = layer.msg('正在删除用户[' + user + ']..', {icon: 16, time: 0, shade: [0.3, '#000']});
$.post('/plugin?action=a&name=task_manager&s=remove_user', {user: user}, function (rdata) {
layer.close(loadT);
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
if (rdata.status) get_user_list();
});
});
}
//结束进程
function kill_process(pid, fpid) {
if (fpid) {
select_pid = fpid;
}
var w = layer.confirm('您是否要结束 (' + pid + ') 进程?', {
btn: ['结束', '取消'], //按钮
title: '结束' + pid,
closeBtn: 2
}, function () {
var loadT = layer.msg('正在结束进程[' + pid + ']..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('kill_process', {pid:pid}, function(data){
layer.close(loadT);
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
if (rdata.status) {
get_process_list();
}
});
}, function () {
layer.close(w);
})
}
//结束进程树
function kill_process_all(pid) {
var w = layer.confirm('您是否要结束 (' + pid + ') 进程?', {
btn: ['结束', '取消'], //按钮
title: '结束' + pid,
closeBtn: 2
}, function () {
var loadT = layer.msg('正在结束父进程[' + pid + ']..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('kill_process_all', {pid:pid}, function(data){
layer.close(loadT);
var rdata = data.data;
showMsg(rdata.msg, function(){
if (rdata.status) {
get_process_list();
}
},{icon: rdata.status ? 1 : 2});
});
}, function () {
layer.close(w);
});
}
//打开文件所在位置
function open_path(path) {
var tmp = path.split('/');
tmp[tmp.length - 1] = '';
var path = '/' + tmp.join('/');
openPath(path);
}
//删除服务
function remove_service(serviceName) {
safeMessage('删除服务【' + serviceName + '】', '删除后可能导致您的环境无法正常运行,继续吗?', function () {
var loadT = layer.msg('正在删除服务[' + serviceName + ']..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('remove_service', {serviceName:serviceName}, function(data){
layer.close(loadT);
showMsg(rdata.msg, function(){
if (rdata.status){
get_service_list();
}
},{icon: rdata.status ? 1 : 2})
});
});
}
//在线编辑文件
function online_edit_file(fileName) {
onlineEditFile(0, fileName);
}
//删除计划任务
function remove_cron(index) {
safeMessage('删除计划任务[' + index + ']', '删除后将无法恢复,继续吗?', function () {
var loadT = layer.msg('正在删除计划任务..', {icon: 16, time: 0, shade: [0.3, '#000']});
$.post('/plugin?action=a&name=task_manager&s=remove_cron', {index: index}, function (rdata) {
layer.close(loadT);
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
if (rdata.status) get_cron_list();
});
});
}
//强制断开会话
function pkill_session(pts) {
safeMessage('强制断开会话[' + pts + ']', '强制断开此会话吗?', function () {
var loadT = layer.msg('正在断开会话..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('pkill_session', {pts:pts}, function(data){
layer.close(loadT);
var rdata = data.data;
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
if (rdata.status){
get_who_list();
}
});
});
}
//设置服务启动级别状态
function set_runlevel_state(runlevel, serviceName) {
var loadT = layer.msg('正在设置服务[' + serviceName + ']..', {icon: 16, time: 0, shade: [0.3, '#000']});
$.post('/plugin?action=a&name=task_manager&s=set_runlevel_state', {
runlevel: runlevel,
serviceName: serviceName
}, function (rdata) {
layer.close(loadT);
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
if (rdata.status) get_service_list();
});
}
//查看进程详情
function get_process_info(pid) {
var loadT = layer.msg('正在获取进程信息[' + pid + ']..', {icon: 16, time: 0, shade: [0.3, '#000']});
tmPostCallback('get_process_info', {pid:pid}, function(data){
// console.log('get_process_info',data);
layer.close(loadT);
var rdata = data.data;
fileBody = '';
for (var i = 0; i < rdata.open_files.length; i++) {
fileBody += '' + rdata.open_files[i].path + ' | \
' + rdata.open_files[i].mode + ' | \
' + rdata.open_files[i].position + ' | \
' + rdata.open_files[i].flags + ' | \
' + rdata.open_files[i].fd + ' | \
';
}
var cbody = '\
\
\
\
\
名称 | ' + rdata.name + ' | \
PID | ' + rdata.pid + ' | \
状态 | ' + rdata.status + ' | \
\
\
父进程 | ' + rdata.pname + '(' + rdata.ppid + ') | \
用户 | ' + rdata.user + ' | \
线程 | ' + rdata.threads + ' | \
\
\
Socket | ' + rdata.connects + ' | \
io读 | ' + toSize(rdata.io_read_bytes) + ' | \
io写 | ' + toSize(rdata.io_write_bytes) + ' | \
\
\
启动时间 | ' + getLocalTime(rdata.create_time) + ' | \
描述 | ' + rdata.ps + ' | \
\
\
启动命令 | ' + rdata.comline.join(" ") + ' | \
\
\
\
\
内存
\
\
\
\
\
rss | ' + toSize(rdata.memory_full.rss) + ' | \
pss | ' + toSize(rdata.memory_full.pss) + ' | \
uss | ' + toSize(rdata.memory_full.uss) + ' | \
\
\
vms | ' + toSize(rdata.memory_full.vms) + ' | \
swap | ' + toSize(rdata.memory_full.swap) + ' | \
shared | ' + toSize(rdata.memory_full.shared) + ' | \
\
\
data | ' + toSize(rdata.memory_full.data) + ' | \
text | ' + toSize(rdata.memory_full.text) + ' | \
dirty | ' + toSize(rdata.memory_full.dirty) + ' | \
\
\
\
\
打开的文件列表
\
\
\
\
\
\
文件 | \
mode | \
position | \
flags | \
fd | \
\
\
' + fileBody + '\
\
\
\
\
\
\
\
';
TaskProcessLayerIndex = layer.open({
type: 1,
title: '进程属性[' + rdata.name + '] -- ' + rdata.exe,
area: '750px',
closeBtn: 2,
shadeClose: false,
content: cbody
});
show_jc_flie();
});
}
//屏蔽指定IP
function dropAddress(address) {
layer.confirm(lan.index.net_doup_ip_msg, {icon: 3, closeBtn: 2}, function () {
loadT = layer.msg(lan.index.net_doup_ip_to, {icon: 16, time: 0, shade: [0.3, '#000']});
$.post('/firewall?action=AddDropAddress', 'port=' + address + '&ps=' + lan.index.net_doup_ip_ps, function (rdata) {
layer.close(loadT);
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
});
});
}
function show_task() {
$(".ts-line").width($("#TaskManagement").width());
$("#TaskManagement tbody td").click(function () {
// console.log('---');
$(this).parents("tr").addClass("active").siblings().removeClass("active");
});
var tableCont = document.querySelector('#table-cont');
//表格固定
var sct = tableCont.scrollTop;
tableCont.querySelector('thead').style.transform = 'translateY(' + sct + 'px)';
tableCont.addEventListener('scroll', scrollHandle);
}
function show_jc_flie() {
var tableJc = document.querySelector('#jc-file-table');
//文件表格固定
tableJc.addEventListener('scroll', scrollHandle);
}
function scrollHandle(e) {
var scrollTop = this.scrollTop;
this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)';
}
var masterPluginTitle = $('.TaskManView').parents('.layui-layer');
// masterPluginTitle.append('');
masterPluginTitle.on('click', '.bt-desired', function(){
bt_tools.nps({name:'任务管理器',type:26})
})