From a8cc8e4b04b3718f436185094f8b50fa997a6bd0 Mon Sep 17 00:00:00 2001 From: calzoneman Date: Wed, 28 Oct 2015 23:38:17 -0700 Subject: [PATCH 1/4] Add more counters for diagnostic information --- src/counters.js | 11 ++++++++++- src/io/ioserver.js | 3 +++ src/web/webserver.js | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/counters.js b/src/counters.js index b72bbb55..c3f13f66 100644 --- a/src/counters.js +++ b/src/counters.js @@ -1,5 +1,7 @@ var Logger = require('./logger'); var counterLog = new Logger.Logger('counters.log'); +import os from 'os'; +import io from 'socket.io'; var counters = {}; @@ -16,6 +18,13 @@ exports.add = function (counter, value) { }; setInterval(function () { - counterLog.log(JSON.stringify(counters)); + try { + counters['memory:rss'] = process.memoryUsage().rss / 1048576; + counters['load:1min'] = os.loadavg()[0]; + counters['socket.io:count'] = io.instance.sockets.length; + counterLog.log(JSON.stringify(counters)); + } catch (e) { + Logger.errlog.log(e.stack); + } counters = {}; }, 60000); diff --git a/src/io/ioserver.js b/src/io/ioserver.js index 9ccf6bdd..30af3b18 100644 --- a/src/io/ioserver.js +++ b/src/io/ioserver.js @@ -14,6 +14,7 @@ var util = require("../utilities"); var crypto = require("crypto"); var isTorExit = require("../tor").isTorExit; var session = require("../session"); +import counters from '../counters'; var CONNECT_RATE = { burst: 5, @@ -77,6 +78,7 @@ function ipLimitReached(sock) { var ip = sock._realip; sock.on("disconnect", function () { + counters.add("socket.io:disconnect", 1); ipCount[ip]--; if (ipCount[ip] === 0) { /* Clear out unnecessary counters to save memory */ @@ -169,6 +171,7 @@ function handleConnection(sock) { } Logger.syslog.log("Accepted socket from " + ip); + counters.add("socket.io:accept", 1); addTypecheckedFunctions(sock); diff --git a/src/web/webserver.js b/src/web/webserver.js index a15d0d47..c83c3e74 100644 --- a/src/web/webserver.js +++ b/src/web/webserver.js @@ -16,6 +16,7 @@ var morgan = require("morgan"); var session = require("../session"); var csrf = require("./csrf"); var XSS = require("../xss"); +import counters from "../counters"; const LOG_FORMAT = ':real-address - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'; morgan.token('real-address', function (req) { return req._ip; }); @@ -187,6 +188,7 @@ module.exports = { */ init: function (app) { app.use(function (req, res, next) { + counters.add("http:request", 1); req._ip = ipForRequest(req); next(); }); From 44745d86acec00f59a50a21b84fa0c55abc2fee0 Mon Sep 17 00:00:00 2001 From: calzoneman Date: Thu, 29 Oct 2015 20:50:10 -0700 Subject: [PATCH 2/4] Fix for Wii U browser Apparently it doesn't send the login cookie if you explicitly set the socket.io transports to prefer websockets. Magic. --- templates/useroptions.jade | 3 --- www/js/callbacks.js | 1 - www/js/util.js | 17 ----------------- 3 files changed, 21 deletions(-) diff --git a/templates/useroptions.jade b/templates/useroptions.jade index 4a427b1d..43feea92 100644 --- a/templates/useroptions.jade +++ b/templates/useroptions.jade @@ -49,9 +49,6 @@ mixin us-general p.text-danger Changing layouts may require refreshing to take effect. mixin rcheckbox("us-no-channelcss", "Ignore Channel CSS") mixin rcheckbox("us-no-channeljs", "Ignore Channel Javascript") - .col-sm-4 - .col-sm-8 - p#us-conninfo.text-info Connection Information: .clear mixin us-scripts diff --git a/www/js/callbacks.js b/www/js/callbacks.js index e598e93b..e89341b2 100644 --- a/www/js/callbacks.js +++ b/www/js/callbacks.js @@ -1138,7 +1138,6 @@ setupCallbacks = function() { } var opts = { - transports: ["websocket", "polling"], secure: chosenServer.secure }; diff --git a/www/js/util.js b/www/js/util.js index 899b5a6c..605c6a71 100644 --- a/www/js/util.js +++ b/www/js/util.js @@ -624,23 +624,6 @@ function showUserOptions() { $("#us-layout").val(USEROPTS.layout); $("#us-no-channelcss").prop("checked", USEROPTS.ignore_channelcss); $("#us-no-channeljs").prop("checked", USEROPTS.ignore_channeljs); - var conninfo = "Connection Information: " + - "Connected to " + IO_URL + " ("; - if (IO_V6) { - conninfo += "IPv6, "; - } else { - conninfo += "IPv4, "; - } - - if (IO_URL === IO_URLS["ipv4-ssl"] || IO_URL === IO_URLS["ipv6-ssl"]) { - conninfo += "SSL)"; - } else { - conninfo += "no SSL)"; - } - - conninfo += ". SSL is enabled by default if it is supported by the server."; - $("#us-conninfo").html(conninfo); - $("#us-synch").prop("checked", USEROPTS.synch); $("#us-synch-accuracy").val(USEROPTS.sync_accuracy); From edcf17984fbf15815b710319dacf01abb8f5c84e Mon Sep 17 00:00:00 2001 From: calzoneman Date: Fri, 30 Oct 2015 22:25:00 -0700 Subject: [PATCH 3/4] Fix socket.io counters --- src/counters.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/counters.js b/src/counters.js index c3f13f66..13dbada1 100644 --- a/src/counters.js +++ b/src/counters.js @@ -2,6 +2,7 @@ var Logger = require('./logger'); var counterLog = new Logger.Logger('counters.log'); import os from 'os'; import io from 'socket.io'; +import Socket from 'socket.io/lib/socket'; var counters = {}; @@ -17,11 +18,17 @@ exports.add = function (counter, value) { } }; +Socket.prototype._packet = Socket.prototype.packet; +Socket.prototype.packet = function () { + this._packet.apply(this, arguments); + exports.add('socket.io:packet'); +}; + setInterval(function () { try { counters['memory:rss'] = process.memoryUsage().rss / 1048576; counters['load:1min'] = os.loadavg()[0]; - counters['socket.io:count'] = io.instance.sockets.length; + counters['socket.io:count'] = io.instance.sockets.sockets.length; counterLog.log(JSON.stringify(counters)); } catch (e) { Logger.errlog.log(e.stack); From 23333ee2660e2b5625137445fe9fddf537dc93f5 Mon Sep 17 00:00:00 2001 From: calzoneman Date: Fri, 30 Oct 2015 22:26:20 -0700 Subject: [PATCH 4/4] Remove console logging of clientErrors from HTTP/socket.io --- src/io/ioserver.js | 1 - src/server.js | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/io/ioserver.js b/src/io/ioserver.js index 30af3b18..a34007bd 100644 --- a/src/io/ioserver.js +++ b/src/io/ioserver.js @@ -228,7 +228,6 @@ module.exports = { } else { var server = require("http").createServer().listen(bind.port, bind.ip); server.on("clientError", function (err, socket) { - console.error("clientError on " + id + " - " + err); try { socket.destroy(); } catch (e) { diff --git a/src/server.js b/src/server.js index 31e5bfbe..6419fee6 100644 --- a/src/server.js +++ b/src/server.js @@ -96,7 +96,6 @@ var Server = function () { self.servers[id] = https.createServer(opts, self.express) .listen(bind.port, bind.ip); self.servers[id].on("clientError", function (err, socket) { - console.error("clientError on " + id + " - " + err); try { socket.destroy(); } catch (e) { @@ -105,7 +104,6 @@ var Server = function () { } else if (bind.http) { self.servers[id] = self.express.listen(bind.port, bind.ip); self.servers[id].on("clientError", function (err, socket) { - console.error("clientError on " + id + " - " + err); try { socket.destroy(); } catch (e) {