Skip to content

Commit

Permalink
Removed time_spent logging as it is little buggy. Other cosmetic chan…
Browse files Browse the repository at this point in the history
…ges, added README.txt file
  • Loading branch information
susravan committed Sep 7, 2017
1 parent 08dbb2a commit 650e18b
Show file tree
Hide file tree
Showing 10 changed files with 268 additions and 41 deletions.
72 changes: 36 additions & 36 deletions Page-tracking-extension/content.js
Original file line number Diff line number Diff line change
@@ -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);
// });
// });
// });



Expand Down
2 changes: 1 addition & 1 deletion Page-tracking-extension/popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
</head>
<body>
<h1>Behavioral Logging</h1>
<button id="checkPage">Check this page now!</button>
<button id="checkPage">Go to HomePage</button>
</body>
</html>
4 changes: 3 additions & 1 deletion Page-tracking-extension/popup.js
Original file line number Diff line number Diff line change
@@ -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);
43 changes: 43 additions & 0 deletions README.txt
Original file line number Diff line number Diff line change
@@ -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 > <file_name>" 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
Binary file modified UserTracking.db
Binary file not shown.
2 changes: 1 addition & 1 deletion app.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Binary file removed app.pyc
Binary file not shown.
Binary file removed models.pyc
Binary file not shown.
173 changes: 173 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -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
13 changes: 11 additions & 2 deletions templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@
{% block content %}

<p>
StackOverflow link -
--> StackOverflow link -
<a href="https://stackoverflow.com/questions/tagged/java?sort=frequent&pageSize=15">stackoverflow tag=java</a>
</p>
<p><u>Following actions are tracked in the current application.</u><br>
1) <i>Visited</i> - 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<br>
2) <i>Upvoted/ Downvoted</i> - 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<br>
3) <i>Shared</i> - User's high interest areas/ topics can be discovered by his sharing history<br>
4) <i>Asked Question</i> - Helps to find the "current focus area" of the user and also the area in which he hopes to improve<br>
5) <i>Posted Answer</i> - Can be used to find out the level of expertise of user on different topics based on his answer
s popularity<br>
<!-- 6) <i>Time Spent</i> - Time spent on each page combined with average viewing times can be a good factor in deducing the expertise level of the user on that particular subject -->
</p>
<table>
<tr>
<td>
<h2>Your activity History</h2>
<h5><i>Hello <strong>{{ userId }}</strong>, below is your activity recently</i></h5>
</td>
<td>
<a href="/adduser">Add User</a>
Expand Down

0 comments on commit 650e18b

Please sign in to comment.