site_sysinfo.py revision 9da65c483ef9368379f8918c17fd4ede63b887cf
1import os, shutil, re, logging 2 3from autotest_lib.client.common_lib import utils 4from autotest_lib.client.bin import base_sysinfo 5from autotest_lib.client.cros import constants as chromeos_constants 6 7 8logfile = base_sysinfo.logfile 9command = base_sysinfo.command 10 11 12class logdir(base_sysinfo.loggable): 13 def __init__(self, directory): 14 super(logdir, self).__init__(directory, log_in_keyval=False) 15 self.dir = directory 16 17 18 def __repr__(self): 19 return "site_sysinfo.logdir(%r)" % self.dir 20 21 22 def __eq__(self, other): 23 if isinstance(other, logdir): 24 return self.dir == other.dir 25 elif isinstance(other, loggable): 26 return False 27 return NotImplemented 28 29 30 def __ne__(self, other): 31 result = self.__eq__(other) 32 if result is NotImplemented: 33 return result 34 return not result 35 36 37 def __hash__(self): 38 return hash(self.dir) 39 40 41 def run(self, log_dir): 42 if os.path.exists(self.dir): 43 parent_dir = os.path.dirname(self.dir) 44 utils.system("mkdir -p %s%s" % (log_dir, parent_dir)) 45 utils.system("rsync -a --exclude=autoserv* %s %s%s" % 46 (self.dir, log_dir, parent_dir)) 47 48 49class purgeable_logdir(logdir): 50 def __init__(self, directory): 51 super(purgeable_logdir, self).__init__(directory) 52 53 54 def run(self, log_dir): 55 super(purgeable_logdir, self).run(log_dir) 56 57 if os.path.exists(self.dir): 58 utils.system("rm -rf %s/*" % (self.dir)) 59 60 61 62class site_sysinfo(base_sysinfo.base_sysinfo): 63 def __init__(self, job_resultsdir): 64 super(site_sysinfo, self).__init__(job_resultsdir) 65 66 # add in some extra command logging 67 self.boot_loggables.add(command("ls -l /boot", 68 "boot_file_list")) 69 self.before_iteration_loggables.add( 70 command("/opt/google/chrome/chrome --version", "chrome_version")) 71 self.test_loggables.add(purgeable_logdir("/home/chronos/user/log")) 72 self.test_loggables.add(logdir("/var/log")) 73 # We only want to gather and purge crash reports after the client test 74 # runs in case a client test is checking that a crash found at boot 75 # (such as a kernel crash) is handled. 76 self.after_iteration_loggables.add(purgeable_logdir("/home/chronos/user/crash")) 77 self.after_iteration_loggables.add(purgeable_logdir("/var/spool/crash")) 78 self.test_loggables.add(logfile("/home/chronos/.Google/" 79 "Google Talk Plugin/gtbplugin.log")) 80 81 82 def log_test_keyvals(self, test_sysinfodir): 83 keyval = super(site_sysinfo, self).log_test_keyvals(test_sysinfodir) 84 85 lsb_lines = utils.system_output( 86 "cat /etc/lsb-release", 87 ignore_status=True).splitlines() 88 lsb_dict = dict(item.split("=") for item in lsb_lines) 89 90 for lsb_key in lsb_dict.keys(): 91 # Special handling for build number 92 if lsb_key == "CHROMEOS_RELEASE_DESCRIPTION": 93 keyval["CHROMEOS_BUILD"] = ( 94 lsb_dict[lsb_key].rstrip(")").split(" ")[3]) 95 keyval[lsb_key] = lsb_dict[lsb_key] 96 97 # return the updated keyvals 98 return keyval 99