diff options
Diffstat (limited to 'assets/scripts/metrics.js')
-rw-r--r-- | assets/scripts/metrics.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/assets/scripts/metrics.js b/assets/scripts/metrics.js new file mode 100644 index 0000000..1c415f0 --- /dev/null +++ b/assets/scripts/metrics.js @@ -0,0 +1,101 @@ +'use strict'; + +(function() { + var client = new Keen({ + projectId: '56bfd55296773d74919d1035', + writeKey: 'f59539f4db693c0d240435c13d273e1d' + + '702cc524d3ecadc4095f13cc0e8ab251' + + '96c8615c2c815a6d2f4b18ac08b99740' + + '67b7b1740cd469a761fffd7632065554' + + '730d6d1a07b32df59516f94144799791' + + 'b03e9776cb9b659b9128c0b79b6e396f' + }); + + setTimeout(function() { + client.addEvent('pageviews', getMetrics(), function(err, res) { + if (err) { + console.error(err); + } + }); + }, 1000); + + var getMetrics = function() { + var metrics = { + timing: getTimingMetrics(), + source: getSourceMetrics(), + visitor: getVisitorMetrics(), + page: getPageMetrics() + }; + return metrics; + }; + + var getTimingMetrics = function() { + if (window.performance && window.performance.timing) { + var t = window.performance.timing; + return { + redirect: t.redirectEnd - t.redirectStart, + appCache: t.domainLookupStart - t.fetchStart, + dns: t.domainLookupEnd - t.domainLookupStart, + tcp: t.connectEnd - t.connectStart, + request: t.responseStart - t.requestStart, + response: t.responseEnd - t.responseStart, + processing: t.domComplete - t.domLoading, + onLoad: t.loadEventEnd - t.loadEventStart, + click_to_interactive: t.domInteractive - t.navigationStart, + total: t.loadEventEnd - t.navigationStart + }; + } else { + return {}; + } + }; + + var getVisitorMetrics = function() { + return { + browser: getBrowser(), + language: window.navigator.language + }; + }; + + var getSourceMetrics = function() { + if (window.document.referrer) { + var d = window.document.referrer.match(/\/\/(.+)\//); + var referring_domain = d ? d[1] : ''; + } else { + var referring_domain = ''; + } + return { + referring_domain: referring_domain, + referrer: window.document.referrer + }; + }; + + var getBrowser = function() { + var ua = window.navigator.userAgent; + if (/Firefox/.test(ua) && !/Seamonkey/.test(ua)) { + return 'Firefox'; + } else if (/Seamonkey/.test(ua)) { + return 'Seamonkey'; + } else if (/Chrome/.test(ua) && !/Chromium/.test(ua)) { + return 'Chrome'; + } else if (/Chromium/.test(ua)) { + return 'Chromium'; + } else if ( + /Safari/.test(ua) && !/Chrome/.test(ua) && !/Chromium/.test(ua) + ) { + return 'Safari'; + } else if (/OPR/.test(ua) || /Opera/.test(ua)) { + return 'Opera'; + } else if (/MSIE/.test(ua)) { + return 'Internet Explorer'; + } else { + return 'Unknown'; + } + }; + + var getPageMetrics = function() { + return { + path: window.location.pathname, + title: window.document.title + }; + }; +})(); |