Skip to content

Commit

Permalink
feat(ignoreHeaders): add ignoreHeaders to the config
Browse files Browse the repository at this point in the history
  • Loading branch information
gergelyke committed Aug 6, 2015
1 parent 5dc3017 commit 88a74e1
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 8 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ var config = {};

config.appName = 'Users';

config.ignoreHeaders = {
'user-agent': ['007']
};

config.reporter = require('@risingstack/trace/lib/reporters').trace.create({
apiKey: '1234',
appName: config.appName
Expand Down
2 changes: 1 addition & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ var config = getConfig();

var collector = new Collector(config);

wraps.instrument(collector);
wraps.instrument(collector, config);

function setService(config, callback) {
var reporter = config.reporter;
Expand Down
16 changes: 15 additions & 1 deletion lib/wraps/http.Server.prototype.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,30 @@ var url = require('url');
var qs = require('qs');
var uuid = require('node-uuid');
var microtime = require('microtime');
var reduce = require('lodash/collection/reduce');

var getNamespace = require('continuation-local-storage').getNamespace;

var Collector = require('../collector');

function wrapListener(listener, collector) {
function wrapListener(listener, collector, config) {

var ignoreHeaders = config.ignoreHeaders;

return function (request, response) {
var headers = request.headers;

var skipped = reduce(ignoreHeaders, function (found, value, key) {
if (headers[key] && value.indexOf(headers[key]) > -1) {
found = true;
}
return found;
}, false);

if (skipped) {
return listener.apply(this, arguments);
}

var requestUrl = url.parse(request.url);
var requestQuery = qs.parse(requestUrl.query).requestId;
var originalWriteHead = response.writeHead;
Expand Down
40 changes: 40 additions & 0 deletions lib/wraps/http.Server.prototype.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
var expect = require('chai').expect;

var wrapper = require('./http.Server.prototype');

var dummyCollector = {
emit: function () {
},
getService: function () {
return 1;
}
};

describe('The http.Server.prototype wrapper module', function () {

describe('ingoreHeaders option', function () {

it('skips requests if there is a match', function () {

var request = {
headers: {
'user-agent': '007'
}
};

var listener = this.sandbox.spy();

var wrappedListener = wrapper(listener, dummyCollector, {
ignoreHeaders: {
'user-agent': ['006', '007']
}
});

wrappedListener(request);

expect(listener).to.be.calledWith(request);
});

});

});
12 changes: 6 additions & 6 deletions lib/wraps/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ var stream = require('stream');
var getNamespace = require('continuation-local-storage').getNamespace;
var Shimmer = require('./shimmer');

function instrument (collector) {
function instrument (collector, config) {
Shimmer.wrap(http.Server.prototype, 'http.Server.prototype', ['on', 'addListener'],
function (addListener) {
return function (type, listener) {
if (type === 'request' && typeof listener === 'function') {
return addListener.call(this, type,
require('./http.Server.prototype.js')(listener, collector));
require('./http.Server.prototype.js')(listener, collector, config));
} else {
return addListener.apply(this, arguments);
}
Expand All @@ -23,23 +23,23 @@ function instrument (collector) {
return function (type, listener) {
if (type === 'request' && typeof listener === 'function') {
return addListener.call(this, type,
require('./http.Server.prototype.js')(listener, collector));
require('./http.Server.prototype.js')(listener, collector, config));
} else {
return addListener.apply(this, arguments);
}
};
});

Shimmer.wrap(http, 'http', 'request', function (original) {
return require('./http.request')(original, collector);
return require('./http.request')(original, collector, config);
});

Shimmer.wrap(https, 'https', 'request', function (original) {
return require('./http.request')(original, collector);
return require('./http.request')(original, collector, config);
});

Shimmer.wrap(process, 'process', '_fatalException', function (original) {
return require('./process._fatalException')(original, collector);
return require('./process._fatalException')(original, collector, config);
});

getNamespace('trace').bindEmitter(stream.prototype);
Expand Down

0 comments on commit 88a74e1

Please sign in to comment.