UNPKG

ember-introjs

Version:
123 lines (101 loc) 3.02 kB
'use strict'; var RSVP = require('rsvp'), Promise = RSVP.Promise, provider = require('./provider'), getVersions = require('./get-versions'), md5 = require('./md5'), extend = require('lodash.assign'), debug = require('debug')('leek'), https; function Leek(options) { if (!options) { throw new Error('You need to specify the options.'); } if (!options.trackingCode) { throw new Error('You need to specify the tracking code.'); } if (!options.globalName) { throw new Error('You need to specify the global name.'); } this.adapterUrls = options.adapterUrls || null; this.adapterServers = options.adapterServers || null; this.trackingCode = options.trackingCode; this.name = options.name; if (this.name === undefined) { throw new Error('You need to specify name, this should be a unique identifier for the current client'); } this.globalName = options.globalName; this.clientId = this.globalName + md5(this.name); this.version = options.version || ''; this.silent = options.silent || process.env.DISABLE_LEEK; debug('initialize %o', { trackingCode: this.trackingCode, name: this.name, globalName: this.globalName, clientId: this.clientId, version: this.version, silent: this.silent }); } Leek.prototype.setName = function(value) { this.name = value; this.clientId = this.globalName + md5(this.name); }; Leek.prototype._enqueue = function(eventType, meta) { debug('enqueue eventType:%s silent:%o payload:%o', eventType, this.silent, meta); if (this.silent) { return Promise.resolve(); } if (https === undefined) { https = RSVP.denodeify(require('https')); } var url = provider.call( this, eventType, extend(meta, getVersions()), Date.now(), (this.adapterServers && this.adapterServers[eventType]) ); if (this.adapterUrls) { url = this.adapterUrls[eventType]; } debug('http %o', url); // don't attach default `on('error')` handler and swallow errors return https.get(url).on('error', function(/*error*/) {}); }; Leek.prototype._getConfigObject = function() { return { name: this.name, version: this.version, trackingCode: this.trackingCode }; }; Leek.prototype.track = function(meta) { return this._enqueue('appview', { name: meta.name, message: meta.message }); }; Leek.prototype.trackError = function(meta) { return this._enqueue('exception', { description: meta.description, fatal: meta.isFatal }); }; Leek.prototype.trackTiming = function(meta) { return this._enqueue('timing', { category: meta.category, variable: meta.variable, value: meta.value, label: meta.label }); }; Leek.prototype.trackEvent = function(meta) { return this._enqueue('event', { name: meta.name, category: meta.category, label: meta.label, value: meta.value }); }; module.exports = Leek;