UNPKG

ac-koa-hipchat-keenio

Version:

Simple Keen.io-based analytics capture for AC Koa HipChat

71 lines (63 loc) 1.86 kB
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; };