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

Side by Side Diff: client/bin/site_log_reader.py

Issue 5740004: Move site_chrome_test, site_logging, site_log_reader, site_crash_test into cros dir. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 10 years 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 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import os, re
6 from autotest_lib.client.common_lib import error, utils
7 from autotest_lib.client.cros.constants import CLEANUP_LOGS_PAUSED_FILE
8
9 class LogReader(object):
10 """
11 A class to read system log files.
12 """
13
14 def __init__(self, filename='/var/log/messages'):
15 self._start_line = 1
16 self._filename = filename
17 if not os.path.exists(CLEANUP_LOGS_PAUSED_FILE):
18 raise error.TestError('LogReader created without ' +
19 CLEANUP_LOGS_PAUSED_FILE)
20
21
22 def set_start_by_regexp(self, index, regexp):
23 """Set the start of logs based on a regular expression.
24
25 @param index: line matching regexp to start at, earliest log at 0.
26 Negative numbers indicate matches since end of log.
27 """
28 regexp_compiled = re.compile(regexp)
29 file_handle = open(self._filename, 'r')
30 starts = []
31 line_number = 1
32 for line in file_handle:
33 if regexp_compiled.match(line):
34 starts.append(line_number)
35 line_number += 1
36 if index < -len(starts):
37 self._start_line = 1
38 elif index >= len(starts):
39 self.set_start_by_current()
40 else:
41 self._start_line = starts[index]
42
43
44 def set_start_by_reboot(self, index):
45 """ Set the start of logs (must be system log) based on reboot.
46
47 @param index: reboot to start at, earliest log at 0. Negative
48 numbers indicate reboots since end of log.
49 """
50 return self.set_start_by_regexp(index,
51 r'.*000\] Linux version \d')
52
53
54 def set_start_by_current(self, relative=1):
55 """ Set start of logs based on current last line.
56
57 @param relative: line relative to current to start at. 1 means
58 to start the log after this line.
59 """
60 lines = utils.system_output('wc -l %s' % self._filename)
61 self._start_line = int(lines.split(' ')[0]) + relative
62
63
64 def get_logs(self):
65 """ Get logs since the start line.
66
67 Start line is set by set_start_* functions or
68 since the start of the file if none were called.
69
70 @return string of contents of file since start line.
71 """
72 return utils.system_output('tail -n +%d %s' %
73 (self._start_line, self._filename))
74
75 def can_find(self, string):
76 """ Try to find string in the logs.
77
78 @return boolean indicating if we found the string.
79 """
80 return string in self.get_logs()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698