Skip to content

Commit

Permalink
refactor: web server
Browse files Browse the repository at this point in the history
  • Loading branch information
Tjatse committed Dec 8, 2016
1 parent b0d72f5 commit 7e38c79
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 40 deletions.
33 changes: 20 additions & 13 deletions lib/util/router.js
Original file line number Diff line number Diff line change
@@ -1,39 +1,46 @@
'use strict'

var path = require('path')
var _ = require('lodash')
var fs = require('fs')

var regJs = /\.js$/
var regMain = /^(index|main|home)$/
var routes = []
var namespace = ''

// bind actions.
global.action = function (method, path, func) {
if (typeof method === 'function') {
if (_.isFunction(method)) {
func = method
method = 'get'
path = func.name
} else if (typeof path === 'function') {
} else if (_.isFunction(path)) {
func = path
path = func.name
}
if (typeof method !== 'string' || typeof path !== 'string' || typeof func !== 'function') {
if (!_.isString(method) || !_.isString(path) || !_.isFunction(func)) {
throw new Error('Arguments of action() should be one of `[FUNCTION]` / `[METHOD], [FUNCTION]` / `[METHOD], [PATH], [FUNCTION]`.')
}
routes.push({
method: method,
path: '/' + (!!~['index', 'home', 'main'].indexOf(__route_root) ? '' : __route_root) + (path ? '/' + path : ''), // eslint-disable-line no-extra-boolean-cast, no-undef
path: '/' + (regMain.test(namespace) ? '' : namespace) + (path ? '/' + path : ''),
fn: func
})
}

var _cwd = path.resolve(__dirname, '../../', 'web/routes')
var cwd = path.resolve(__dirname, '../../', 'web/routes')

// initialize.
module.exports = function (server) {
fs.readdirSync(_cwd).forEach(function (f) {
if (path.extname(f) !== '.js') {
return
}
global.__route_root = path.basename(f, '.js')
require(path.resolve(_cwd, f))
delete global.__route_root
})
fs.readdirSync(cwd)
.forEach(function (f) {
if (!f || !regJs.test(f)) {
return
}
namespace = path.basename(f, '.js')
require(path.resolve(cwd, f))
})
routes.forEach(function (route) {
route.path = route.path.replace(/\/+/g, '/')
server[route.method](route.path, route.fn)
Expand Down
6 changes: 3 additions & 3 deletions web/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
'use strict'

var express = require('express')
var session = require('express-session')
var path = require('path')
var http = require('http')
var router = require('../lib/util/router')

module.exports = runServer

function runServer (options) {
module.exports = function (options) {
var app = express()
app.set('view engine', 'jade')
app.set('views', path.join(__dirname, 'templates/views'))
Expand Down
66 changes: 42 additions & 24 deletions web/public/js/index.html.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,22 @@ var sysStat,
tmps = {},
eles = {},
NSP = {
SYS: '/sys',
PROC: '/proc',
LOG: '/log'
SYS: '/system',
LOG: '/log',
PROCESS: '/proccess'
},
SOCKET_EVENTS = {
ERROR: 'error',
CONNECT: 'connect',
CONNECT_ERROR: 'connect_error',
DATA: 'data',
DATA_PROCESSES: 'data.processes',
DATA_SYSTEM_STATS: 'data.sysstat',
DATA_PM2_VERSION: 'data.pm2version',
DATA_ACTION: 'data.action',
PULL_LOGS: 'pull.log',
PULL_PROCESS: 'pull.process',
PULL_ACTION: 'pull.action'
},
timer,
popupShown,
Expand Down Expand Up @@ -125,8 +138,8 @@ function connectSocketServer(ns) {
forceNew: true,
timeout: 3000
});
socket.on('error', onError);
socket.on('connect_error', onError);
socket.on(SOCKET_EVENTS.ERROR, onError);
socket.on(SOCKET_EVENTS.CONNECT_ERROR, onError);
return socket;
}

Expand All @@ -150,16 +163,16 @@ function listenSocket() {
sockets._root = connectSocketServer();
sockets.sys = connectSocketServer(NSP.SYS);
// information from server.
sockets.sys.on('info', info);
sockets.sys.on(SOCKET_EVENTS.ERROR, info);
// processes
sockets.sys.on('procs', onProcsChange);
sockets.sys.on(SOCKET_EVENTS.DATA_PROCESSES, onProcsChange);

// The first time to request system state.
sockets.sys.on('system_stat', onSysStat);
sockets.sys.on(SOCKET_EVENTS.DATA_SYSTEM_STATS, onSysStat);

function onSysStat(data) {
// Remove listen immediately.
sockets.sys.removeEventListener('system_stat', onSysStat);
sockets.sys.removeEventListener(SOCKET_EVENTS.DATA_SYSTEM_STATS, onSysStat);

// Store system states.
sysStat = data;
Expand Down Expand Up @@ -188,12 +201,12 @@ function listenSocket() {
$('.spinner').remove();
}

sockets.sys.on('pm2_ver', function(ver) {
sockets.sys.on(SOCKET_EVENTS.DATA_PM2_VERSION, function(ver) {
$('.repo > span').text('PM2 v' + ver);
});

// Show alert when stopping process by pm_id failed.
sockets.sys.on('action', function(id, errMsg) {
sockets.sys.on(SOCKET_EVENTS.DATA_ACTION, function(id, errMsg) {
info(errMsg);
$('#proc_' + id).find('.proc-ops').find('.load').fadeOut(function() {
$(this).prev().fadeIn().end().fadeOut(function() {
Expand Down Expand Up @@ -242,7 +255,7 @@ function renderFanavi() {
})
.load(icons)
.on('click', function(index, data) {
sockets.sys.emit('action', ['restart', 'stop', 'save', 'delete'][index], 'all');
sockets.sys.emit(SOCKET_EVENTS.PULL_ACTION, ['restart', 'stop', 'save', 'delete'][index], 'all');
});
}

Expand Down Expand Up @@ -393,7 +406,7 @@ function polarUsage() {
}

// When receiving data from server, refresh polar.
sockets.sys.on('system_stat', function(data) {
sockets.sys.on(SOCKET_EVENTS.DATA_SYSTEM_STATS, function(data) {
if (pageIndex != 1) {
return;
}
Expand Down Expand Up @@ -853,7 +866,7 @@ function procEvents() {
opacity: 1
});

sockets.sys.emit('action', method, pm_id);
sockets.sys.emit(SOCKET_EVENTS.PULL_ACTION, method, pm_id);
});
});
eles.procs.find('[data-toggle="tooltip"]').tooltip({
Expand Down Expand Up @@ -993,9 +1006,10 @@ function tailLogs() {
}
if (!sockets.log) {
sockets.log = connectSocketServer(NSP.LOG);
sockets.log.on('log', appendLogs);
sockets.log.on('connect', function() {
sockets.log.emit('tail', popupProc.pm_id);
sockets.log.on(SOCKET_EVENTS.ERROR, appendLogs);
sockets.log.on(SOCKET_EVENTS.DATA, appendLogs);
sockets.log.on(SOCKET_EVENTS.CONNECT, function() {
sockets.log.emit(SOCKET_EVENTS.PULL_LOGS, popupProc.pm_id);
});
} else {
sockets.log.connect();
Expand Down Expand Up @@ -1027,7 +1041,7 @@ function appendLogs(log) {
!scrolled && (scrolled = poffset < offset - 30);
scrollable = true;
}
$(log.msg).appendTo(lo);
$(log.msg || log.error).appendTo(lo);

if (scrollable) {
lo.parent().slimScroll({
Expand Down Expand Up @@ -1055,10 +1069,11 @@ function monitorProc() {
return;
}
if (!sockets.proc) {
sockets.proc = connectSocketServer(NSP.PROC);
sockets.proc.on('proc', appendData);
sockets.proc.on('connect', function() {
sockets.proc.emit('proc', popupProc.pid);
sockets.proc = connectSocketServer(NSP.PROCESS);
sockets.proc.on(SOCKET_EVENTS.ERROR, appendData);
sockets.proc.on(SOCKET_EVENTS.DATA, appendData);
sockets.proc.on(SOCKET_EVENTS.CONNECT, function() {
sockets.proc.emit(SOCKET_EVENTS.PULL_PROCESS, popupProc.pid);
});
} else {
sockets.proc.connect();
Expand Down Expand Up @@ -1089,8 +1104,8 @@ function appendData(proc) {
});
}
// handle error
if (proc.msg) {
delete proc.msg;
if (proc.error) {
delete proc.error;
proc.time = Date.now();
proc.usage = {
cpu: 0,
Expand Down Expand Up @@ -1150,6 +1165,9 @@ function info(msg) {
if (msg instanceof Error) {
msg = msg.message;
}
if (_.isObject(msg)) {
msg = msg.error
}
$.sticky({
body: msg,
icon: './img/info.png',
Expand Down

0 comments on commit 7e38c79

Please sign in to comment.