| Index: net/tools/dns_trace_formatter/parser.py
|
| ===================================================================
|
| --- net/tools/dns_trace_formatter/parser.py (revision 46824)
|
| +++ net/tools/dns_trace_formatter/parser.py (working copy)
|
| @@ -1,139 +0,0 @@
|
| -#!/usr/bin/python2.4
|
| -# Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""Package for parsing the log lines from a Chromium DNS trace capture."""
|
| -
|
| -import re
|
| -
|
| -# The type of log line.
|
| -(LINE_TYPE_OUTSTANDING_JOB,
|
| - LINE_TYPE_CREATED_JOB,
|
| - LINE_TYPE_STARTING_JOB,
|
| - LINE_TYPE_RUNNING_JOB,
|
| - LINE_TYPE_COMPLETED_JOB,
|
| - LINE_TYPE_COMPLETING_JOB,
|
| - LINE_TYPE_RECEIVED_REQUEST,
|
| - LINE_TYPE_ATTACHED_REQUEST,
|
| - LINE_TYPE_FINISHED_REQUEST,
|
| - LINE_TYPE_CANCELLED_REQUEST) = range(10)
|
| -
|
| -class ParsedLine(object):
|
| - """Structure that represents a parsed line from the trace log.
|
| -
|
| - Attributes:
|
| - t: The time (in milliseconds) when the line was logged.
|
| - line_type: The type of event that this line was logging. One of LINE_TYPE_*.
|
| - raw_line: The full unparsed line.
|
| - details: Dictionary containing additional properties that were parsed from
|
| - this line.
|
| - """
|
| -
|
| - def __init__(self):
|
| - self.t = None
|
| - self.line_type = None
|
| - self.raw_line = None
|
| - self.details = {}
|
| -
|
| -
|
| -def ParseLine(line):
|
| - """Parses |line| into a ParsedLine. Returns None on failure."""
|
| -
|
| - m = re.search(r'^t=(\d+): "(.*)"\s*$', line)
|
| - if not m:
|
| - return None
|
| -
|
| - parsed = ParsedLine()
|
| - parsed.t = int(m.group(1))
|
| - parsed.raw_line = line.strip()
|
| -
|
| - msg = m.group(2)
|
| -
|
| - m = re.search(r"^Received request (r\d+) for (.*)$", msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_RECEIVED_REQUEST
|
| - parsed.entity_id = m.group(1)
|
| - parsed.details['request_details'] = m.group(2)
|
| - return parsed
|
| -
|
| - m = re.search(r"^Created job (j\d+) for {hostname='([^']*)', "
|
| - "address_family=(\d+)}$", msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_CREATED_JOB
|
| - parsed.entity_id = m.group(1)
|
| - parsed.details['hostname'] = m.group(2)
|
| - parsed.details['address_family'] = m.group(3)
|
| - return parsed
|
| -
|
| - m = re.search(r"^Outstanding job (j\d+) for {hostname='([^']*)', address_"
|
| - "family=(\d+)}, which was started at t=(\d+)$", msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_OUTSTANDING_JOB
|
| - parsed.t = int(m.group(4))
|
| - parsed.entity_id = m.group(1)
|
| - parsed.details['hostname'] = m.group(2)
|
| - parsed.details['address_family'] = m.group(3)
|
| - return parsed
|
| -
|
| - m = re.search(r"^Attached request (r\d+) to job (j\d+)$", msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_ATTACHED_REQUEST
|
| - parsed.entity_id = m.group(1)
|
| - parsed.details['job_id'] = m.group(2)
|
| - return parsed
|
| -
|
| - m = re.search(r'^Finished request (r\d+) (.*)$', msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_FINISHED_REQUEST
|
| - parsed.entity_id = m.group(1)
|
| - parsed.details['extra'] = m.group(2)
|
| - return parsed
|
| -
|
| - m = re.search(r'^Cancelled request (r\d+)$', msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_CANCELLED_REQUEST
|
| - parsed.entity_id = m.group(1)
|
| - return parsed
|
| -
|
| - m = re.search(r'^Starting job (j\d+)$', msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_STARTING_JOB
|
| - parsed.entity_id = m.group(1)
|
| - return parsed
|
| -
|
| - m = re.search(r'\[resolver thread\] Running job (j\d+)$', msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_RUNNING_JOB
|
| - parsed.entity_id = m.group(1)
|
| - return parsed
|
| -
|
| - m = re.search(r'\[resolver thread\] Completed job (j\d+)$', msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_COMPLETED_JOB
|
| - parsed.entity_id = m.group(1)
|
| - return parsed
|
| -
|
| - m = re.search(r'Completing job (j\d+).*$', msg)
|
| - if m:
|
| - parsed.line_type = LINE_TYPE_COMPLETING_JOB
|
| - parsed.entity_id = m.group(1)
|
| - return parsed
|
| -
|
| - return None
|
| -
|
| -
|
| -def ParseFile(path):
|
| - """Parses the file at |path| and returns a list of ParsedLines."""
|
| - f = open(path, 'r')
|
| -
|
| - entries = []
|
| -
|
| - for line in f:
|
| - parsed = ParseLine(line)
|
| - if parsed:
|
| - entries.append(parsed)
|
| -
|
| - f.close()
|
| - return entries
|
| -
|
|
|