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