Browse Source

Make use of Keen addons for event data

master
Luke Childs 8 years ago
parent
commit
84ecbdc10c
  1. 83
      lib/keen-middleware.js

83
lib/keen-middleware.js

@ -6,20 +6,79 @@ const client = new KeenTracking({
}); });
module.exports = (req, res, next) => { module.exports = (req, res, next) => {
// Record an event
// Setup event data
const eventData = { const eventData = {
url: req.url,
path: req.path,
ip: req.ip,
method: req.method, method: req.method,
ips: req.ips, url: {
url: req.originalUrl, string: `${req.protocol}://${req.headers.host}${req.originalUrl}`
headers: req.headers, },
params: req.params, ip: req.ip,
protocol: req.protocol, userAgent: {
query: req.query, string: req.headers['user-agent']
hostname: req.hostname },
referrer: {
url: req.headers.referer
}
};
// Enable keen date time addon
eventData.keen = {
addons: [
{
name: 'keen:date_time_parser',
input: {
date_time: 'keen.timestamp',
},
output: 'timestamp_info'
}
]
}; };
client.recordEvent('pageviews', eventData);
// 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('pageviewsv2', eventData);
next(); next();
} }

Loading…
Cancel
Save