基本功能OK

pull/109/head
midoks 6 years ago
parent 2419e39117
commit 3a81e3392b
  1. 2
      plugins/pm2/index.html
  2. 79
      plugins/pm2/index.py
  3. 6
      plugins/pm2/install.sh
  4. 105
      plugins/pm2/js/pm2.js

@ -3,7 +3,7 @@
<div class="bt-w-menu"> <div class="bt-w-menu">
<p class="bgw" onclick="pm2List();">项目列表</p> <p class="bgw" onclick="pm2List();">项目列表</p>
<p onclick="getNodeVersions();">Node版本</p> <p onclick="getNodeVersions();">Node版本</p>
<p onclick="redisStatus();">模版管理</p> <p onclick="getModList();">模版管理</p>
<p onclick="pluginLogs('pm2', '','get_logs');">日志管理</p> <p onclick="pluginLogs('pm2', '','get_logs');">日志管理</p>
</div> </div>
<div class="bt-w-con pd15"> <div class="bt-w-con pd15">

@ -75,8 +75,8 @@ def pm2NVMDir():
__SR = '''#!/bin/bash __SR = '''#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH export PATH
export HOME=/root export HOME=%s
source %s/nvm.sh && ''' % pm2NVMDir() source %s/nvm.sh && ''' % (getServerDir(), pm2NVMDir())
__path = getServerDir() + '/list' __path = getServerDir() + '/list'
@ -230,11 +230,76 @@ def pm2VerList():
# print cmd # print cmd
tmp = public.execShell(cmd) tmp = public.execShell(cmd)
result['list'] = re.findall(rep, tmp[0]) result['list'] = re.findall(rep, tmp[0])
tmp = public.execShell("nvm version") tmp = public.execShell(__SR + "nvm version")
result['version'] = tmp[0].strip() result['version'] = tmp[0].strip()
return public.returnJson(True, 'ok', result) return public.returnJson(True, 'ok', result)
def setNodeVersion():
args = getArgs()
data = checkArgs(args, ['version'])
if not data[0]:
return data[1]
# 切换Node版本
version = args['version'].replace('v', '')
estr = '''
export NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node && nvm install %s
nvm use %s
nvm alias default %s
oldreg=`npm get registry`
npm config set registry http://registry.npm.taobao.org/
npm install pm2 -g
npm config set registry $oldreg
''' % (version, version, version)
cmd = __SR + estr
public.execShell(cmd)
return public.returnJson(True, '已切换至[' + version + ']')
def getMod():
cmd = __SR + "npm list --depth=0 -global"
tmp = public.execShell(cmd)
modList = tmp[0].replace("", "").replace("", "").replace(
"", "").replace("", "").replace("", "").strip().split()
result = []
for m in modList:
mod = {}
tmp = m.split('@')
if len(tmp) < 2:
continue
mod['name'] = tmp[0]
mod['version'] = tmp[1]
result.append(mod)
return public.returnJson(True, 'OK', result)
# 安装库
def installMod():
args = getArgs()
data = checkArgs(args, ['mname'])
if not data[0]:
return data[1]
mname = args['mname']
public.execShell(__SR + 'npm install ' + mname + ' -g')
return public.returnJson(True, '安装成功!')
def uninstallMod():
args = getArgs()
data = checkArgs(args, ['mname'])
if not data[0]:
return data[1]
mname = args['mname']
myNot = ['pm2', 'npm']
if mname in myNot:
return public.returnJson(False, '不能卸载[' + mname + ']')
public.execShell(__SR + 'npm uninstall ' + mname + ' -g')
return public.returnJson(True, '卸载成功!')
if __name__ == "__main__": if __name__ == "__main__":
func = sys.argv[1] func = sys.argv[1]
if func == 'status': if func == 'status':
@ -257,5 +322,13 @@ if __name__ == "__main__":
print pm2Log() print pm2Log()
elif func == 'versions': elif func == 'versions':
print pm2VerList() print pm2VerList()
elif func == 'set_node_version':
print setNodeVersion()
elif func == 'mod_list':
print getMod()
elif func == 'install_mod':
print installMod()
elif func == 'uninstall_mod':
print uninstallMod()
else: else:
print 'error' print 'error'

