123c080a4dfd0c53d0be0b98f1713df28c29fdef8mbligh""" 223c080a4dfd0c53d0be0b98f1713df28c29fdef8mblighSets up a subprocses to cat a file on a specified interval 323c080a4dfd0c53d0be0b98f1713df28c29fdef8mbligh 423c080a4dfd0c53d0be0b98f1713df28c29fdef8mblighDefaults options: 523c080a4dfd0c53d0be0b98f1713df28c29fdef8mblighjob.profilers.add('catprofile', ['/proc/meminfo','/proc/uptime'], 623c080a4dfd0c53d0be0b98f1713df28c29fdef8mbligh outfile=monitor, interval=1) 723c080a4dfd0c53d0be0b98f1713df28c29fdef8mbligh""" 823c080a4dfd0c53d0be0b98f1713df28c29fdef8mblighimport time, os 923c080a4dfd0c53d0be0b98f1713df28c29fdef8mblighfrom autotest_lib.client.bin import profiler 10d83af0b1ce618df92070589c64726fba9cdc1f2embligh 110bd2c2003ca46917c82df7a90dd94b2e524253ffmblighclass catprofile(profiler.profiler): 120afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski version = 1 130afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 140afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski # filenames: list of filenames to cat 150afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski def initialize(self, filenames = ['/proc/meminfo', '/proc/slabinfo'], 160afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski outfile = 'monitor', interval = 1): 170afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski self.filenames = filenames 180afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski self.outfile = outfile 190afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski self.interval = interval 200afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 210afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 220afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski def start(self, test): 230afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski self.child_pid = os.fork() 240afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski if self.child_pid: # parent 250afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski return None 260afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski else: # child 270afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski while 1: 280afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski lines = [] 290afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski for filename in self.filenames: 300afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski input = open(filename, 'r') 310afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski lines += '\n----- %s -----\n' % filename 320afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski lines += input.readlines() 330afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski input.close 340afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski outfile = test.profdir + '/' + self.outfile 350afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski output = open(outfile, 'a') 360afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski output.write(time.asctime() + '\n') 370afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski output.writelines(lines) 380afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski output.write('\n=========================\n') 390afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski output.close() 400afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski time.sleep(self.interval) 410afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 420afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 430afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski def stop(self, test): 440afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski os.kill(self.child_pid, 15) 450afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 460afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski 470afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski def report(self, test): 480afbb6369aa5aa9a75ea67dd9e95ec4b21c0c181jadmanski return None 49