Skip to content

Commit 88a74e1

Browse files
committed
feat(ignoreHeaders): add ignoreHeaders to the config
1 parent 5dc3017 commit 88a74e1

5 files changed

Lines changed: 66 additions & 8 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ var config = {};
3636

3737
config.appName = 'Users';
3838

39+
config.ignoreHeaders = {
40+
'user-agent': ['007']
41+
};
42+
3943
config.reporter = require('@risingstack/trace/lib/reporters').trace.create({
4044
apiKey: '1234',
4145
appName: config.appName

lib/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ var config = getConfig();
2929

3030
var collector = new Collector(config);
3131

32-
wraps.instrument(collector);
32+
wraps.instrument(collector, config);
3333

3434
function setService(config, callback) {
3535
var reporter = config.reporter;

lib/wraps/http.Server.prototype.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,30 @@ var url = require('url');
33
var qs = require('qs');
44
var uuid = require('node-uuid');
55
var microtime = require('microtime');
6+
var reduce = require('lodash/collection/reduce');
67

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

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

11-
function wrapListener(listener, collector) {
12+
function wrapListener(listener, collector, config) {
13+
14+
var ignoreHeaders = config.ignoreHeaders;
1215

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

19+
var skipped = reduce(ignoreHeaders, function (found, value, key) {
20+
if (headers[key] && value.indexOf(headers[key]) > -1) {
21+
found = true;
22+
}
23+
return found;
24+
}, false);
25+
26+
if (skipped) {
27+
return listener.apply(this, arguments);
28+
}
29+
1630
var requestUrl = url.parse(request.url);
1731
var requestQuery = qs.parse(requestUrl.query).requestId;
1832
var originalWriteHead = response.writeHead;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
var expect = require('chai').expect;
2+
3+
var wrapper = require('./http.Server.prototype');
4+
5+
var dummyCollector = {
6+
emit: function () {
7+
},
8+
getService: function () {
9+
return 1;
10+
}
11+
};
12+
13+
describe('The http.Server.prototype wrapper module', function () {
14+
15+
describe('ingoreHeaders option', function () {
16+
17+
it('skips requests if there is a match', function () {
18+
19+
var request = {
20+
headers: {
21+
'user-agent': '007'
22+
}
23+
};
24+
25+
var listener = this.sandbox.spy();
26+
27+
var wrappedListener = wrapper(listener, dummyCollector, {
28+
ignoreHeaders: {
29+
'user-agent': ['006', '007']
30+
}
31+
});
32+
33+
wrappedListener(request);
34+
35+
expect(listener).to.be.calledWith(request);
36+
});
37+
38+
});
39+
40+
});

lib/wraps/index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ var stream = require('stream');
55
var getNamespace = require('continuation-local-storage').getNamespace;
66
var Shimmer = require('./shimmer');
77

8-
function instrument (collector) {
8+
function instrument (collector, config) {
99
Shimmer.wrap(http.Server.prototype, 'http.Server.prototype', ['on', 'addListener'],
1010
function (addListener) {
1111
return function (type, listener) {
1212
if (type === 'request' && typeof listener === 'function') {
1313
return addListener.call(this, type,
14-
require('./http.Server.prototype.js')(listener, collector));
14+
require('./http.Server.prototype.js')(listener, collector, config));
1515
} else {
1616
return addListener.apply(this, arguments);
1717
}
@@ -23,23 +23,23 @@ function instrument (collector) {
2323
return function (type, listener) {
2424
if (type === 'request' && typeof listener === 'function') {
2525
return addListener.call(this, type,
26-
require('./http.Server.prototype.js')(listener, collector));
26+
require('./http.Server.prototype.js')(listener, collector, config));
2727
} else {
2828
return addListener.apply(this, arguments);
2929
}
3030
};
3131
});
3232

3333
Shimmer.wrap(http, 'http', 'request', function (original) {
34-
return require('./http.request')(original, collector);
34+
return require('./http.request')(original, collector, config);
3535
});
3636

3737
Shimmer.wrap(https, 'https', 'request', function (original) {
38-
return require('./http.request')(original, collector);
38+
return require('./http.request')(original, collector, config);
3939
});
4040

4141
Shimmer.wrap(process, 'process', '_fatalException', function (original) {
42-
return require('./process._fatalException')(original, collector);
42+
return require('./process._fatalException')(original, collector, config);
4343
});
4444

4545
getNamespace('trace').bindEmitter(stream.prototype);

0 commit comments

Comments
 (0)