UNPKG

@mrporter/frontend-monitoring

Version:

Utils and Events for MRP front end monitoring

132 lines (103 loc) 5.06 kB
'use strict'; 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' }] } }); }