ac-koa-hipchat-keenio
Version:
Simple Keen.io-based analytics capture for AC Koa HipChat
71 lines (63 loc) • 1.86 kB
JavaScript
var _ = require('lodash');
var Keen = require('keen.io');
var client;
var enabled = !!process.env.KEEN_PROJECT_ID;
var doLog = process.env.LOG_ANALYTICS === 'true';
if (enabled) {
client = Keen.configure({
projectId: process.env.KEEN_PROJECT_ID,
writeKey: process.env.KEEN_WRITE_KEY
});
}
var events = {
install: function (ctx) {},
uninstall: function (ctx) {},
room_enter: function (ctx) {},
room_exit: function (ctx) {},
room_message: function (ctx) { return {match: ctx.match && ctx.match[0]}; },
room_notification: function (ctx) {},
room_topic_change: function (ctx) {}
};
exports.track = function (addon) {
var tracker = {
capture: function (event, data) {
data = _.extend({
addon: typeof addon.name === 'string' ? addon.name : 'default'
}, data);
if (doLog) {
addon.logger.info('analytics: %s: %s', event, JSON.stringify(data));
}
if (enabled) {
client.addEvent(event, data, function (err) {
if (err) {
addon.logger.warn('analytics:', err.message || err);
}
});
}
}
};
function toData(ctx) {
var sender = ctx.sender;
if (sender) {
sender = _.extend({}, sender);
delete sender.links;
}
return {
tenantId: ctx.tenant.id,
groupId: ctx.tenant.group,
roomId: (ctx.room && ctx.room.id) || ctx.tenant.room,
userId: sender && sender.id,
userName: sender && sender.name
};
}
Object.keys(events).forEach(function (event) {
addon.onWebhook(event, function () {
if (event === 'install' || event === 'uninstall') {
tracker.capture('lifecycle', _.extend(toData(this), events[event](this), {type: event}));
} else {
tracker.capture(event, _.extend(toData(this), events[event](this)));
}
});
});
return tracker;
};