const axios = require('axios') const bugsnag = require('bugsnag') const path = require('path') const uuid = require('uuid/v4') const _ = require('lodash') /* global wiki */ module.exports = { cid: '', enabled: false, init() { this.cid = uuid() bugsnag.register(wiki.data.telemetry.BUGSNAG_ID, { appVersion: wiki.version, autoNotify: false, hostname: this.cid, notifyReleaseStages: ['production'], packageJSON: path.join(wiki.ROOTPATH, 'package.json'), projectRoot: wiki.ROOTPATH, useSSL: true }) bugsnag.onBeforeNotify((notification, originalError) => { if (!this.enabled) { return false } }) if (_.get(wiki.config, 'logging.telemetry', false) === true) { this.enabled = true } return this }, sendError(err) { bugsnag.notify(err, { userId: this.cid }) }, sendEvent(eventCategory, eventAction, eventLabel) { if (!this.enabled) { return false } axios({ method: 'post', url: wiki.data.telemetry.GA_REMOTE, headers: { 'Content-type': 'application/x-www-form-urlencoded' }, params: { v: 1, // API version tid: wiki.data.telemetry.GA_ID, // Tracking ID aip: 1, // Anonymize IP ds: 'server', // Data source cid: this.cid, // Client ID t: 'event', // Hit Type ec: eventCategory, // Event Category ea: eventAction, // Event Action el: eventLabel // Event Label } }).then(resp => { if (resp.status !== 200) { wiki.logger.warn('Unable to send analytics telemetry request.') } }, err => { wiki.logger.warn('Unable to send analytics telemetry request.') }) } }