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 = '
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
名称模式端口状态重启时间CPU内存目录操作
\
'; $(".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 += ''; } } var con = '
\ 当前版本\ \
    \
  • 当前版本为['+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].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 pm2RollingLogs(func,pname){ var args = {'pname':pname} _args = JSON.stringify(args); pluginRollingLogs('pm2','',func, _args); } function nodeLog(pname){ var html = ''; html += ''; html += ''; html += ''; html += ''; var loadOpen = layer.open({ type: 1, title: '日志', area: '240px', content:'
'+html+'
' }); } function nodeLogClearRun(pname){ var data = 'pname=' + pname; pm2Post('node_log_clear_run', data, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); }); } function nodeLogClearError(pname){ var data = 'pname=' + pname; pm2Post('node_log_clear_err', data, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); }); }