Repository: incubator-senssoft-useralejs Updated Branches: refs/heads/SENSSOFT-192 [created] 4b6c51cc1
SENSSOFT-192: Added basic interval logging on a subset of events. Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/commit/4b6c51cc Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/tree/4b6c51cc Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/diff/4b6c51cc Branch: refs/heads/SENSSOFT-192 Commit: 4b6c51cc1f5047c43a12524e39d79bff85b89dc7 Parents: c8ad449 Author: msbeard <msbe...@apache.org> Authored: Fri Jul 21 17:12:49 2017 -0400 Committer: msbeard <msbe...@apache.org> Committed: Fri Jul 21 17:12:49 2017 -0400 ---------------------------------------------------------------------- package.json | 2 +- src/attachHandlers.js | 11 +++++++ src/packageLogs.js | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/blob/4b6c51cc/package.json ---------------------------------------------------------------------- diff --git a/package.json b/package.json index 7875ca1..ff4f7e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "useralejs", - "version": "0.1.0", + "version": "0.2.0", "description": "Javascript Client for UserAle", "main": "build/userale.js", "scripts": { http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/blob/4b6c51cc/src/attachHandlers.js ---------------------------------------------------------------------- diff --git a/src/attachHandlers.js b/src/attachHandlers.js index 14f8525..70f3793 100644 --- a/src/attachHandlers.js +++ b/src/attachHandlers.js @@ -16,8 +16,10 @@ */ import { packageLog } from './packageLogs.js'; +import { packageIntervalLog } from './packageLogs'; var events; +var intervalEvents; var bufferBools; var bufferedEvents; var windowEvents; @@ -56,6 +58,9 @@ export function defineDetails(config) { 'resize' : function() { return { 'width' : window.outerWidth, 'height' : window.outerHeight }; } }; + //@todo: Investigate drag events and their behavior + intervalEvents = ['click', 'focus', 'blur', 'input', 'change', 'mouseover', 'submit']; + windowEvents = ['load', 'blur', 'focus']; } @@ -73,6 +78,12 @@ export function attachHandlers(config) { }, true); }); + intervalEvents.forEach(function(ev) { + document.addEventListener(ev, function(e) { + packageIntervalLog(e); + }, true); + }); + Object.keys(bufferedEvents).forEach(function(ev) { bufferBools[ev] = true; http://git-wip-us.apache.org/repos/asf/incubator-senssoft-useralejs/blob/4b6c51cc/src/packageLogs.js ---------------------------------------------------------------------- diff --git a/src/packageLogs.js b/src/packageLogs.js index 9fa1156..74d0e8c 100644 --- a/src/packageLogs.js +++ b/src/packageLogs.js @@ -18,6 +18,15 @@ var logs; var config; +// Interval Logging Globals +var intervalID; +var intervalType; +var intervalPath; +var intervalTimer; +var intervalCounter; +var intervalLog; + + /** * Assigns the config and log container to be used by the logging functions. * @param {Array} newLogs Log container. @@ -26,6 +35,12 @@ var config; export function initPackager(newLogs, newConfig) { logs = newLogs; config = newConfig; + intervalID = null; + intervalType = null; + intervalPath = null; + intervalTimer = null; + intervalCounter = 0; + intervalLog = null; } /** @@ -50,6 +65,7 @@ export function packageLog(e, detailFcn) { 'clientTime' : Math.floor((e.timeStamp && e.timeStamp > 0) ? config.time(e.timeStamp) : Date.now()), 'location' : getLocation(e), 'type' : e.type, + 'logType': 'raw', 'userAction' : true, 'details' : details, 'userId' : config.userId, @@ -64,6 +80,62 @@ export function packageLog(e, detailFcn) { } /** + * Track intervals and gather details about it. + * @param {Object} e + * @return boolean + */ +export function packageIntervalLog(e) { + var target = getSelector(e.target); + var path = buildPath(e); + var type = e.type; + var timestamp = Math.floor((e.timeStamp && e.timeStamp > 0) ? config.time(e.timeStamp) : Date.now()); + + // Init - this should only happen once on initialization + if (intervalID == null) { + intervalID = target; + intervalType = type; + intervalPath = path; + intervalTimer = timestamp; + intervalCounter = 0; + } + + if (intervalID !== target || intervalType !== type) { + // When to create log? On transition end + // @todo Possible for intervalLog to not be pushed in the event the interval never ends... + intervalLog = { + 'target': intervalID, + 'path': intervalPath, + 'count': intervalCounter, + 'duration': timestamp - intervalTimer, // microseconds + 'location': null, + 'type': intervalType, + 'logType': 'interval', + 'userAction': false, + 'userId': config.userId, + 'toolVersion': config.version, + 'toolName': config.toolName, + 'useraleVersion': config.useraleVersion + }; + + logs.push(intervalLog); + + // Reset + intervalID = target; + intervalType = type; + intervalPath = path; + intervalTimer = timestamp; + intervalCounter = 0; + } + + // Interval is still occuring, just update counter + if (intervalID == target && intervalType == type) { + intervalCounter = intervalCounter + 1; + } + + return true; +} + +/** * Extracts coordinate information from the event * depending on a few browser quirks. * @param {Object} e The event to extract coordinate information from.