const _ = require('lodash'); const Analytics = require('analytics-node'); const config = require('../shared/config'); const logging = require('@tryghost/logging'); const sentry = require('../shared/sentry'); // Listens to model events to layer on analytics - also uses the "fake" theme.uploaded event from the theme API const events = require('./lib/common/events'); module.exports.init = function () { const analytics = new Analytics(config.get('segment:key')); const trackDefaults = config.get('segment:trackDefaults') || {}; const prefix = config.get('segment:prefix') || ''; const toTrack = [ { event: 'post.published', name: 'Post Published' }, { event: 'page.published', name: 'Page Published' }, { event: 'theme.uploaded', name: 'Theme Uploaded', // {keyOnSuppliedEventData: keyOnTrackedEventData} // - used to extract specific properties from event data and give them meaningful names data: {name: 'name'} }, { event: 'integration.added', name: 'Custom Integration Added' } ]; _.each(toTrack, function (track) { events.on(track.event, function (eventData = {}) { // extract desired properties from eventData and rename keys if necessary const data = _.mapValues(track.data || {}, v => eventData[v]); try { analytics.track(_.extend(trackDefaults, data, {event: prefix + track.name})); } catch (err) { logging.error(err); sentry.captureException(err); } }); }); };