@mrporter/frontend-monitoring
Version:
Utils and Events for MRP front end monitoring
132 lines (103 loc) • 5.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
exports.now = now;
var _keenTracking = require('keen-tracking');
var _keenTracking2 = _interopRequireDefault(_keenTracking);
var _events = require('./events');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var FrontEndMonitoring = function () {
function FrontEndMonitoring() {
var _this = this;
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, FrontEndMonitoring);
this.trackEvent = function (event) {
var sampleRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
if (!_this.client) {
console.log('Keen Event (Dev Mode): ', event);
} else if (event && Math.random() < sampleRate) {
var collection = event.collection,
event_data = event.event_data;
_this.client.recordEvent(collection, { event_data: event_data });
}
};
var _config$globalPropert = config.globalProperties,
globalProperties = _config$globalPropert === undefined ? {} : _config$globalPropert,
keenConfig = _objectWithoutProperties(config, ['globalProperties']);
var app_name = globalProperties.app_name,
business = globalProperties.business;
if (process && process.env && process.env.NODE_ENV !== 'production') {
if (!app_name) {
console.warn('Warning: No app_name property set');
}
if (!business) {
console.warn('Warning: No business property set');
}
}
if (keenConfig.projectId) {
this.client = new _keenTracking2.default(keenConfig);
this.client.extendEvents(function () {
return mergeWithDefaultProperties(globalProperties);
});
}
}
_createClass(FrontEndMonitoring, [{
key: 'trackPagePerformance',
value: function trackPagePerformance() {
var _this2 = this;
var sampleRate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
this.trackEvent((0, _events.pagePerformance)(), sampleRate);
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
_this2.trackEvent((0, _events.domPerformance)(), sampleRate);
}
};
}
}]);
return FrontEndMonitoring;
}();
exports.default = FrontEndMonitoring;
function now() {
return window.performance ? window.performance.now() : Date.now();
}
function mergeWithDefaultProperties(properties) {
return _extends({}, properties, {
ip_address: '${keen.ip}',
user_agent: '${keen.user_agent}',
page_url: window.location.href,
referrer: { url: document.referrer },
keen: {
addons: [{
name: 'keen:ip_to_geo',
input: {
ip: 'ip_address',
remove_ip_property: true
},
output: 'ip_geo_info'
}, {
name: 'keen:ua_parser',
input: {
ua_string: 'user_agent'
},
output: 'parsed_user_agent'
}, {
name: 'keen:url_parser',
input: {
url: 'page_url'
},
output: 'parsed_page_url'
}, {
name: 'keen:referrer_parser',
input: {
referrer_url: 'referrer.url'
},
output: 'referrer.info'
}]
}
});
}