1*9c5db199SXin Li""" 2*9c5db199SXin LiSets up a subprocses to cat a file on a specified interval 3*9c5db199SXin Li 4*9c5db199SXin LiDefaults options: 5*9c5db199SXin Lijob.profilers.add('catprofile', ['/proc/meminfo','/proc/uptime'], 6*9c5db199SXin Li outfile=monitor, interval=1) 7*9c5db199SXin Li""" 8*9c5db199SXin Liimport time, os 9*9c5db199SXin Lifrom autotest_lib.client.bin import profiler 10*9c5db199SXin Li 11*9c5db199SXin Liclass catprofile(profiler.profiler): 12*9c5db199SXin Li version = 1 13*9c5db199SXin Li 14*9c5db199SXin Li # filenames: list of filenames to cat 15*9c5db199SXin Li def initialize(self, filenames = ['/proc/meminfo', '/proc/slabinfo'], 16*9c5db199SXin Li outfile = 'monitor', interval = 1): 17*9c5db199SXin Li self.filenames = filenames 18*9c5db199SXin Li self.outfile = outfile 19*9c5db199SXin Li self.interval = interval 20*9c5db199SXin Li 21*9c5db199SXin Li 22*9c5db199SXin Li def start(self, test): 23*9c5db199SXin Li self.child_pid = os.fork() 24*9c5db199SXin Li if self.child_pid: # parent 25*9c5db199SXin Li return None 26*9c5db199SXin Li else: # child 27*9c5db199SXin Li while 1: 28*9c5db199SXin Li lines = [] 29*9c5db199SXin Li for filename in self.filenames: 30*9c5db199SXin Li input = open(filename, 'r') 31*9c5db199SXin Li lines += '\n----- %s -----\n' % filename 32*9c5db199SXin Li lines += input.readlines() 33*9c5db199SXin Li input.close 34*9c5db199SXin Li outfile = test.profdir + '/' + self.outfile 35*9c5db199SXin Li output = open(outfile, 'a') 36*9c5db199SXin Li output.write(time.asctime() + '\n') 37*9c5db199SXin Li output.writelines(lines) 38*9c5db199SXin Li output.write('\n=========================\n') 39*9c5db199SXin Li output.close() 40*9c5db199SXin Li time.sleep(self.interval) 41*9c5db199SXin Li 42*9c5db199SXin Li 43*9c5db199SXin Li def stop(self, test): 44*9c5db199SXin Li os.kill(self.child_pid, 15) 45*9c5db199SXin Li 46*9c5db199SXin Li 47*9c5db199SXin Li def report(self, test): 48*9c5db199SXin Li return None 49