From 9a3a903f009968de5aa9613b9e2f90bd0a446c70 Mon Sep 17 00:00:00 2001 From: Unitech Date: Sun, 5 Jun 2016 14:13:48 +0200 Subject: [PATCH] refactor web interface with client --- lib/Client.js | 1 + lib/HttpInterface.js | 101 ++++++++++++++++++++----------------------- 2 files changed, 49 insertions(+), 53 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index e0e8478e..47af4375 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -34,6 +34,7 @@ var Client = module.exports = function(opts) { Client.prototype.__proto__ = EventEmitter.prototype; // @breaking change (noDaemonMode has been drop) +// @todo ret err Client.prototype.start = function(cb) { var that = this; diff --git a/lib/HttpInterface.js b/lib/HttpInterface.js index efb91fa3..567860a7 100644 --- a/lib/HttpInterface.js +++ b/lib/HttpInterface.js @@ -3,64 +3,59 @@ * Use of this source code is governed by a license that * can be found in the LICENSE file. */ -// -// PM2 Monit and Server web interface -// Disserve JSON in light way -// by Strzelewicz Alexandre -// +var http = require('http'); +var os = require('os'); +var Client = require('./Client'); +var urlT = require('url'); +var cst = require('../constants.js'); -var http = require('http'); -var os = require('os'); -var Satan = require('./Satan'); -var urlT = require('url'); -var cst = require('../constants.js'); +var client = new Client(); -// Start daemon -// -// Usually it would be is started in the parent process already, -// but if I run "node HttpInterface" directly, I would probably -// like it to be not daemonized -Satan.start(true); +client.start(function() { + startWebServer(client); +}); -http.createServer(function (req, res) { - // Add CORS headers to allow browsers to fetch data directly - res.setHeader('Access-Control-Allow-Origin', '*'); - res.setHeader('Access-Control-Allow-Headers', 'Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With'); - res.setHeader('Access-Control-Allow-Methods', 'GET'); +function startWebServer(client) { + http.createServer(function (req, res) { + // Add CORS headers to allow browsers to fetch data directly + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Headers', 'Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With'); + res.setHeader('Access-Control-Allow-Methods', 'GET'); - // We always send json - res.setHeader('Content-Type','application/json'); + // We always send json + res.setHeader('Content-Type','application/json'); - var path = urlT.parse(req.url).pathname; + var path = urlT.parse(req.url).pathname; -// console.log('Access on PM2 monit point %s', path); + if (path == '/') { + // Main monit route + client.executeRemote('getMonitorData', {}, function(err, data_proc) { + var data = { + system_info: { hostname: os.hostname(), + uptime: os.uptime() + }, + monit: { loadavg: os.loadavg(), + total_mem: os.totalmem(), + free_mem: os.freemem(), + cpu: os.cpus(), + interfaces: os.networkInterfaces() + }, + processes: data_proc + }; - - if (path == '/') { - // Main monit route - Satan.executeRemote('getMonitorData', {}, function(err, data_proc) { - var data = { - system_info: { hostname: os.hostname(), - uptime: os.uptime() - }, - monit: { loadavg: os.loadavg(), - total_mem: os.totalmem(), - free_mem: os.freemem(), - cpu: os.cpus(), - interfaces: os.networkInterfaces() - }, - processes: data_proc - }; - - res.statusCode = 200; - res.write(JSON.stringify(data)); + res.statusCode = 200; + res.write(JSON.stringify(data)); + return res.end(); + }); + } + else { + // 404 + res.statusCode = 404; + res.write(JSON.stringify({err : '404'})); return res.end(); - }); - } - else { - // 404 - res.statusCode = 404; - res.write(JSON.stringify({err : '404'})); - return res.end(); - } -}).listen(cst.WEB_INTERFACE); + } + }).listen(cst.WEB_INTERFACE, function() { + console.log('Web interface listening on port %s', cst.WEB_INTERFACE); + }); + +}