|
@ -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(); |
|
|
} |
|
|
} |
|
|