diff --git a/Page-tracking-extension/content.js b/Page-tracking-extension/content.js index e1ba5a4..0d513c9 100644 --- a/Page-tracking-extension/content.js +++ b/Page-tracking-extension/content.js @@ -1,40 +1,40 @@ -// Logging time spent on a page -$(document).ready(function() { - var user_id = "dummy"; - - var start; - var end; - var time_spent; - - // $(window).on('focus', function() { - start = Date.now(); - // }); - console.log("start = ", start) - - $(window).on('blur', function() { - end = Date.now(); - console.log("end = ", end); - time_spent = (end - start)/1000; - console.log("time_spent = ", time_spent); - - var evtData = { - "userId": user_id, - "evt_type": "Time Spent", - "pageHTML": document.URL, - "object_id": 0, - "evt_datetime": time_spent, - "evt_timestamp": Date.now() - }; - console.log(evtData); - - - // Sending data to background.js - chrome.runtime.sendMessage({'evtData': evtData, 'quesData': null}, function(response) { - // console.log(response.BgResponse); - }); - }); -}); +// // Logging time spent on a page +// $(document).ready(function() { +// var user_id = "dummy"; + +// var start; +// var end; +// var time_spent; + +// $(window).on('focus', function() { +// start = Date.now(); +// }); +// console.log("start = ", start) + +// $(window).on('blur', function() { +// end = Date.now(); +// console.log("end = ", end); +// time_spent = (end - start)/1000; +// console.log("time_spent = ", time_spent); + +// var evtData = { +// "userId": user_id, +// "evt_type": "Time Spent", +// "pageHTML": document.URL, +// "object_id": 0, +// "evt_datetime": time_spent, +// "evt_timestamp": Date.now() +// }; +// console.log(evtData); + + +// // Sending data to background.js +// chrome.runtime.sendMessage({'evtData': evtData, 'quesData': null}, function(response) { +// // console.log(response.BgResponse); +// }); +// }); +// }); diff --git a/Page-tracking-extension/popup.html b/Page-tracking-extension/popup.html index 9e79d5a..940959c 100644 --- a/Page-tracking-extension/popup.html +++ b/Page-tracking-extension/popup.html @@ -7,6 +7,6 @@

Behavioral Logging

