From 9bb4d8c633098ad5d40c9c5fe87759be43007a96 Mon Sep 17 00:00:00 2001 From: Vin Halbwachs Date: Thu, 7 May 2015 09:01:52 -0700 Subject: [PATCH 1/3] Remove whitespace --- jasminetest/loggly-tracker-spec.js | 100 ++++++++++++++--------------- src/loggly.tracker.js | 54 ++++++++-------- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/jasminetest/loggly-tracker-spec.js b/jasminetest/loggly-tracker-spec.js index 2949111..1b626b2 100644 --- a/jasminetest/loggly-tracker-spec.js +++ b/jasminetest/loggly-tracker-spec.js @@ -4,16 +4,16 @@ describe("loggly.tracker", function() { function resetCookie() { document.cookie = 'logglytrackingsession=; expires=Thu, 01 Jan 1970 00:00:01 GMT'; } - + beforeEach(function() { resetCookie(); _LTracker.setSession(); jasmine.Clock.useMock(); - + _LTracker.push({'logglyKey': baseLogglyKey}) jasmine.Clock.tick(20); }); - + afterEach(function() { _LTracker.session_id = ''; resetCookie(); @@ -22,28 +22,28 @@ describe("loggly.tracker", function() { it("exists", function() { expect(_LTracker).not.toBe(null); }); - + it("sets and reads cookies", function() { var value = 'randomcookievaluelogglytracker'; _LTracker.setCookie(value); var i = document.cookie.indexOf(value); - + expect(document.cookie.indexOf(value)).toBeGreaterThan(-1); expect(document.cookie.indexOf('logglytrackingsession')).toBeGreaterThan(-1); expect(_LTracker.readCookie()).toBe(value); }); - - it("sets uuid automatically to object and cookie", function() { + + it("sets uuid automatically to object and cookie", function() { var uuid = _LTracker.session_id; - + expect(uuid).not.toBe(null); expect(document.cookie.indexOf(uuid)).toBeGreaterThan(-1); expect(_LTracker.readCookie()).toBe(uuid); }); - - it("sets uuid manually to object and cookie", function() { + + it("sets uuid manually to object and cookie", function() { var initial = '1324123412'; - + spyOn(_LTracker, 'setCookie').andCallThrough(); _LTracker.setSession(initial); @@ -51,119 +51,119 @@ describe("loggly.tracker", function() { expect(_LTracker.session_id).toBe(initial); expect(document.cookie.indexOf(initial)).toBeGreaterThan(-1); expect(_LTracker.readCookie()).toBe(initial); - + var replacement = '9932483828'; _LTracker.setSession(replacement); expect(_LTracker.readCookie()).toBe(replacement); - + _LTracker.session_id = ''; // reset }); - + it("does not auto replace session id", function() { var uuid = _LTracker.session_id; _LTracker.setSession(); // second call that should be no op - + expect(_LTracker.readCookie()).toBe(uuid); - + _LTracker.session_id = ''; }); - + it("sets loggly key correctly by pushing", function() { var originalKey = _LTracker.key, madeupKey = 'madeupkey'; - + spyOn(_LTracker, 'track'); _LTracker.push({'logglyKey': madeupKey}); - + jasmine.Clock.tick(20); - + var key = _LTracker.key; expect(_LTracker.key).toBe(madeupKey); expect(_LTracker.inputUrl).toContain(madeupKey + '.gif'); expect(_LTracker.track).not.toHaveBeenCalled(); - + _LTracker.push({'logglyKey': originalKey}); // put it back to original state jasmine.Clock.tick(20); - + expect(_LTracker.key).toBe(originalKey); }); - + it("sets custom collector domain", function() { var customDomain = "logglyidontexist.com"; _LTracker.push({'logglyCollectorDomain': customDomain}); _LTracker.push({'logglyKey': _LTracker.key}); // kick it so it sets the collector domain - + jasmine.Clock.tick(20); - + expect(_LTracker.logglyCollectorDomain).toBe(customDomain); expect(_LTracker.inputUrl).toContain('http://' + customDomain + '/inputs/'); - + delete _LTracker.logglyCollectorDomain; _LTracker.push({'logglyKey': _LTracker.key}); jasmine.Clock.tick(20); - + }); - + it("calls track when pushing normal tracking object", function() { spyOn(_LTracker, 'track'); - + var data = {'hoover': 'isabeaver'}; - + _LTracker.push(data); jasmine.Clock.tick(20); - + expect(_LTracker.track).toHaveBeenCalledWith(data); }); - + it("calls track with formatted message if single string is passed", function() { spyOn(_LTracker, 'track'); - + var data = 'hooverisabeaver'; - + _LTracker.push(data); jasmine.Clock.tick(20); - + expect(_LTracker.track).toHaveBeenCalledWith({'text': data}); }); - + it("does not call track when pushed junk", function() { spyOn(_LTracker, 'track'); - + _LTracker.push(''); jasmine.Clock.tick(20); - + expect(_LTracker.track).not.toHaveBeenCalled(); - + _LTracker.push(); jasmine.Clock.tick(20); - + expect(_LTracker.track).not.toHaveBeenCalled(); }); - + it("can instantiate additional loggly tracker", function() { expect(LogglyTracker).not.toBe(null); - + var localTracker = new LogglyTracker(), madeupKey = 'madeupkey', lKey = _LTracker.key; - + localTracker.push({'logglyKey':madeupKey}); jasmine.Clock.tick(20); - + expect(localTracker.key).toBe(madeupKey); expect(_LTracker.key).not.toBe(madeupKey); expect(_LTracker.key).toBe(lKey); - + spyOn(localTracker, 'track'); spyOn(_LTracker, 'track'); - + var data = {'randomdata':'random'}; - + localTracker.push(data); jasmine.Clock.tick(20); - + expect(localTracker.track).toHaveBeenCalledWith(data); expect(_LTracker.track).not.toHaveBeenCalled() }); - -}); \ No newline at end of file + +}); diff --git a/src/loggly.tracker.js b/src/loggly.tracker.js index 3b0bb1d..47d4f68 100644 --- a/src/loggly.tracker.js +++ b/src/loggly.tracker.js @@ -10,28 +10,28 @@ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); - }); + }); } - + function LogglyTracker() { this.key = false; this.sendConsoleErrors = false; } - + function setKey(tracker, key) { tracker.key = key; tracker.setSession(); setInputUrl(tracker); } - + function setSendConsoleError(tracker, sendConsoleErrors) { tracker.sendConsoleErrors = sendConsoleErrors; - + if(tracker.sendConsoleErrors === true){ var _onerror = window.onerror; //send console error messages to Loggly window.onerror = function (msg, url, line, col){ - tracker.push({ + tracker.push({ category: 'BrowserJsException', exception: { message: msg, @@ -40,22 +40,22 @@ colno: col, } }); - + if (_onerror && typeof _onerror === 'function') { _onerror.apply(window, arguments); } }; } } - + function setInputUrl(tracker) { - tracker.inputUrl = LOGGLY_INPUT_PREFIX + tracker.inputUrl = LOGGLY_INPUT_PREFIX + (tracker.logglyCollectorDomain || LOGGLY_COLLECTOR_DOMAIN) + '/inputs/' - + tracker.key + + tracker.key + LOGGLY_INPUT_SUFFIX; } - + LogglyTracker.prototype = { setSession: function(session_id) { if(session_id) { @@ -71,14 +71,14 @@ }, push: function(data) { var type = typeof data; - + if( !data || !(type === 'object' || type === 'string') ) { return; } var self = this; - + if(type === 'string') { data = { 'text': data @@ -88,34 +88,34 @@ self.logglyCollectorDomain = data.logglyCollectorDomain; return; } - + if(data.sendConsoleErrors !== undefined) { setSendConsoleError(self, data.sendConsoleErrors); } - + if(data.logglyKey) { setKey(self, data.logglyKey); return; } - + if(data.session_id) { self.setSession(data.session_id); return; } } - + if(!self.key) { return; } - + self.track(data); - - + + }, track: function(data) { // inject session id data.sessionId = this.session_id; - + try { var im = new Image(), q = 'PLAINTEXT=' + encodeURIComponent(JSON.stringify(data)); @@ -145,11 +145,11 @@ document.cookie = LOGGLY_SESSION_KEY + '=' + value; } }; - + var existing = window._LTracker; - + var tracker = new LogglyTracker(); - + if(existing && existing.length ) { var i = 0, eLength = existing.length; @@ -157,9 +157,9 @@ tracker.push(existing[i]); } } - + window._LTracker = tracker; // default global tracker - + window.LogglyTracker = LogglyTracker; // if others want to instantiate more than one tracker - + })(window, document); From 01b695ee7aad1b765d9bd5d9674e02df54c5357e Mon Sep 17 00:00:00 2001 From: Vin Halbwachs Date: Thu, 7 May 2015 09:08:09 -0700 Subject: [PATCH 2/3] Added Cache Buster so images never get cached by browser or proxy server --- src/loggly.tracker.js | 6 ++++-- src/loggly.tracker.min.js | 2 +- src/loggly.tracker.min.map | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/loggly.tracker.js b/src/loggly.tracker.js index 47d4f68..b9342b5 100644 --- a/src/loggly.tracker.js +++ b/src/loggly.tracker.js @@ -118,8 +118,10 @@ try { var im = new Image(), - q = 'PLAINTEXT=' + encodeURIComponent(JSON.stringify(data)); - im.src = this.inputUrl + q; + q = 'PLAINTEXT=' + encodeURIComponent(JSON.stringify(data)), + // prevent browsers and proxy servers from caching tracking pixel + cacheBuster = 'CACHEBUST=' + Math.random() * 10000000000000000; + im.src = this.inputUrl + q + '&' + cacheBuster; } catch (ex) { if (window && window.console && typeof window.console.log === 'function') { console.log("Failed to log to loggly because of this exception:\n" + ex); diff --git a/src/loggly.tracker.min.js b/src/loggly.tracker.min.js index 7798349..5be03f0 100644 --- a/src/loggly.tracker.min.js +++ b/src/loggly.tracker.min.js @@ -1,2 +1,2 @@ -!function(a,b){function c(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function d(){this.key=!1,this.sendConsoleErrors=!1}function e(a,b){a.key=b,a.setSession(),g(a)}function f(b,c){if(b.sendConsoleErrors=c,b.sendConsoleErrors===!0){var d=a.onerror;a.onerror=function(c,e,f,g){b.push({category:"BrowserJsException",exception:{message:c,url:e,lineno:f,colno:g}}),d&&"function"==typeof d&&d.apply(a,arguments)}}}function g(a){a.inputUrl=h+(a.logglyCollectorDomain||i)+"/inputs/"+a.key+j}var h="http"+("https:"===b.location.protocol?"s":"")+"://",i="logs-01.loggly.com",j=".gif?",k="logglytrackingsession",l=k.length+1;d.prototype={setSession:function(a){a?(this.session_id=a,this.setCookie(this.session_id)):this.session_id||(this.session_id=this.readCookie(),this.session_id||(this.session_id=c(),this.setCookie(this.session_id)))},push:function(a){var b=typeof a;if(a&&("object"===b||"string"===b)){var c=this;if("string"===b)a={text:a};else{if(a.logglyCollectorDomain)return void(c.logglyCollectorDomain=a.logglyCollectorDomain);if(void 0!==a.sendConsoleErrors&&f(c,a.sendConsoleErrors),a.logglyKey)return void e(c,a.logglyKey);if(a.session_id)return void c.setSession(a.session_id)}c.key&&c.track(a)}},track:function(b){b.sessionId=this.session_id;try{var c=new Image,d="PLAINTEXT="+encodeURIComponent(JSON.stringify(b));c.src=this.inputUrl+d}catch(e){a&&a.console&&"function"==typeof a.console.log&&(console.log("Failed to log to loggly because of this exception:\n"+e),console.log("Failed log data:",b))}},readCookie:function(){var a=b.cookie,c=a.indexOf(k);if(0>c)return!1;var d=a.indexOf(";",c+1);return d=0>d?a.length:d,a.slice(c+l,d)},setCookie:function(a){b.cookie=k+"="+a}};var m=a._LTracker,n=new d;if(m&&m.length){var o=0,p=m.length;for(o=0;p>o;o++)n.push(m[o])}a._LTracker=n,a.LogglyTracker=d}(window,document); +!function(a,b){function c(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function d(){this.key=!1,this.sendConsoleErrors=!1}function e(a,b){a.key=b,a.setSession(),g(a)}function f(b,c){if(b.sendConsoleErrors=c,b.sendConsoleErrors===!0){var d=a.onerror;a.onerror=function(c,e,f,g){b.push({category:"BrowserJsException",exception:{message:c,url:e,lineno:f,colno:g}}),d&&"function"==typeof d&&d.apply(a,arguments)}}}function g(a){a.inputUrl=h+(a.logglyCollectorDomain||i)+"/inputs/"+a.key+j}var h="http"+("https:"===b.location.protocol?"s":"")+"://",i="logs-01.loggly.com",j=".gif?",k="logglytrackingsession",l=k.length+1;d.prototype={setSession:function(a){a?(this.session_id=a,this.setCookie(this.session_id)):this.session_id||(this.session_id=this.readCookie(),this.session_id||(this.session_id=c(),this.setCookie(this.session_id)))},push:function(a){var b=typeof a;if(a&&("object"===b||"string"===b)){var c=this;if("string"===b)a={text:a};else{if(a.logglyCollectorDomain)return void(c.logglyCollectorDomain=a.logglyCollectorDomain);if(void 0!==a.sendConsoleErrors&&f(c,a.sendConsoleErrors),a.logglyKey)return void e(c,a.logglyKey);if(a.session_id)return void c.setSession(a.session_id)}c.key&&c.track(a)}},track:function(b){b.sessionId=this.session_id;try{var c=new Image,d="PLAINTEXT="+encodeURIComponent(JSON.stringify(b)),e="CACHEBUST="+1e16*Math.random();c.src=this.inputUrl+d+"&"+e}catch(f){a&&a.console&&"function"==typeof a.console.log&&(console.log("Failed to log to loggly because of this exception:\n"+f),console.log("Failed log data:",b))}},readCookie:function(){var a=b.cookie,c=a.indexOf(k);if(0>c)return!1;var d=a.indexOf(";",c+1);return d=0>d?a.length:d,a.slice(c+l,d)},setCookie:function(a){b.cookie=k+"="+a}};var m=a._LTracker,n=new d;if(m&&m.length){var o=0,p=m.length;for(o=0;p>o;o++)n.push(m[o])}a._LTracker=n,a.LogglyTracker=d}(window,document); //# sourceMappingURL=loggly.tracker.min.map \ No newline at end of file diff --git a/src/loggly.tracker.min.map b/src/loggly.tracker.min.map index 2d5263f..e015d4b 100644 --- a/src/loggly.tracker.min.map +++ b/src/loggly.tracker.min.map @@ -1 +1 @@ -{"version":3,"file":"loggly.tracker.min.js","sources":["loggly.tracker.js"],"names":["window","document","uuid","replace","c","r","Math","random","v","toString","LogglyTracker","this","key","sendConsoleErrors","setKey","tracker","setSession","setInputUrl","setSendConsoleError","_onerror","onerror","msg","url","line","col","push","category","exception","message","lineno","colno","apply","arguments","inputUrl","LOGGLY_INPUT_PREFIX","logglyCollectorDomain","LOGGLY_COLLECTOR_DOMAIN","LOGGLY_INPUT_SUFFIX","location","protocol","LOGGLY_SESSION_KEY","LOGGLY_SESSION_KEY_LENGTH","length","prototype","session_id","setCookie","readCookie","data","type","self","text","undefined","logglyKey","track","sessionId","im","Image","q","encodeURIComponent","JSON","stringify","src","ex","console","log","cookie","i","indexOf","end","slice","value","existing","_LTracker","eLength"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"loggly.tracker.min.js","sources":["loggly.tracker.js"],"names":["window","document","uuid","replace","c","r","Math","random","v","toString","LogglyTracker","this","key","sendConsoleErrors","setKey","tracker","setSession","setInputUrl","setSendConsoleError","_onerror","onerror","msg","url","line","col","push","category","exception","message","lineno","colno","apply","arguments","inputUrl","LOGGLY_INPUT_PREFIX","logglyCollectorDomain","LOGGLY_COLLECTOR_DOMAIN","LOGGLY_INPUT_SUFFIX","location","protocol","LOGGLY_SESSION_KEY","LOGGLY_SESSION_KEY_LENGTH","length","prototype","session_id","setCookie","readCookie","data","type","self","text","undefined","logglyKey","track","sessionId","im","Image","q","encodeURIComponent","JSON","stringify","cacheBuster","src","ex","console","log","cookie","i","indexOf","end","slice","value","existing","_LTracker","eLength"],"mappings":"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"} \ No newline at end of file From dfc18d6a0bfcd98da1b79f7297c7c0720687e936 Mon Sep 17 00:00:00 2001 From: Vin Halbwachs Date: Thu, 7 May 2015 09:08:41 -0700 Subject: [PATCH 3/3] Add Cache Buster to jasmine tests --- jasminetest/loggly-tracker-spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/jasminetest/loggly-tracker-spec.js b/jasminetest/loggly-tracker-spec.js index 1b626b2..9bdcfc1 100644 --- a/jasminetest/loggly-tracker-spec.js +++ b/jasminetest/loggly-tracker-spec.js @@ -166,4 +166,14 @@ describe("loggly.tracker", function() { expect(_LTracker.track).not.toHaveBeenCalled() }); + it("contains a cachebuster string", function() { + var imageStub = {}; + spyOn(window, 'Image').andReturn(imageStub); + spyOn(window.Math, 'random').andReturn(0.1234567890123456); + + _LTracker.push('test'); + jasmine.Clock.tick(20); + + expect(imageStub.src).toContain('&CACHEBUST=1234567890123456'); + }); });