From bc7bdb2db3630d1c716b8928580034002ededdac Mon Sep 17 00:00:00 2001 From: Gavin Mogan Date: Thu, 11 Jun 2020 02:35:06 -0700 Subject: [PATCH 1/3] Fix CSMM-3 by returning early if the disconnected msg doesn't have a player (#111) --- api/hooks/discordChatBridge/chatBridgeChannel.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/hooks/discordChatBridge/chatBridgeChannel.js b/api/hooks/discordChatBridge/chatBridgeChannel.js index a4f7dd00c..1cb165f45 100644 --- a/api/hooks/discordChatBridge/chatBridgeChannel.js +++ b/api/hooks/discordChatBridge/chatBridgeChannel.js @@ -217,6 +217,9 @@ class ChatBridgeChannel { async sendRichDisconnectedMessageToDiscord(disconnectedMsg) { let disconnectedPlayer = disconnectedMsg.player; + if (!disconnectedPlayer) { + return; + } let gblBans = await BanEntry.find({ steamId: disconnectedPlayer.steamId From 354bdbbc0d0d46c6b6836efcca285b313a5807ba Mon Sep 17 00:00:00 2001 From: Gavin Mogan Date: Thu, 11 Jun 2020 02:35:59 -0700 Subject: [PATCH 2/3] Fix some tests (#112) --- api/helpers/get-queue-object.js | 3 ++- .../player-teleport/playerTeleport.test.js | 19 ++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/api/helpers/get-queue-object.js b/api/helpers/get-queue-object.js index de4728f39..8af3af2da 100644 --- a/api/helpers/get-queue-object.js +++ b/api/helpers/get-queue-object.js @@ -19,7 +19,8 @@ module.exports = { if (process.env.IS_TEST) { return exits.success({ on: function() {}, - process: function() {} + process: function() {}, + add: function() {} }); } const queue = new Bull( diff --git a/test/integration/player-teleport/playerTeleport.test.js b/test/integration/player-teleport/playerTeleport.test.js index efdb1dde5..3d9774455 100644 --- a/test/integration/player-teleport/playerTeleport.test.js +++ b/test/integration/player-teleport/playerTeleport.test.js @@ -47,19 +47,16 @@ describe('Player teleports', function () { newTeleport = _.omit(newTeleport, 'id'); let requestOptions = newTeleport; requestOptions.id = testTeleports[0].id; - return supertest(sails.hooks.http.app) - .post('/api/teleport') - .send(requestOptions) - .expect(async function (res) { - let record = await PlayerTeleport.findOne(testTeleports[0]); - return expect(record).to.be.eq(requestOptions); - }) - .expect(200) - .expect('Content-Type', /json/); + const res = await supertest(sails.hooks.http.app).post('/api/teleport').send(requestOptions); + expect(res.statusCode).to.equal(200); + expect(res.headers['content-type']).to.include('json'); + + let record = await PlayerTeleport.findOne(testTeleports[0].id); + expect(record).to.eql(requestOptions); }); - it('should return 400 when id is not given', function () { - return supertest(sails.hooks.http.app) + it('should return 400 when id is not given', async function () { + await supertest(sails.hooks.http.app) .post('/api/teleport') .expect(400); }); From d3b0208fb1c3d304c1f4dd92c50effba9cf7209f Mon Sep 17 00:00:00 2001 From: Gavin Mogan Date: Thu, 11 Jun 2020 02:45:47 -0700 Subject: [PATCH 3/3] Dont use redis inside the workers (#113) Co-authored-by: Niek Candaele <22315101+niekcandaele@users.noreply.github.com> --- api/hooks/sdtdLogs/LoggingObject.js | 12 ++++++----- api/hooks/sdtdLogs/logProcessor.js | 20 +------------------ test/integration/cron-job/cron.test.js | 8 ++++---- .../hooks/sdtdLogs/logProcessor.test.js | 3 +-- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/api/hooks/sdtdLogs/LoggingObject.js b/api/hooks/sdtdLogs/LoggingObject.js index 1ea36cd09..dc767c768 100644 --- a/api/hooks/sdtdLogs/LoggingObject.js +++ b/api/hooks/sdtdLogs/LoggingObject.js @@ -55,7 +55,6 @@ class LoggingObject extends EventEmitter { }; async init(ms = sails.config.custom.logCheckInterval) { - if (!ms) { ms = 3000; } @@ -91,7 +90,6 @@ class LoggingObject extends EventEmitter { result = JSON.parse(result); } - if (result.serverId.toString() !== this.serverId) { // not one of ours return; @@ -128,6 +126,7 @@ class LoggingObject extends EventEmitter { } await this.setFailedToZero(); + await this.setLastLogLine(result.lastLogLine); await this.addFetchJob(); } @@ -153,14 +152,17 @@ class LoggingObject extends EventEmitter { ); } - async setLastLogLine() { + async setLastLogLine(lastLogLine) { const server = await SdtdServer.findOne(this.serverId) - const webUIUpdate = await SdtdApi.getWebUIUpdates(SdtdServer.getAPIConfig(server)); - const lastLogLine = parseInt(webUIUpdate.newlogs) + 1; + if (!lastLogLine && lastLogLine !== 0) { + const webUIUpdate = await SdtdApi.getWebUIUpdates(SdtdServer.getAPIConfig(server)); + lastLogLine = parseInt(webUIUpdate.newlogs) + 1; + } await sails.helpers.redis.set( `sdtdserver:${this.serverId}:sdtdLogs:lastLogLine`, lastLogLine ); + this.lastLogLine = lastLogLine; this.emptyResponses = 0; return lastLogLine; } diff --git a/api/hooks/sdtdLogs/logProcessor.js b/api/hooks/sdtdLogs/logProcessor.js index 015ac6c7c..01eb59f1a 100644 --- a/api/hooks/sdtdLogs/logProcessor.js +++ b/api/hooks/sdtdLogs/logProcessor.js @@ -3,13 +3,7 @@ const handleLogLine = require("./handleLogLine"); module.exports = async function(job) { const resultLogs = []; - // Get latest log line from Redis - let lastLogLine = parseInt( - await sails.helpers.redis.get( - `sdtdserver:${job.data.server.id}:sdtdLogs:lastLogLine` - ) - ); - + let lastLogLine = job.data.lastLogLine; // If latest log line is not found, get it from the server if (!lastLogLine) { const webUIUpdate = await sails.helpers.sdtdApi.getWebUIUpdates(SdtdServer.getAPIConfig(job.data.server)); @@ -22,12 +16,6 @@ module.exports = async function(job) { // Adjust latest log line based on new logs we got lastLogLine = lastLogLine + newLogs.entries.length; - // Set latest log line in Redis - await sails.helpers.redis.set( - `sdtdserver:${job.data.server.id}:sdtdLogs:lastLogLine`, - lastLogLine - ); - // Parse these logs into usable data let index = -1; for (const line of newLogs.entries) { @@ -46,12 +34,6 @@ module.exports = async function(job) { } } - // Set last success date in Redis - await sails.helpers.redis.set( - `sdtdserver:${job.data.server.id}:sdtdLogs:lastSuccess`, - Date.now() - ); - return Promise.resolve({ serverId: job.data.server.id, lastLogLine, diff --git a/test/integration/cron-job/cron.test.js b/test/integration/cron-job/cron.test.js index 387ff31cf..51ddddfab 100644 --- a/test/integration/cron-job/cron.test.js +++ b/test/integration/cron-job/cron.test.js @@ -3,16 +3,16 @@ var expect = require("chai").expect; describe('POST /api/sdtdserver/cron', function () { - it('should return 200 with valid info', function (done) { - supertest(sails.hooks.http.app) + it('should return 200 with valid info', async function () { + const response = await supertest(sails.hooks.http.app) .post('/api/sdtdserver/cron') .send({ serverId: 1, command: 'help', temporalValue: '0 */6 * * *' }) - .expect('Content-Type', /json/) - .expect(200, done); + expect(response.statusCode).to.be.eql(200); + expect(response.header['content-type']).to.include('json'); }); it('should return 400 when command or temporal value is not given', function (done) { supertest(sails.hooks.http.app) diff --git a/test/integration/hooks/sdtdLogs/logProcessor.test.js b/test/integration/hooks/sdtdLogs/logProcessor.test.js index 124b4f2ec..e46695bc8 100644 --- a/test/integration/hooks/sdtdLogs/logProcessor.test.js +++ b/test/integration/hooks/sdtdLogs/logProcessor.test.js @@ -4,10 +4,9 @@ const logProcessor = require("../../../../api/hooks/sdtdLogs/logProcessor"); describe('logProcessor', function () { it('Confirm able to fetch log messages', async function () { - sails.cache[`sdtdserver:${sails.testServer.id}:sdtdLogs:lastLogLine`] = 1100; sinon.stub(sails.helpers.sdtdApi, "getWebUIUpdates").callsFake(async function () { return { - newlogs: 1100 + newlogs: 1099 } }); sinon.stub(sails.helpers.sdtdApi, "getLog").callsFake(async function () {