'use strict'; var debug = require('debug')('leek:provider'); var querystring = require('querystring'); var getAppViewObject = function() { var now = Date.now(); var type = arguments[0]; var meta = arguments[1]; var id = arguments[2]; var payload = { v: 1, t: type, aip: 1, tid: this.trackingCode, cid: this.clientId, an: this.globalName, av: this.version, cd: meta.message, cd1: meta.platform,// os version cd2: meta.version, // node version qt: now - parseInt(id, 10), z: now }; debug('getAppViewObject %o', payload); return payload; }; var getExceptionObject = function() { var now = Date.now(); var type = arguments[0]; var meta = arguments[1]; var id = arguments[2]; var payload = { v: 1, t: type, aip: 1, tid: this.trackingCode, cid: this.clientId, an: this.globalName, av: this.version, cd1: meta.platform,// os version cd2: meta.version, // node version exd: meta.description + ' ' + meta.platform + ', node ' + meta.version, exf: meta.fatal, qt: now - parseInt(id, 10), z: now }; debug('getExceptionObject %o', payload); return payload; }; var getTimingObject = function() { var now = Date.now(); var type = arguments[0]; var meta = arguments[1]; var id = arguments[2]; var payload = { v: 1, t: type, aip: 1, tid: this.trackingCode, cid: this.clientId, an: this.globalName, av: this.version + ' ' + meta.platform + ', node ' + meta.version, utc: meta.category, utv: meta.variable, utt: meta.value, utl: meta.label, cd1: meta.platform,// os version cd2: meta.version, // node version qt: now - parseInt(id, 10), z: now }; debug('getTimingObject %o', payload); return payload; }; var getEventObject = function() { var now = Date.now(); var type = arguments[0]; var meta = arguments[1]; var id = arguments[2]; var payload = { v: 1, t: type, aip: 1, tid: this.trackingCode, cid: this.clientId, an: this.globalName, av: this.version, ec: meta.category, ea: meta.globalName, el: meta.value + ' ' + meta.platform + ', node ' + meta.version, ev: meta.label, cd1: meta.platform,// os version cd2: meta.version, // node version qt: now - parseInt(id, 10), z: now }; debug('getEventObject %o', payload); return payload; }; var gaUrl = 'https://google-analytics.com/collect?'; var adapters = { appview: function() { return (arguments[3] || gaUrl) + querystring.stringify(getAppViewObject.apply(this, arguments)); }, exception: function() { return (arguments[3] || gaUrl) + querystring.stringify(getExceptionObject.apply(this, arguments)); }, timing: function() { return (arguments[3] || gaUrl) + querystring.stringify(getTimingObject.apply(this, arguments)); }, event: function() { return (arguments[3] || gaUrl) + querystring.stringify(getEventObject.apply(this, arguments)); } }; module.exports = function(eventType) { var adapter = adapters[eventType].apply(this, arguments); debug('eventType: %s url: %s', eventType, adapter.url); return adapter; };