Browse Source

Extract anonlytics-express out of Onionite

pull/7/merge
Luke Childs 8 years ago
parent
commit
8fda2a5013
  1. 4
      index.js
  2. 91
      lib/keen-middleware.js
  3. 5
      package.json

4
index.js

@ -1,5 +1,5 @@
const express = require('express'); const express = require('express');
const keenMiddleware = require('./lib/keen-middleware'); const anonlytics = require('anonlytics-express');
const nunjucks = require('nunjucks'); const nunjucks = require('nunjucks');
const nunjucksFilters = require('./lib/nunjucks-filters'); const nunjucksFilters = require('./lib/nunjucks-filters');
const nunjucksMiddleware = require('./lib/nunjucks-middleware'); const nunjucksMiddleware = require('./lib/nunjucks-middleware');
@ -15,7 +15,7 @@ if(process.env.NOW) {
} }
// Analytics // Analytics
app.use(keenMiddleware); app.use(anonlytics);
// Setup nunjucks // Setup nunjucks
nunjucks.configure('views', { express: app }); nunjucks.configure('views', { express: app });

91
lib/keen-middleware.js

@ -1,91 +0,0 @@
const KeenTracking = require('keen-tracking');
const responseTime = require('response-time');
const client = new KeenTracking({
projectId: process.env.KEEN_PROJECT_ID,
writeKey: process.env.KEEN_WRITE_KEY
});
module.exports = responseTime((req, res, time) => {
// Setup event data
const eventData = {
http: {
method: req.method,
statusCode: res.statusCode
},
responseTime: time,
url: {
string: `${req.protocol}://${req.headers.host}${req.originalUrl}`
},
ip: req.ip.substr(0, 7) == '::ffff:' ? req.ip.substr(7) : req.ip,
userAgent: {
string: req.headers['user-agent']
},
referrer: {
url: req.headers.referer
},
express: {
route: req.route.path
}
};
// Enable keen date time addon
eventData.keen = {
addons: [
{
name: 'keen:date_time_parser',
input: {
date_time: 'keen.timestamp',
},
output: 'timestamp_info'
}
]
};
// Only enable other keen addons if we have the required input
const keenAddons = [
{
name: 'keen:url_parser',
input: {
url: 'url.string'
},
output: 'url.components'
},
{
name: 'keen:ip_to_geo',
input: {
ip: 'ip'
},
output: 'location'
},
{
name: 'keen:ua_parser',
input: {
ua_string: 'userAgent.string'
},
output: 'userAgent.info'
},
{
name: 'keen:referrer_parser',
input: {
referrer_url: 'referrer.url',
page_url: 'url.string'
},
output: 'referrer.info'
}
];
keenAddons.forEach(addon => {
const hasRequiredProperties = Object
.keys(addon.input)
.map(key => addon.input[key])
.every(requiredProp => requiredProp.split('.').reduce((obj, i) => obj[i], eventData));
if(hasRequiredProperties) {
eventData.keen.addons.push(addon);
}
});
// Send event data
client.recordEvent('analytics', eventData);
});

5
package.json

@ -7,18 +7,17 @@
"node": ">=6.3" "node": ">=6.3"
}, },
"dependencies": { "dependencies": {
"anonlytics-express": "^0.1.1",
"ascii-chart": "^1.3.1", "ascii-chart": "^1.3.1",
"clean-css": "^3.4.19", "clean-css": "^3.4.19",
"compression": "^1.6.2", "compression": "^1.6.2",
"express": "^4.14.0", "express": "^4.14.0",
"express-minify": "^0.2.0", "express-minify": "^0.2.0",
"express-minify-html": "^0.6.0", "express-minify-html": "^0.6.0",
"keen-tracking": "^1.1.3",
"moment": "^2.14.1", "moment": "^2.14.1",
"nunjucks": "^2.5.0", "nunjucks": "^2.5.0",
"onionoo": "^1.0.0", "onionoo": "^1.0.0",
"pretty-bytes": "^4.0.2", "pretty-bytes": "^4.0.2"
"response-time": "^2.3.2"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^1.10.2" "nodemon": "^1.10.2"

Loading…
Cancel
Save