CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/builder/components/metrics/metrics-tracker.js

Summary

Maintainability
A
1 hr
Test Coverage
var _ = require('underscore');
var MetricsModel = require('./metrics-model');
var MetricsTypes = require('./metrics-types');

/**
 *  Metrics singleton tracker.
 *  It sends any event to metrics endpoint.
 */

module.exports = (function () {
  return {
    init: function (opts) {
      if (!opts || !opts.configModel) { throw new Error('configModel is required'); }

      this._userId = opts.userId;
      this._visId = opts.visId;
      this._configModel = opts.configModel;
    },

    track: function (eventName, eventProperties) {
      if (!eventName) { throw new Error('eventName is required'); }
      this._checkEventIsConfigured(eventName);

      var metricModel = new MetricsModel({
        eventName: eventName,
        eventProperties: eventProperties
      }, {
        userId: this._userId,
        visId: this._visId,
        configModel: this._configModel
      });

      metricModel.save();
    },

    _checkEventIsConfigured: function (eventName) {
      var allowed = _.values(MetricsTypes);
      if (!_.contains(allowed, eventName)) {
        throw new Error(`"${eventName}" is not an allowed event type`);
      }
    }
  };
})();