diff --git a/acp.js b/acp.js index 7446fe44..d0ade27b 100644 --- a/acp.js +++ b/acp.js @@ -11,7 +11,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI module.exports = function (Server) { var db = Server.db; - var ActionLog = require("./actionlog")(Server); + var ActionLog = Server.actionlog; return { init: function(user) { ActionLog.record(user.ip, user.name, "acp-init"); diff --git a/api.js b/api.js index 76e5e38c..96654562 100644 --- a/api.js +++ b/api.js @@ -13,7 +13,7 @@ var Logger = require("./logger"); var fs = require("fs"); module.exports = function (Server) { - var ActionLog = require("./actionlog")(Server); + var ActionLog = Server.actionlog; function getIP(req) { var raw = req.connection.remoteAddress; var forward = req.header("x-forwarded-for"); diff --git a/channel.js b/channel.js index 7978452f..ee9feab3 100644 --- a/channel.js +++ b/channel.js @@ -18,7 +18,6 @@ var Logger = require("./logger.js"); var Rank = require("./rank.js"); var ChatCommand = require("./chatcommand.js"); var Filter = require("./filter.js").Filter; -var ActionLog = require("./actionlog"); var Playlist = require("./playlist"); var sanitize = require("validator").sanitize; @@ -341,7 +340,7 @@ Channel.prototype.tryReadLog = function (user) { Channel.prototype.tryRegister = function (user) { var self = this; if(self.registered) { - ActionLog.record(user.ip, user.name, "channel-register-failure", + self.server.actionlog.record(user.ip, user.name, "channel-register-failure", [self.name, "Channel already registered"]); user.socket.emit("registerChannel", { success: false, @@ -349,7 +348,7 @@ Channel.prototype.tryRegister = function (user) { }); } else if(!user.loggedIn) { - ActionLog.record(user.ip, user.name, "channel-register-failure", + self.server.actionlog.record(user.ip, user.name, "channel-register-failure", [self.name, "Not logged in"]); user.socket.emit("registerChannel", { success: false, @@ -358,7 +357,7 @@ Channel.prototype.tryRegister = function (user) { } else if(!Rank.hasPermission(user, "registerChannel")) { - ActionLog.record(user.ip, user.name, "channel-register-failure", + self.server.actionlog.record(user.ip, user.name, "channel-register-failure", [self.name, "Insufficient permissions"]); user.socket.emit("registerChannel", { success: false, @@ -376,7 +375,7 @@ Channel.prototype.tryRegister = function (user) { return; } - ActionLog.record(user.ip, user.name, + self.server.actionlog.record(user.ip, user.name, "channel-register-success", self.name); self.registered = true; self.initialized = true; diff --git a/database.js b/database.js index 6d0fa265..4186e056 100644 --- a/database.js +++ b/database.js @@ -1353,6 +1353,25 @@ Database.prototype.listActions = function (types, callback) { /* REGION stats */ +Database.prototype.addStatPoint = function (time, ucount, ccount, mem, + callback) { + var self = this; + if(typeof callback !== "function") + callback = blackHole; + + var query = "INSERT INTO stats VALUES (?, ?, ?, ?)"; + self.query(query, [time, ucount, ccount, mem], callback); +}; + +Database.prototype.pruneStats = function (before, callback) { + var self = this; + if(typeof callback !== "function") + callback = blackHole; + + var query = "DELETE FROM stats WHERE time < ?"; + self.query(query, [before], callback); +}; + Database.prototype.listStats = function (callback) { var self = this; if(typeof callback !== "function") diff --git a/server.js b/server.js index 70c2fb81..5cecd78a 100644 --- a/server.js +++ b/server.js @@ -73,6 +73,7 @@ var Server = { ips: {}, acp: null, httpaccess: null, + actionlog: null, logHTTP: function (req, status) { if(status === undefined) status = 200; @@ -88,6 +89,7 @@ var Server = { this.httpaccess.log([ipstr, req.method, url, status, req.headers["user-agent"]].join(" ")); }, init: function () { + this.actionlog = require("./actionlog")(this); this.httpaccess = new Logger.Logger("httpaccess.log"); this.app = express(); this.app.use(express.bodyParser()); @@ -169,14 +171,15 @@ var Server = { this.io.sockets.on("connection", function (socket) { var ip = getSocketIP(socket); socket._ip = ip; - if(this.db.checkGlobalBan(ip)) { - Logger.syslog.log("Disconnecting " + ip + " - gbanned"); - socket.emit("kick", { - reason: "You're globally banned." - }); - socket.disconnect(true); - return; - } + this.db.isGlobalIPBanned(ip, function (err, bant) { + if(bant) { + Logger.syslog.log("Disconnecting " + ip + " - gbanned"); + socket.emit("kick", { + reason: "You're globally banned." + }); + socket.disconnect(true); + } + }); socket.on("disconnect", function () { this.ips[ip]--; @@ -200,8 +203,8 @@ var Server = { }.bind(this)); // init database - this.db = require("./database"); - this.db.setup(Server.cfg); + var Database = require("./database"); + this.db = new Database(this.cfg); this.db.init(); // init ACP diff --git a/stats.js b/stats.js index 04349990..c8a061af 100644 --- a/stats.js +++ b/stats.js @@ -15,6 +15,7 @@ const STAT_INTERVAL = 60 * 60 * 1000; const STAT_EXPIRE = 24 * STAT_INTERVAL; module.exports = function (Server) { + var db = Server.db; setInterval(function () { var chancount = Server.channels.length; var usercount = 0; @@ -24,29 +25,8 @@ module.exports = function (Server) { var mem = process.memoryUsage().rss; - var db = Server.db.getConnection(); - if(!db) - return; - - var query = Server.db.createQuery( - "INSERT INTO stats VALUES (?, ?, ?, ?)", - [Date.now(), usercount, chancount, mem] - ); - - if(!db.querySync(query)) { - Logger.errlog.log("! Failed to record stats"); - Logger.errlog.log(query); - } - - query = Server.db.createQuery( - "DELETE FROM stats WHERE time= 255) - ActionLog.record(self.ip, name, "login-success"); + self.server.actionlog.record(self.ip, name, "login-success"); self.loggedIn = true; self.socket.emit("login", { success: true,