- + \ No newline at end of file diff --git a/Page-tracking-extension/popup.js b/Page-tracking-extension/popup.js index 56ecd85..ebb01a5 100644 --- a/Page-tracking-extension/popup.js +++ b/Page-tracking-extension/popup.js @@ -1,7 +1,9 @@ document.addEventListener('DOMContentLoaded', function() { var checkPageButton = $('#checkPage'); checkPageButton.on('click', function() { - console.log("Cliked on checkPage"); + // console.log("Cliked on checkPage"); + window.open('https://localhost:5000', '_blank'); + win.focus(); }); }, false); \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..fc45321 --- /dev/null +++ b/README.txt @@ -0,0 +1,43 @@ +Implementation Details: +The assignment is implemented using flask (python 2.7) and sqlite3 for backend and javascript, jquery for frontend +Folder structure: Main folder contains following folders. + Page-tracking-extension - contains all the browser extension files + static - css and jquery files + templates - html pages + +Setup Details: +Since the project is implemented in sqlite3 without ORM, it doesn't need any standalone database installation. However some python packages are required which are mentioned in requirements.txt in main project folder. +"requirements.txt" is formed using "pip freeze > " which lists out all the packages used in the project. To install all these packages, simply run "pip install -r requirements.txt" from project folder + +Database is present in UserTracking.db which four tables. + UserActions - Main table to store user actions to access them in profile page + UserDetails - LogIn and password details pf the user - Already contains 3 users + UserHistory - Stores the login history of the user + ObjectDetails - Contains question and answer details taken from the page + +Install browser extension: +1) Open Chrome and go to "chrome://extensions" +2) Make sure "Developer Mode" checkbox is checked +3) Click "Load unpacked extension" and select the Page-tracking-extension folder in the project directory +4) Make sure it is "Enabled" +This will install the browser extension. + +How to run the application: +1) Open terminal from project folder +2) Install dependencies - "pip install -r requirements.txt" +3) Run "python app.py" - this starts the server +4) Open browser and access "https://localhost:5000" + --- OR --- + Click on "Go to HomePage" button in the popup of chrome extension + +Features Implemented: +1) Login page shows a form to take login and password data, shows previous login history +2) Once logged in, app redirects to profile page where you can see the description of the actions being tracked and the user's behavioral logging data +3) At each screen, you have an option to add new user by clicking on "Add User" which redirects to another page to take new userid and new password as input +4) The application already consists of three users - "aaa", "bbb" and "ccc", all with password - "123" +5) Six actions are begin tracked by the application and it's details can be see in profile page once logged in + +Note: +1) The web application is using a https server +2) Starting page for the application would be /login.html +3) Local URL - https://localhost:5000 diff --git a/UserTracking.db b/UserTracking.db index 4cd4fcb..efa735a 100644 Binary files a/UserTracking.db and b/UserTracking.db differ diff --git a/app.py b/app.py index 580a6a9..8ae8a49 100644 --- a/app.py +++ b/app.py @@ -50,7 +50,7 @@ def home(): post = info[0] + " --> " + info[1] + " --> " + info[2] posts.append(post) - return render_template("index.html", posts=posts) + return render_template("index.html", posts=posts, userId=username) # By default, flask assumes GET method diff --git a/app.pyc b/app.pyc deleted file mode 100644 index de3f705..0000000 Binary files a/app.pyc and /dev/null differ diff --git a/models.pyc b/models.pyc deleted file mode 100644 index d56028c..0000000 Binary files a/models.pyc and /dev/null differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a858534 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,173 @@ +alabaster==0.7.10 +anaconda-client==1.6.3 +anaconda-navigator==1.6.2 +anaconda-project==0.6.0 +asn1crypto==0.22.0 +astroid==1.4.9 +astropy==1.3.2 +Babel==2.4.0 +backports-abc==0.5 +backports.shutil-get-terminal-size==1.0.0 +backports.ssl-match-hostname==3.4.0.2 +beautifulsoup4==4.6.0 +bitarray==0.8.1 +blaze==0.10.1 +bleach==1.5.0 +bokeh==0.12.5 +boto==2.46.1 +Bottleneck==1.2.1 +cdecimal==2.3 +cffi==1.10.0 +chardet==3.0.3 +click==6.7 +cloudpickle==0.2.2 +clyent==1.2.2 +colorama==0.3.9 +conda==4.3.21 +configparser==3.5.0 +contextlib2==0.5.5 +cryptography==1.8.1 +cycler==0.10.0 +Cython==0.25.2 +cytoolz==0.8.2 +dask==0.14.3 +datashape==0.5.4 +decorator==4.0.11 +distributed==1.16.3 +docutils==0.13.1 +entrypoints==0.2.2 +enum34==1.1.6 +et-xmlfile==1.0.1 +fastcache==1.0.2 +Flask==0.12.2 +Flask-Cors==3.0.3 +Flask-Login==0.4.0 +Flask-SQLAlchemy==2.2 +funcsigs==1.0.2 +functools32==3.2.3.post2 +futures==3.1.1 +gevent==1.2.1 +greenlet==0.4.12 +grin==1.2.1 +gunicorn==19.7.1 +h5py==2.7.0 +HeapDict==1.0.0 +html5lib==0.999 +idna==2.5 +imagesize==0.7.1 +ipaddress==1.0.18 +ipykernel==4.6.1 +ipython==5.3.0 +ipython-genutils==0.2.0 +ipywidgets==6.0.0 +isort==4.2.5 +itsdangerous==0.24 +jdcal==1.3 +jedi==0.10.2 +Jinja2==2.9.6 +jsonschema==2.6.0 +jupyter==1.0.0 +jupyter-client==5.0.1 +jupyter-console==5.1.0 +jupyter-core==4.3.0 +lazy-object-proxy==1.2.2 +llvmlite==0.18.0 +locket==0.2.0 +lxml==3.7.3 +MarkupSafe==1.0 +matplotlib==2.0.2 +mistune==0.7.4 +mpmath==0.19 +msgpack-python==0.4.8 +multipledispatch==0.4.9 +navigator-updater==0.1.0 +nbconvert==5.1.1 +nbformat==4.3.0 +networkx==1.11 +nltk==3.2.3 +nose==1.3.7 +notebook==5.0.0 +numba==0.33.0+0.ge79330a.dirty +numexpr==2.6.2 +numpy==1.12.1 +numpydoc==0.6.0 +odo==0.5.0 +olefile==0.44 +openpyxl==2.4.7 +packaging==16.8 +pandas==0.20.1 +pandocfilters==1.4.1 +partd==0.3.8 +pathlib2==2.2.1 +patsy==0.4.1 +pbr==3.1.1 +pep8==1.7.0 +pexpect==4.2.1 +pickleshare==0.7.4 +Pillow==4.1.1 +ply==3.10 +prompt-toolkit==1.0.14 +psutil==5.2.2 +ptyprocess==0.5.1 +py==1.4.33 +pycairo==1.10.0 +pycosat==0.6.2 +pycparser==2.17 +pycrypto==2.6.1 +pycurl==7.43.0 +pyflakes==1.5.0 +Pygments==2.2.0 +pylint==1.6.4 +pyodbc==4.0.16 +pyOpenSSL==17.0.0 +pyparsing==2.1.4 +pytest==3.0.7 +python-dateutil==2.6.0 +pytz==2017.2 +PyWavelets==0.5.2 +PyYAML==3.12 +pyzmq==16.0.2 +QtAwesome==0.4.4 +qtconsole==4.3.0 +QtPy==1.2.1 +requests==2.14.2 +rope==0.9.4 +scandir==1.5 +scikit-image==0.13.0 +scikit-learn==0.18.1 +scipy==0.19.0 +seaborn==0.7.1 +simplegeneric==0.8.1 +simplejson==3.11.1 +singledispatch==3.4.0.3 +six==1.10.0 +snowballstemmer==1.2.1 +sortedcollections==0.5.3 +sortedcontainers==1.5.7 +Sphinx==1.5.6 +spyder==3.1.4 +SQLAlchemy==1.1.9 +statsmodels==0.8.0 +stevedore==1.25.0 +subprocess32==3.2.7 +sympy==1.0 +tables==3.3.0 +tblib==1.3.2 +terminado==0.6 +testpath==0.3 +toolz==0.8.2 +tornado==4.5.1 +traitlets==4.3.2 +unicodecsv==0.14.1 +update==0.4.4 +virtualenv==15.1.0 +virtualenv-clone==0.2.6 +virtualenvwrapper==4.7.2 +wcwidth==0.1.7 +Werkzeug==0.12.2 +widgetsnbextension==2.0.0 +wrapt==1.10.10 +xlrd==1.0.0 +XlsxWriter==0.9.6 +xlwt==1.2.0 +zict==0.1.2 diff --git a/templates/index.html b/templates/index.html index e03431f..d3963c2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,13 +2,22 @@ {% block content %}

- StackOverflow link - + --> StackOverflow link - stackoverflow tag=java

+

Following actions are tracked in the current application.
+ 1) Visited - Tracks all the user visited question pages. This gives us the idea on the type of questions user interested in. From the votes, number of answers of the visited question gives us the insight into the taste of user
+ 2) Upvoted/ Downvoted - Can also be used for user's reading preferences on length of material, language and complexity level. Since this is explicit, chances of data being high accuracy
+ 3) Shared - User's high interest areas/ topics can be discovered by his sharing history
+ 4) Asked Question - Helps to find the "current focus area" of the user and also the area in which he hopes to improve
+ 5) Posted Answer - Can be used to find out the level of expertise of user on different topics based on his answer + s popularity
+ +

-

Your activity History

+
Hello {{ userId }}, below is your activity recently
Add User