#!/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