Skip to content

Commit

Permalink
Implement basic referrer parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
pfleidi committed Jan 31, 2016
1 parent 9377727 commit 7c13ae3
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 4 deletions.
13 changes: 12 additions & 1 deletion lib/stats_extractor.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
'use strict';

const url = require('url');
const parseUserAgent = require('./user_agent_parser');

module.exports = function statsExtractor(req, res) {

function parseReferrer(referrer) {
if (referrer === 'unknown') {
return 'unknown';
}

return url.parse(referrer).host;
}

function exctractStatistics(transferState, duration, sentBytes) {
let referrer = req.headers.referrer || 'unknown';
let parsedReferrer = parseReferrer(referrer);

let userAgent = req.headers['user-agent'] || 'unknown';
let parsedUserAgent = parseUserAgent(userAgent);

Expand All @@ -19,7 +30,7 @@ module.exports = function statsExtractor(req, res) {
raw_user_agent: userAgent,
parsed_user_agent: parsedUserAgent,
raw_referrer: referrer,
parsed_referrer: '?'
parsed_referrer: parsedReferrer
};
}

Expand Down
29 changes: 26 additions & 3 deletions test/unit/stats_extractor_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('statsExtractor', function () {
raw_user_agent: 'unknown',
parsed_user_agent: 'Other',
raw_referrer: 'unknown',
parsed_referrer: '?'
parsed_referrer: 'unknown'
};

const exctractStatistics = statsExtractor(req, res);
Expand Down Expand Up @@ -64,12 +64,35 @@ describe('statsExtractor', function () {
it('returns a response with the correctly parsed user agent', function () {
let stats = exctractStatistics('canceled', duration, sentBytes);

let expectedStats = _.merge(expectedStatsTemplate, {
let expectedStats = _.assign({}, expectedStatsTemplate, {
raw_user_agent: userAgent,
parsed_user_agent: 'Chrome'
});

assert.deepEqual(stats, expectedStatsTemplate);
assert.deepEqual(stats, expectedStats);
});
});

describe('with a referrer', function () {
let referrer = 'http://blog.binaergewitter.de/';

before(function () {
req.headers.referrer = referrer;
});

after(function () {
req.headers.referrer = null;
});

it('returns a response with the correctly parsed user agent', function () {
let stats = exctractStatistics('canceled', duration, sentBytes);

let expectedStats = _.assign({}, expectedStatsTemplate, {
raw_referrer: referrer,
parsed_referrer: 'blog.binaergewitter.de'
});

assert.deepEqual(stats, expectedStats);
});
});

Expand Down

0 comments on commit 7c13ae3

Please sign in to comment.