function myPost(method,args,callback, title){ var _args = null; if (typeof(args) == 'string'){ _args = JSON.stringify(str2Obj(args)); } else { _args = JSON.stringify(args); } var _title = '正在获取...'; if (typeof(title) != 'undefined'){ _title = title; } var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 }); $.post('/plugins/run', {name:'supervisor', 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 supList(page, search){ var _data = {}; if (typeof(page) =='undefined'){ var page = 1; } _data['page'] = page; _data['page_size'] = 10; if(typeof(search) != 'undefined'){ _data['search'] = search; } myPost('get_sup_list', _data, function(data){ var rdata = $.parseJSON(data.data); // console.log(rdata.data); var list = ''; for(i in rdata.data){ list += ''; list += '' + rdata.data[i]['program'] +''; list += '' + rdata.data[i]['command'] +''; list += '' + rdata.data[i]['user'] +''; list += '' + rdata.data[i]['pid'] +''; list += '' + rdata.data[i]['numprocs'] +''; list += '' + rdata.data[i]['priority'] +''; list += '' + rdata.data[i]['runStatus'] +''; list += '' + rdata.data[i]['runStatus'] +''; list += '\ 启动 | ' + '修改 | ' + '删除' + ''; list += ''; } if(rdata.data.length==0){ list = "当前没有数据"; } var con = '
\ \
\
\ \ \ \ \ \ \ \ \ \ \ \ \ '+ list +'\
名称启动命令启动用户进程ID进程数量优先级进程管理状态操作
\
\
\
\
'; con += '
\ supervisord 常见进程状态详细如下:\ 1:STOPPED:该进程已停止。 2:STOPPING:由于停止请求,该进程正在停止。\ 3:RUNNING:该进程正在运行。 4:STARTING:该进程由于启动请求而开始。\ 5:FATAL:该进程无法成功启动。\ 6:BACKOFF:该进程进入“ 启动”状态,但随后退出的速度太快而无法移至“ 运行”状态。\
' $(".soft-man-con").html(con); $('#databasePage').html(rdata.page); }); } function startOrStop(name,status){ myPost('start_job',{'name':name,'status':status}, function(data){ var rdata = $.parseJSON(data.data); // console.log(data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); setTimeout(function(){ supList(1,10); },2000); }); } function updateJob(name){ myPost('get_job_info',{'name':name},function(data){ var rdata = $.parseJSON(data.data); // console.log(rdata); var defaultPath = $("#defaultPath").html(); var ulist = "
启动用户
"; layer.open({ type: 1, area: '500px', title: '修改守护进程', closeBtn: 2, shift: 0, shadeClose: false, btn: ['确定', '取消'], content: "
\
\ 名称\
\ \
\
\ "+ulist+"\
\ 进程数量\
\ \
\
\
\ 启动优先级\
\ \
\
\
", yes: function(index, layero){ // console.log(index,layero); var options = ['name','user','numprocs','priority']; var opval = {}; for(var i in options){ opval[options[i]] = $('[name="'+ options[i] +'"]').val(); if(opval[options[i]] == ''){ if(options[i] == 'user'){ layer.msg('启动用户不能为空'); return false; }else if(options[i] == 'priority'){ layer.msg('启动优先级不能为空'); return false; }else if(options[i] == 'numprocs'){ layer.msg('进程数量不能为空!'); return false; } } } var numprocs = $('[name=numprocs]').val(); if (!(/(^[1-9]\d*$)/.test(numprocs))) { layer.msg('进程数量请输入正整数') return false;   } myPost("update_job", opval, function(data){ rdata = $.parseJSON(data.data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); rdata.status ? layer.close(index):''; supList(1,10); }) return; } }); }); } //卸载软件 function delJob(name) { layer.confirm(msgTpl('是否删除守护进程[{1}]?', [name]), { icon: 3, closeBtn: 2 }, function() { /////////////////////////////////////// var data = {'name': name}; var loadT = layer.msg('正在处理,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] }); myPost('del_job', data, function(rdata){ layer.close(loadT) rdata = $.parseJSON(rdata.data); supList(1,10); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); /////////////////////////////////////// }); } //添加站点 function supAdd() { myPost('get_user_list',{},function(data){ var rdata = $.parseJSON(data.data); // console.log(rdata); var defaultPath = $("#defaultPath").html(); var ulist = "
启动用户
"; layer.open({ type: 1, area: '500px', title: '添加守护进程', closeBtn: 2, shift: 0, shadeClose: false, btn: ['确定', '取消'], content: "
\
\ 名称\
\ \
\
\ "+ulist+"\
\ 运行目录\
\ \ \
\
\
\ 启动命令\
\ \
\
\
\ 进程数量\
\ \
\
\ \
", yes: function(index, layero){ // console.log(index,layero); var options = ['name','user','path','command','numprocs']; var opval = {}; for(var i in options){ opval[options[i]] = $('[name="'+ options[i] +'"]').val(); if(opval[options[i]] == ''){ if(options[i] == 'name'){ layer.msg('进程名称不能为空'); return false; }else if(options[i] == 'user'){ layer.msg('启动用户不能为空'); return false; }else if(options[i] == 'path'){ layer.msg('运行目录不能为空'); return false; }else if(options[i] == 'command'){ layer.msg('启动命令不能为空'); return false; }else if(options[i] == 'numprocs'){ layer.msg('进程数量不能为空!'); return false; } } } var numprocs = $('[name=numprocs]').val(); if (!(/(^[1-9]\d*$)/.test(numprocs))) { layer.msg('进程数量请输入正整数') return false;   } myPost("add_job", opval, function(data){ rdata = $.parseJSON(data.data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); rdata.status ? layer.close(index):''; supList(1,10); }) return; } }); }); } //supervisor function supConfigTpl(_name, version, func, config_tpl_func, read_config_tpl_func){ if ( typeof(version) == 'undefined' ){ version = ''; } var func_name = 'conf'; if ( typeof(func) != 'undefined' ){ func_name = func; } var _config_tpl_func = 'config_tpl'; if ( typeof(config_tpl_func) != 'undefined' ){ _config_tpl_func = config_tpl_func; } var _read_config_tpl_func = 'read_config_tpl'; if ( typeof(read_config_tpl_func) != 'undefined' ){ _read_config_tpl_func = read_config_tpl_func; } var con = '

提示:Ctrl+F 搜索关键字,Ctrl+G 查找下一个,Ctrl+S 保存,Ctrl+Shift+R 查找替换!

\ \ \ \ '; $(".soft-man-con").html(con); function getFileName(file){ var list = file.split('/'); var f = list[list.length-1]; return f } var fileName = ''; $.post('/plugins/run',{name:_name, func:_config_tpl_func,version:version}, function(data){ var rdata = $.parseJSON(data.data); for (var i = 0; i < rdata.length; i++) { $('#config_tpl').append(''); } $('#config_tpl').change(function(){ var selected = $(this).val(); if (selected != '0'){ fileName = selected; var loadT = layer.msg('配置获取中...',{icon:16,time:0,shade: [0.3, '#000']}); var _args = JSON.stringify({file:selected}); $.post('/plugins/run', {name:_name, func:_read_config_tpl_func,version:version,args:_args}, function(data){ layer.close(loadT); var rdata = $.parseJSON(data.data); if (!rdata.status){ layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } $("#textBody").empty().text(rdata.data); $(".CodeMirror").remove(); var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { extraKeys: { "Ctrl-Space": "autocomplete", "Ctrl-F": "findPersistent", "Ctrl-H": "replaceAll", "Ctrl-S": function() { $("#textBody").text(editor.getValue()); pluginConfigSave(fileName); } }, lineNumbers: true, matchBrackets:true, }); editor.focus(); $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); $("#onlineEditFileBtn").unbind('click'); $("#onlineEditFileBtn").click(function(){ $("#textBody").text(editor.getValue()); pluginConfigSave(fileName); }); },'json'); } }); },'json'); var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']}); $.post('/plugins/run', {name:_name, func:func_name,version:version}, function (data) { layer.close(loadT); var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']}); fileName = data.data; $.post('/files/get_body', 'path=' + fileName, function(rdata) { layer.close(loadT2); if (!rdata.status){ layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } $("#textBody").empty().text(rdata.data.data); $(".CodeMirror").remove(); var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { extraKeys: { "Ctrl-Space": "autocomplete", "Ctrl-F": "findPersistent", "Ctrl-H": "replaceAll", "Ctrl-S": function() { $("#textBody").text(editor.getValue()); supConfigSave(fileName); } }, lineNumbers: true, matchBrackets:true, }); editor.focus(); $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); $("#onlineEditFileBtn").click(function(){ $("#textBody").text(editor.getValue()); supConfigSave(fileName); }); },'json'); },'json'); } //保存 function supConfigSave(fileName) { var data = encodeURIComponent($("#textBody").val()); var encoding = 'utf-8'; var loadT = layer.msg('保存中...', {icon: 16,time: 0}); $.post('/files/save_body', 'data=' + data + '&path=' + fileName + '&encoding=' + encoding, function(rdata) { layer.close(loadT); layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2}); },'json'); }