Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: net/tools/dns_trace_formatter/parser.py

Issue 2008007: Replace about:net-internals with the javascript-based frontend.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: improve a comment Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/python2.4
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Package for parsing the log lines from a Chromium DNS trace capture."""
7
8 import re
9
10 # The type of log line.
11 (LINE_TYPE_OUTSTANDING_JOB,
12 LINE_TYPE_CREATED_JOB,
13 LINE_TYPE_STARTING_JOB,
14 LINE_TYPE_RUNNING_JOB,
15 LINE_TYPE_COMPLETED_JOB,
16 LINE_TYPE_COMPLETING_JOB,
17 LINE_TYPE_RECEIVED_REQUEST,
18 LINE_TYPE_ATTACHED_REQUEST,
19 LINE_TYPE_FINISHED_REQUEST,
20 LINE_TYPE_CANCELLED_REQUEST) = range(10)
21
22 class ParsedLine(object):
23 """Structure that represents a parsed line from the trace log.
24
25 Attributes:
26 t: The time (in milliseconds) when the line was logged.
27 line_type: The type of event that this line was logging. One of LINE_TYPE_*.
28 raw_line: The full unparsed line.
29 details: Dictionary containing additional properties that were parsed from
30 this line.
31 """
32
33 def __init__(self):
34 self.t = None
35 self.line_type = None
36 self.raw_line = None
37 self.details = {}
38
39
40 def ParseLine(line):
41 """Parses |line| into a ParsedLine. Returns None on failure."""
42
43 m = re.search(r'^t=(\d+): "(.*)"\s*$', line)
44 if not m:
45 return None
46
47 parsed = ParsedLine()
48 parsed.t = int(m.group(1))
49 parsed.raw_line = line.strip()
50
51 msg = m.group(2)
52
53 m = re.search(r"^Received request (r\d+) for (.*)$", msg)
54 if m:
55 parsed.line_type = LINE_TYPE_RECEIVED_REQUEST
56 parsed.entity_id = m.group(1)
57 parsed.details['request_details'] = m.group(2)
58 return parsed
59
60 m = re.search(r"^Created job (j\d+) for {hostname='([^']*)', "
61 "address_family=(\d+)}$", msg)
62 if m:
63 parsed.line_type = LINE_TYPE_CREATED_JOB
64 parsed.entity_id = m.group(1)
65 parsed.details['hostname'] = m.group(2)
66 parsed.details['address_family'] = m.group(3)
67 return parsed
68
69 m = re.search(r"^Outstanding job (j\d+) for {hostname='([^']*)', address_"
70 "family=(\d+)}, which was started at t=(\d+)$", msg)
71 if m:
72 parsed.line_type = LINE_TYPE_OUTSTANDING_JOB
73 parsed.t = int(m.group(4))
74 parsed.entity_id = m.group(1)
75 parsed.details['hostname'] = m.group(2)
76 parsed.details['address_family'] = m.group(3)
77 return parsed
78
79 m = re.search(r"^Attached request (r\d+) to job (j\d+)$", msg)
80 if m:
81 parsed.line_type = LINE_TYPE_ATTACHED_REQUEST
82 parsed.entity_id = m.group(1)
83 parsed.details['job_id'] = m.group(2)
84 return parsed
85
86 m = re.search(r'^Finished request (r\d+) (.*)$', msg)
87 if m:
88 parsed.line_type = LINE_TYPE_FINISHED_REQUEST
89 parsed.entity_id = m.group(1)
90 parsed.details['extra'] = m.group(2)
91 return parsed
92
93 m = re.search(r'^Cancelled request (r\d+)$', msg)
94 if m:
95 parsed.line_type = LINE_TYPE_CANCELLED_REQUEST
96 parsed.entity_id = m.group(1)
97 return parsed
98
99 m = re.search(r'^Starting job (j\d+)$', msg)
100 if m:
101 parsed.line_type = LINE_TYPE_STARTING_JOB
102 parsed.entity_id = m.group(1)
103 return parsed
104
105 m = re.search(r'\[resolver thread\] Running job (j\d+)$', msg)
106 if m:
107 parsed.line_type = LINE_TYPE_RUNNING_JOB
108 parsed.entity_id = m.group(1)
109 return parsed
110
111 m = re.search(r'\[resolver thread\] Completed job (j\d+)$', msg)
112 if m:
113 parsed.line_type = LINE_TYPE_COMPLETED_JOB
114 parsed.entity_id = m.group(1)
115 return parsed
116
117 m = re.search(r'Completing job (j\d+).*$', msg)
118 if m:
119 parsed.line_type = LINE_TYPE_COMPLETING_JOB
120 parsed.entity_id = m.group(1)
121 return parsed
122
123 return None
124
125
126 def ParseFile(path):
127 """Parses the file at |path| and returns a list of ParsedLines."""
128 f = open(path, 'r')
129
130 entries = []
131
132 for line in f:
133 parsed = ParseLine(line)
134 if parsed:
135 entries.append(parsed)
136
137 f.close()
138 return entries
139
OLDNEW
« no previous file with comments | « net/tools/dns_trace_formatter/formatter.py ('k') | net/tools/dns_trace_formatter/parser_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698