Tribler: LogParser parses BT_Request messages, not interacting with the DB
authorAdriana Draghici <adriana008@gmail.com>
Sun, 8 Nov 2009 18:47:07 +0000 (18:47 +0000)
committerAdriana Draghici <adriana008@gmail.com>
Sun, 8 Nov 2009 18:50:13 +0000 (18:50 +0000)
log-parser/tribler/LogParser.py

index 96ba9b9..af26310 100644 (file)
@@ -1,6 +1,123 @@
 #!/usr/bin/env python
 
+# Parser for verbose messages
+
 import sys
-from DatabaseWriter import DatabaseWriter
+#from DatabaseWriter import DatabaseWriter
+import datetime
+import getopt
+import re
+
+# the names used by Tribler for the BitTorrent messages 
+msg_types = {"BT_REQUEST": "new_request"} 
+msg_db_code = {"BT_CHOKE" : 0, "BT_HAVE" : 4, "BT_REQUEST" : 6}
+
+DEBUG = True
+
+
+def usage():
+    print "Usage: python StatusParser.py -i|--id id status_file"
+    print "id:"
+    print "\t--id"
+    print "\t-i\t\tclient_session_id"
+    print "\tstatus_file:"
+    print "\t--file"
+    print "\t-f\t\tstatus_file for tribler"
+    print "\tdatabase\t\tSQLite database file"
+    print "\t--help"
+    print "\t-h\t\t\tprint this help screen"
+
+""" line format: 20-10-2009 12:56:39   Downloader: new_request 52 98304 16384 to 141.85.37.41 14398
+    BitTorrent protocol message: request: <len=0013><id=6><index><begin><length>
+    Returns a list (timestamp, peer_ip, peer_port, message_type, index, begin, length, listen_port)
+"""
+def tribler_parse_request_msg(line):
+    if line.find(msg_types["BT_REQUEST"]) == -1:
+        return None
+
+    timestamp = None 
+    
+    line_parts = re.split(" *", line)
+    if len(line_parts) < 10 : 
+        print "Error: invalid line format for Downloader."
+        return None
+
+    # get date and timestamp and transform it in datetime format
+    
+    date_array = line_parts[0].split("-");
+    time_array = line_parts[1].split(":");
+    if len(date_array) != 3 or len(time_array) != 3:
+        print "Error: invalid line format for Downloader."
+        return None
+    
+    timestamp = datetime.datetime(int(date_array[2]), int(date_array[1]), int(date_array[0]), #year, month, day
+                                    int(time_array[0]), int(time_array[1]), int(time_array[2])) #hour, min, sec
+    index = int(line_parts[4])
+    begin = int(line_parts[5])
+    length = int(line_parts[6])
+    peer_ip = line_parts[8]
+    peer_port = int(line_parts[9])
+
+    return (timestamp, peer_ip, peer_port, msg_db_code["BT_REQUEST"], index, begin, length, 0)
+
+def tribler_parse_have_msg(line):
+   
+    pass
+
+def tribler_parse_choke_msg(line):
+    pass
+
+def tribler_parse_piece_msg(line):
+    pass
+
+def tribler_parse_line(line):
+
+    result = tribler_parse_request_msg(line)
+    if result != None:
+           return result
+
+    result = tribler_parse_have_msg(line)
+    if result != None:
+           return result
+    
+    result = tribler_parse_choke_msg(line)
+    if result != None:
+           return result
+    result = tribler_parse_piece_msg(line)
+    return result;
+
+def tribler_parse_status_file(dbw, client_session_id, filename):
+
+    try:
+        fin = open(filename, "r")
+        while 1:
+            line = fin.readline()
+            if not line:
+                break
+
+            line = line.strip()
+
+            result = tribler_parse_line(line)
+            if result == None:
+                continue
+
+            if DEBUG == True:
+                print result 
+
+    except IOError:
+        print "Error processing file %s." %filename
+
+def main_just_parse():
+       filename = sys.argv[1]
+       client_session_id = 1
+       tribler_parse_status_file(None, 1, filename)
+
+if __name__ == "__main__":
+    sys.exit(main_just_parse())
+
+
+
+
+
 
-# TODO