Tribler log file parser.
"""
- def __init__(self, path):
+ def __init__(self, path, start_time_string):
super(TriblerLogParser, self).__init__(path)
+ self.start_time = datetime.datetime.strptime(start_time_string,
+ "%Y-%m-%d %H:%M:%S")
+ self.f = open(path, 'rt')
+ self.statmsg_count = 0
+ self.message_list = []
+
+ def pop_message(self):
+ return self.message_list.pop()
+
+ def read_next_line(self):
+ self.line = self.f.readline()
+ # Remove newline character if existent.
+ self.line = re.sub(r'\n$', '', self.line)
+ self.parse_log_line(self.line)
+
+ def is_line_empty(self):
+ return self.line == ""
+
+ def get_next_message_from_line(self):
+ try:
+ msg = self.pop_message()
+ logger.debug("Popped message type %s." %(msg.__class__.__name__))
+ except IndexError, e:
+ msg = None
+
+ return msg
+
def get_next_message(self):
- """
- Go through Tribler log file. All log messages (verbose, status)
+ """Go through Tribler log file. All log messages (verbose, status)
are stored in the same file.
Return the next message available or None when all messages have
been parsed.
"""
- return None
+ self.read_next_line()
+ while True:
+ msg = self.get_next_message_from_line()
+ if msg == None:
+ self.read_next_line()
+ if self.is_line_empty():
+ return None
+ else:
+ continue
+ else:
+ break
+
+ return msg
+
+ def get_log_line_type(self, line):
+ logger.debug("line is: %s" %(line))
+ return (None, None)
+
+ def parse_log_line(self, line):
+ """Parse a log line and establish its type.
+
+ Type may be status, verbose or peer status.
+ Return message in line, in case of message line, or None in case
+ of no message line."""
+
+ # Check log line type and call appropriate method.
+ (major_line_type, minor_line_type) = self.get_log_line_type(line)
+ if major_line_type == "status":
+ self.parse_status_log_line(line)
+ elif major_line_type == "peer-status":
+ self.parse_peer_status_log_line(line)
+ elif major_line_type == "verbose":
+ self.parse_verbose_log_line(line, minor_line_type)
+
+ def parse_status_log_line(self, line):
+ """Parse Tribler status line."""
+ pass
+
+ def parse_peer_status_log_line(self, line):
+ """Parse Tribler peer status line."""
+ pass
+
+ def parse_verbose_log_line(self, line, message_type):
+ """Parse Tribler verbose line."""
+ pass