| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <!DOCTYPE html>
- <html>
- <head>
- <title>游戏进程管理面板</title>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <script type="text/javascript" src="/assets/js/vue.js"></script>
- <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
- <link type="text/css" rel="stylesheet" href="/assets/css/normalize.css" />
- <link type="text/css" rel="stylesheet" href="/assets/css/milligram.min.css" />
- <link type="text/css" rel="stylesheet" href="/assets/css/style.css" />
- </head>
- <body>
- <div class="container" id="app">
- <br />
- <div class="float-right">
- <a id="refresh" class="button button-primary"> 刷新 </a>
- <a href="/logout" class="button"> 注销 </a>
- </div>
- <h2>
- 欢迎进入游戏进程管理面板
- </h2>
- <br />
- <pre id="sysInfo"></pre>
- <table>
- <thead>
- <tr>
- <th>进程名</th>
- <th>序列</th>
- <th>进程编号</th>
- <th>状态</th>
- <th>重启次数</th>
- <th>启动时间</th>
- <th>CPU</th>
- <th>内存</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td colspan="9" id="loader">
- <img src="/assets/img/loader.gif" alt="[]" />
- </td>
- </tr>
- <tr v-for="process in processes">
- <td>{{process.name}}</td>
- <td>{{process.pm_id}}</td>
- <td>{{process.pid}}</td>
- <td>{{process.pm2_env.status}}</td>
- <td>{{process.pm2_env.restart_time}}</td>
- <td>{{ timing(now - process.pm2_env.pm_uptime)}}</td>
- <td>{{process.monit.cpu}}</td>
- <td>{{(process.monit.memory / (1024 * 1024 )).toFixed(2)}} MB</td>
- <td>
- <a :href="'/restart?id='+process.pm_id">
- [ 重启 ]
- </a>
-
- <a :href="'/delete?id='+process.pm_id" class="delete">
- [ 关闭 ]
- </a>
- <a :href="'/stop?id='+process.pm_id" v-if="process.pm2_env.status == 'online'">
- [ 停止 ]
- </a>
- <a :href="'/start?id='+process.pm_id" v-else="">
- [ 恢复 ]
- </a>
- <a :href="'/log?id='+process.pm_id">
- [ 日志 ]
- </a>
- <a :href="'/pinfo?id='+process.pm_id">
- [ 详情 ]
- </a>
- </td>
- </tr>
- </tbody>
- </table>
- <pre id="notification"></pre>
- <br />
- <br />
- <div class="button button-primary" id="frmCrtl">
- 显示/隐藏创建进程界面
- </div>
-
-
- <a href="/dump" class="button">
- 保存当前进程
- </a>
-
-
- <a href="/deleteall" class="button">
- 关闭所有进程
- </a>
-
-
- <a href="/flush" class="button">
- 清空日志
- </a>
- <br />
- <form action="/addProccess" method="POST" class="row" id="addForm">
- <div class="column">
- <label>
- 文件路径:
- <input type="text" name="path" v-model="choosedPath" />
- </label>
- <label>
- 附加参数:
- <input type="text" name="args" />
- </label>
- <input type="submit" value="运行" class="button" />
- </div>
- <!-- <div class="column">
- 文件列表:
- <br />
- (当前目录:<b> {{currentDir}} </b>)
- <ul id="folder-list">
- <li v-for="dir in folders">
- {{dir.name}}
- <span v-if="dir.name !== '..'">
- <a class="button button-small button-outline float-right explore" :href="dir.path+'/'">
- explore
- </a>
- <a class="button float-right select button-small button-outline" :href="dir.path">
- select
- </a>
- </span>
- <span v-else>
- <a class="button float-right button-small button-outline" :href="dir.path+'/'" id="back">
- explore
- </a>
- </span>
- <div class="clearfix"></div>
- </li>
- </ul>
- </div> -->
- </form>
- <a href="http://git.wxqiyou.com:9527" target="_blank"> 启游 © 2019 | 袁浩
- </a>
- <br />
- <br />
- </div>
- <script type="text/javascript">
- function GetData() {
- $.get('/getProccess', function (e) {
- var newDate = new Date();
- if (Array.isArray(e) !== true) {
- // if catch mean is session expired
- location.reload();
- return false;
- }
- vue.processes = e;
- // set now for calcalte uptime
- vue.now = Math.floor(newDate.getTime());
- $("#loader").slideUp(100);
- }).fail(function () {
- alert('获取数据出错:可能没有安装pm2(npm install pm2 -g),或者当前用户没有权限获取数据。'); // or whatever
- $("#loader").slideUp(100);
- });
- $("#addForm").slideUp(50);
- $.get('/folder', function (e) {
- vue.folders = e;
- });
- $.get('/notification', function (e) {
- if (e !== '-') {
- $("#notification").text(e).slideDown(300);
- }
- });
- $.get('/sysInfo', function (e) {
- $("#sysInfo").text(e).slideDown(300);
- });
- }
- var now = 0;
- vue = new Vue({
- el: '#app',
- data: {
- processes: [],
- folders: [],
- now: 0,
- currentDir: '/',
- choosedPath: '',
- },
- methods: {
- timing: function (sec) {
- var date = new Date(null);
- date.setSeconds(Math.floor(sec / 1000)); // specify value for SECONDS here
- return date.toISOString().substr(11, 8);
- }
- }
- });
- $(function () {
- GetData();
- $("#refresh").click(function () {
- $("#loader").slideDown(100);
- GetData();
- });
- $(document).on('click', ".select", function () {
- vue.choosedPath = $(this).attr('href');
- return false;
- });
- $(document).on('click', ".explore", function () {
- vue.currentDir = $(this).attr('href');
- $.get('/folder', { path: $(this).attr('href') }, function (e) {
- vue.folders = e;
- });
- return false;
- });
- $(document).on('click', "#back", function () {
- vue.currentDir = $(this).attr('href');
- $.get('/folder', { path: $(this).attr('href') }, function (e) {
- vue.folders = e;
- });
- return false;
- });
- $("#frmCrtl").click(function () {
- $("#addForm").slideToggle(300);
- });
- $(document).on('click', '.delete', function () {
- if (!confirm('确定要关闭这个进程吗?')) {
- return false;
- }
- });
- });
- </script>
- </body>
- </html>
|