function str2Obj(str){
var data = {};
kv = str.split('&');
for(i in kv){
v = kv[i].split('=');
data[v[0]] = v[1];
}
return data;
}
function pm2Post(method,args,callback){
var _args = null;
if (typeof(args) == 'string'){
_args = JSON.stringify(str2Obj(args));
} else {
_args = JSON.stringify(args);
}
var loadT = layer.msg('正在获取中...', { icon: 16, time: 0, shade: 0.3 });
$.post('/plugins/run', {name:'pm2', func:method, args:_args}, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function pm2List() {
var con = '
';
$(".soft-man-con").html(con);
pm2Post('list','', function(data){
var rdata = $.parseJSON(data.data);
console.log(rdata);
if (!rdata['status']){
layer.msg(rdata['msg'],{icon:2,time:2000,shade: [0.3, '#000']});
return;
}
var tbody = '';
var tmp = rdata['data'];
for(var i=0;i启动 | ';
}else{
var opt = '停止 | ';
}
tmp[i].path = tmp[i].path.replace('//','');
var status = ' ';
if(tmp[i].status != 'online'){
status = ' ';
}
tbody += '\
'+tmp[i].name+' \
'+tmp[i].mode+' \
'+tmp[i].port+' \
'+status+' \
'+tmp[i].restart+' \
'+tmp[i].uptime+' \
'+tmp[i].cpu+' \
'+tmp[i].mem+' \
打开 \
\
'+opt+'日志 | 删除 \
\
';
}
$("#pmlist").html(tbody);
});
}
//取版本号列表
function getNodeVersions(){
var loadT = layer.msg('正在获取版本列表...',{icon:16,time:0,shade: [0.3, '#000']});
$.get('/plugin?action=a&s=Versions&name=pm2',function(versions){
layer.close(loadT);
});
pm2Post('versions', '', function(data){
var rdata = $.parseJSON(data.data);
var versions = rdata.data;
var opt = '';
for(var i=0;i'+versions.list[i]+'';
}else{
opt += ''+versions.list[i]+' ';
}
}
var con = '\
当前版本 '+opt+' \
切换版本 \
\
当前版本为['+versions.version+'] \
版本切换是全局的,切换版本后可能影响您正在运行的项目 \
\
';
$(".soft-man-con").html(con);
});
}
//切换版本
function setNodeVersion(){
var version = $("select[name='versions']").val();
var data = "version="+version;
pm2Post('set_node_version', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status) {
getNodeVersions();
}
});
}
//取模块列表
function getModList(){
var con = '\
\
安装 \
\
\
此处安装的模块均为安装到全局. \
仅安装到当前正在使用的nodejs版本. \
\
';
$(".soft-man-con").html(con);
pm2Post('mod_list', '', function(data){
var rdata = $.parseJSON(data.data);
var tbody = '';
var tmp = rdata['data'];
for(var i=0;i\
'+tmp[i].name+' \
'+tmp[i].version+' \
\
卸载 \
\
';
}
$("#modlist").html(tbody);
});
}
//安装模块
function installMod(){
var mname = $("input[name='mname']").val();
if(!mname){
layer.msg('模块名称不能为空!',{icon:2});
return;
}
// var loadT = layer.msg('正在安装模块['+mname+']...',{icon:16,time:0,shade: [0.3, '#000']});
// $.post('/plugin?action=a&s=InstallMod&name=pm2',data,function(rdata){
// layer.close(loadT);
// layer.msg(rdata.msg,{icon:rdata.status?1:2});
// if(rdata.status) GetModList();
// });
var data = {mname:mname};
pm2Post('install_mod', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status) {
getModList();
}
});
}
function uninstallMod(mname){
safeMessage('卸载模块['+mname+']','卸载['+mname+']模块后,可能影响现有项目,继续吗?',function(){
var data = "mname="+mname;
pm2Post('uninstall_mod', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status) {
getModList();
}
});
});
}
function addNode(){
var data = {path:$("input[name='path']").val(),pname:$("input[name='pname']").val(),run:$("input[name='run']").val()}
if(!data.path || !data.pname || !data.run){
layer.msg('表单不完整,请检查!',{icon:2});
return;
}
pm2Post('add', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
pm2List();
});
}
function delNode(pname){
safeMessage('删除项目['+pname+']','删除['+pname+']项目后,该项目将无法被访问,继续吗?',function(){
var data = "pname="+pname;
pm2Post('delete', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
pm2List();
});
});
}
function nodeStop(pname){
var data = 'pname=' + pname;
pm2Post('stop', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
pm2List();
});
}
function nodeStart(pname){
var data = 'pname=' + pname;
pm2Post('start', data, function(data){
var rdata = $.parseJSON(data.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
pm2List();
});
}
function nodeLog(pname){
var html = '';
html += '运行日志 ';
html += '清空运行日志 ';
html += '错误日志 ';
html += '清空错误日志 ';
var loadOpen = layer.open({
type: 1,
title: '日志',
area: '240px',
content:''+html+'
'
});
}
function nodeLogError(pname){
}