diff --git a/libraries/metrics/event_loop.coffee b/libraries/metrics/event_loop.coffee index 4e410892bf..01e37b96a1 100644 --- a/libraries/metrics/event_loop.coffee +++ b/libraries/metrics/event_loop.coffee @@ -1,7 +1,9 @@ module.exports = EventLoopMonitor = monitor: (logger, interval = 1000, log_threshold = 100) -> Metrics = require "./metrics" - + # check for logger on startup to avoid exceptions later if undefined + throw new Error("logger is undefined") if !logger? + # monitor delay in setInterval to detect event loop blocking previous = Date.now() intervalId = setInterval () -> now = Date.now() diff --git a/libraries/metrics/package.json b/libraries/metrics/package.json index 94dbb0c46d..6a56fca60d 100644 --- a/libraries/metrics/package.json +++ b/libraries/metrics/package.json @@ -1,6 +1,6 @@ { "name": "metrics-sharelatex", - "version": "1.7.1", + "version": "1.7.2", "description": "A drop-in metrics and monitoring module for node.js apps", "repository": { "type": "git", diff --git a/libraries/metrics/test/unit/coffee/event_loop.coffee b/libraries/metrics/test/unit/coffee/event_loop.coffee new file mode 100644 index 0000000000..19e79cbe9a --- /dev/null +++ b/libraries/metrics/test/unit/coffee/event_loop.coffee @@ -0,0 +1,34 @@ +require('coffee-script') +chai = require('chai') +should = chai.should() +expect = chai.expect +path = require('path') +modulePath = path.join __dirname, '../../../event_loop.coffee' +SandboxedModule = require('sandboxed-module') +sinon = require("sinon") + +describe 'event_loop', -> + + before -> + @metrics = { + timing: sinon.stub() + registerDestructor: sinon.stub() + } + @logger = { + warn: sinon.stub() + } + @event_loop = SandboxedModule.require modulePath, requires: + './metrics': @metrics + + describe 'with a logger provided', -> + before -> + @event_loop.monitor(@logger) + + it 'should register a destructor with metrics', -> + @metrics.registerDestructor.called.should.equal true + + describe 'without a logger provided', -> + + it 'should throw an exception', -> + expect(@event_loop.monitor).to.throw('logger is undefined') +