Skip to content
Snippets Groups Projects
Commit df340cbe authored by Mike Bartlett's avatar Mike Bartlett
Browse files

Merge branch 'master' of github.com:gitterHQ/gitter-env into feature/intercom

Conflicts:
	package.json
parents 2a741a23 8c721201
No related branches found
No related tags found
1 merge request!2Feature/intercom
/*jshint node:true, unused: true */
"use strict";
var blocked = require('blocked');
var util = require('util');
exports.create = function(options) {
var workManager = options.workManager;
var logger = options.logger;
var stats = options.stats;
var config = options.config;
if(config.get('blockMonitor:enabled') === false) return;
function installBlocked() {
var minBlockTime = config.get('blockMonitor:minBlockingTimeMS') || 150;
var useWorkManagerReport = config.get('blockMonitor:useWorkManagerReport') !== false;
blocked(function(ms) {
if(ms < minBlockTime) return;
logger.warn('block-monitor: block detected: ' + ms + 'ms');
stats.gaugeHF('eventloop.lag', ms);
if(useWorkManagerReport) {
var now = Date.now();
var report = workManager.report();
report.forEach(function(line) {
var duration = now - line.start;
var start = new Date(line.start);
logger.warn('block-monitor: ' + util.format('%s %sms %j', start.toLocaleTimeString(), duration, line.meta));
});
}
});
}
// Give the process 5seconds to start before reporting blockages
var startupDelay = config.get('blockMonitor:startupDelay') || 5000;
setTimeout(installBlocked, startupDelay);
};
Loading
Loading
@@ -7,11 +7,15 @@ exports.create = function(configDirectory) {
var stats = require('./stats').create({ config: config });
var logger = require('./logger').create({ config: config, stats: stats });
var errorReporter = require('./error-reporter').create({ config: config, logger: logger });
var workManager = require('./work-manager').create();
var redisClient = require('./redis-client');
var errorHandlerMiddleware = require('./middlewares/error-handler');
var accessLogger = require('./middlewares/access-logger');
var unhandledExceptionHandler = require('./unhandled-exceptions');
 
/* Monitor event loop blockages */
require('./block-monitor').create({ config: config, stats: stats, logger: logger, workManager: workManager });
/* Main singleton client */
var mainRedisClient;
 
Loading
Loading
@@ -26,7 +30,7 @@ exports.create = function(configDirectory) {
Object.defineProperty(middlewares, 'accessLogger', {
enumerable: true,
get: function() {
return accessLogger.create({ logger: logger, stats: stats });
return accessLogger.create({ logger: logger, stats: stats, workManager: workManager });
}
});
 
Loading
Loading
@@ -68,4 +72,4 @@ exports.create = function(configDirectory) {
 
middlewares: middlewares
};
};
\ No newline at end of file
};
Loading
Loading
@@ -4,14 +4,23 @@
exports.create = function(options) {
var logger = options.logger;
var stats = options.stats;
var workManager = options.workManager;
var webQueue = workManager.getQueue('web');
 
return function(req, res, next){
var start = new Date();
var workItem = webQueue.start({
method: req.method,
url: req.url,
status: res.statusCode
}, 500);
 
if (res._responseTime) return next();
res._responseTime = true;
 
res.on('header', function() {
res.on('finish', function() {
workItem.complete();
var duration = new Date() - start;
stats.responseTime('web.request', duration);
if(duration >= 500) {
Loading
Loading
@@ -35,7 +44,6 @@ exports.create = function(options) {
req.ip,
duration + 'ms'
].join(' '));
});
 
next();
Loading
Loading
Loading
Loading
@@ -97,7 +97,7 @@ exports.create = function(options) {
*/
if (statsdEnabled) {
var StatsD = require('node-statsd').StatsD;
var statsdClient = new StatsD({ prefix: config.get('stats:statsd:prefix') });
var statsdClient = new StatsD({ prefix: config.get('stats:statsd:prefix'), host: '127.0.0.1' });
 
statsdClient.socket.on('error', function(error) {
return emergencyLog("Error in statsd socket: " + error, { exception: error });
Loading
Loading
/*jshint node:true, unused: true */
"use strict";
var WorkManager = require('clockout');
exports.create = function() {
return new WorkManager();
};
{
"name": "gitter-env",
"version": "0.8.0",
"version": "0.9.1",
"description": "gitter-env",
"main": "index.js",
"directories": {
Loading
Loading
@@ -35,7 +35,9 @@
"node-statsd": "0.0.7",
"mixpanel": "0.0.20",
"underscore": "^1.6.0",
"intercom.io": "~0.0.8"
"intercom" : "~0.0.8",
"clockout": "0.0.1",
"blocked": "^1.0.0"
},
"devDependencies": {
"mocha": "^1.18.2",
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment