summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2014-07-09 08:53:42 -0400
committerThibaut Horel <thibaut.horel@gmail.com>2014-07-09 08:53:42 -0400
commit1b1c13d22aaa7a7a2d334dde5783e5632fa572fa (patch)
tree767a6710f829766c04bfda60e4cab4670a373458
parentd2496696d4ca73b9a8a43a42f31959ad6dc18c7a (diff)
downloadtracker-1b1c13d22aaa7a7a2d334dde5783e5632fa572fa.tar.gz
Logging of browser events
-rw-r--r--browserlogger.py45
-rw-r--r--firefox-logger.py18
-rw-r--r--main.py14
-rw-r--r--models.py12
4 files changed, 67 insertions, 22 deletions
diff --git a/browserlogger.py b/browserlogger.py
new file mode 100644
index 0000000..24f961d
--- /dev/null
+++ b/browserlogger.py
@@ -0,0 +1,45 @@
+from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+from threading import Thread
+from datetime import datetime
+
+from models import BrowserEvent
+
+
+class MyHandler(BaseHTTPRequestHandler):
+
+ def do_POST(self):
+ time = datetime.utcfromtimestamp(int(self.headers["time"]) / 1000.)
+ if self.headers["url"] == "null":
+ url, title = None, None
+ else:
+ url, title = (self.headers["url"].decode("utf8"),
+ self.headers["title"].decode("utf8"))
+ event = BrowserEvent(time=time, url=url,
+ title=title)
+ self.server.logger.info(event)
+ self.send_response(202)
+ self.end_headers()
+ return
+
+ def log_request(self, code):
+ pass
+
+
+class MyServer(HTTPServer):
+
+ def __init__(self, addr, handler, logger):
+ HTTPServer.__init__(self, addr, handler)
+ self.logger = logger
+
+
+class ServerThread(Thread):
+
+ def __init__(self, logger):
+ Thread.__init__(self)
+ self.server = MyServer(("localhost", 8080), MyHandler, logger)
+
+ def run(self):
+ self.server.serve_forever()
+
+ def stop(self):
+ self.server.shutdown()
diff --git a/firefox-logger.py b/firefox-logger.py
deleted file mode 100644
index 16d2674..0000000
--- a/firefox-logger.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
-from datetime import datetime
-
-
-class MyHandler(BaseHTTPRequestHandler):
-
- def do_POST(self):
- time = datetime.utcfromtimestamp(int(self.headers["time"]) / 1000.)
- print time.isoformat(), self.headers["url"], self.headers["title"]
- self.send_response(202)
- self.end_headers()
- return
-
- def log_request(self, code):
- pass
-
-server = HTTPServer(("localhost", 8080), MyHandler)
-server.serve_forever()
diff --git a/main.py b/main.py
index da1c662..dc9b9b5 100644
--- a/main.py
+++ b/main.py
@@ -1,10 +1,13 @@
-from sqlalchemy import create_engine
-from sqlalchemy.orm import sessionmaker
import logging
from time import sleep
+import sys
+
+from sqlalchemy import create_engine
+from sqlalchemy.orm import sessionmaker
+
from xlogger import XLogger
+from browserlogger import ServerThread
from utils import SqlHandler
-import sys
engine = create_engine("sqlite:///test.db")
Session = sessionmaker(bind=engine)
@@ -21,6 +24,9 @@ logger.addHandler(sql_handler)
xlogger = XLogger(logger)
xlogger.start()
+browser_logger = ServerThread(logger)
+browser_logger.start()
+
while True:
try:
sleep(1)
@@ -30,6 +36,8 @@ while True:
logger.disabled = True
xlogger.stop()
xlogger.join()
+browser_logger.stop()
+browser_logger.join()
sql_handler.close()
file_handler.close()
session.close()
diff --git a/models.py b/models.py
index 68b3e53..fcdb0a3 100644
--- a/models.py
+++ b/models.py
@@ -25,7 +25,8 @@ class Event:
time = Column(DateTime)
def __init__(self, **args):
- self.time = datetime.utcnow()
+ if "time" not in args:
+ self.time = datetime.utcnow()
for key, value in args.iteritems():
setattr(self, key, value)
@@ -85,6 +86,15 @@ class WindowEvent(Event, Base):
class1 = Column(String)
class2 = Column(String)
+
+class BrowserEvent(Event, Base):
+
+ __tablename__ = "browser_events"
+
+ url = Column(String)
+ title = Column(String)
+
+
if __name__ == "__main__":
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker