xref: /aosp_15_r20/external/autotest/client/profilers/catprofile/catprofile.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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