@ -11,12 +11,12 @@ serverPath=$(dirname "$rootPath")
install_tmp=${rootPath}/tmp/bt_install.pl install_tmp=${rootPath}/tmp/bt_install.pl
npm install pm2 -g
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
Install_pm2() Install_pm2()
{ {
echo '正在安装脚本文件...' > $install_tmp echo '正在安装脚本文件...' > $install_tmp
npm install pm2 -g
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
mkdir -p $serverPath/pm2 mkdir -p $serverPath/pm2
echo '1.0' > $serverPath/pm2/version.pl echo '1.0' > $serverPath/pm2/version.pl
echo '安装完成' > $install_tmp echo '安装完成' > $install_tmp

@ -117,8 +117,10 @@ function getNodeVersions(){
}); });
pm2Post('versions', '', function(data){ pm2Post('versions', '', function(data){
console.log(data);
return; var rdata = $.parseJSON(data.data);
console.log(rdata);
var versions = rdata.data;
var opt = ''; var opt = '';
for(var i=0;i<versions.list.length;i++){ for(var i=0;i<versions.list.length;i++){
@ -130,18 +132,111 @@ function getNodeVersions(){
} }
var con = '<div class="divtable" style="width: 620px;">\ var con = '<div class="divtable" style="width: 620px;">\
<span>当前版本</span><select style="margin-left: 5px;width:100px;" class="bt-input-text" name="versions">'+opt+'</select>\ <span>当前版本</span><select style="margin-left: 5px;width:100px;" class="bt-input-text" name="versions">'+opt+'</select>\
<button style="margin-bottom: 3px;margin-left: 5px;" class="btn btn-success btn-sm" onclick="SetNodeVersion()">切换版本</button>\ <button style="margin-bottom: 3px;margin-left: 5px;" class="btn btn-success btn-sm" onclick="setNodeVersion()">切换版本</button>\
<ul class="help-info-text c7 mtb15">\ <ul class="help-info-text c7 mtb15">\
<li>当前版本为<font style="color:red;">['+versions.version+']</font></li>\ <li>当前版本为<font style="color:red;">['+versions.version+']</font></li>\
<li>版本切换是全局的,切换版本后可能影响您正在运行的项目</li>\ <li>版本切换是全局的,切换版本后可能影响您正在运行的项目</li>\
</ul>\ </ul>\
</div>'; </div>';
// $("#webEdit-con").html(con);
$(".soft-man-con").html(con); $(".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 = '<div class="divtable" style="width: 620px;">\
<input class="bt-input-text mr5" name="mname" type="text" value="" style="width:240px" placeholder="模块名称" />\
<button class="btn btn-default btn-sm va0" onclick="installMod();">安装</button>\
<table class="table table-hover" style="margin-top: 10px; max-height: 380px; overflow: auto;">\
<thead>\
<tr>\
<th>名称</th>\
<th>版本</th>\
<th style="text-align: right;">操作</th>\
</tr>\
</thead>\
<tbody id="modlist"></tbody>\
</table>\
<ul class="help-info-text c7 mtb15">\
<li>此处安装的模块均为安装到全局.</li>\
<li>仅安装到当前正在使用的nodejs版本.</li>\
</ul>\
</div>';
$(".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.length;i++){
tbody += '<tr>\
<td>'+tmp[i].name+'</td>\
<td>'+tmp[i].version+'</td>\
<td style="text-align: right;">\
<a href="#" class="btlink" onclick="uninstallMod(\''+tmp[i].name+'\')">卸载</a>\
</td>\
</tr>';
}
$("#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(){ function addNode(){
var data = {path:$("input[name='path']").val(),pname:$("input[name='pname']").val(),run:$("input[name='run']").val()} var data = {path:$("input[name='path']").val(),pname:$("input[name='pname']").val(),run:$("input[name='run']").val()}
if(!data.path || !data.pname || !data.run){ if(!data.path || !data.pname || !data.run){

Loading…
Cancel
Save