summaryrefslogtreecommitdiffstats
path: root/meta/lib/buildstats.py
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2016-12-09 09:40:20 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-12-13 22:55:20 +0000
commit9eb89487ff5a7e6965f3e3d696ef868d7901b13d (patch)
tree4a2a7c0fd740efddc87ddf8c6414a2c5d7c20a0a /meta/lib/buildstats.py
parenta316b0b1975ced4c4a383169e63bccd9c1955374 (diff)
downloadpoky-9eb89487ff5a7e6965f3e3d696ef868d7901b13d.tar.gz
buildstats.py: skip collecting unavailable /proc data
Some virtualized environments like Linux-VServer do not have the entries under /proc that the new system usage sampling expected, leading to an exception when trying to open the files. Now the presence of these files is checked once before enabling the corresponding data collection. When a file is missing, the corresponding log file is not written either and pybootchart will not draw the chart that normally displays the data. Errors while reading or writing of data samples is intentionally still a fatal error, because that points towards a bigger problem that should not be ignored. Reported-by: Andreas Oberritter <obi@opendreambox.org> (From OE-Core rev: daeee2d6731014c33f0d1f8a3846830c099932b4) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/buildstats.py')
-rw-r--r--meta/lib/buildstats.py19
1 files changed, 12 insertions, 7 deletions
diff --git a/meta/lib/buildstats.py b/meta/lib/buildstats.py
index 9e5b6be020..854c38721f 100644
--- a/meta/lib/buildstats.py
+++ b/meta/lib/buildstats.py
@@ -18,13 +18,18 @@ class SystemStats:
18 ('meminfo', self._reduce_meminfo), 18 ('meminfo', self._reduce_meminfo),
19 ('stat', self._reduce_stat), 19 ('stat', self._reduce_stat),
20 ): 20 ):
21 # In practice, this class gets instantiated only once in 21 # The corresponding /proc files might not exist on the host.
22 # the bitbake cooker process. Therefore 'append' mode is 22 # For example, /proc/diskstats is not available in virtualized
23 # not strictly necessary, but using it makes the class 23 # environments like Linux-VServer. Silently skip collecting
24 # more robust should two processes ever write 24 # the data.
25 # concurrently. 25 if os.path.exists(os.path.join('/proc', filename)):
26 destfile = os.path.join(bsdir, '%sproc_%s.log' % ('reduced_' if handler else '', filename)) 26 # In practice, this class gets instantiated only once in
27 self.proc_files.append((filename, open(destfile, 'ab'), handler)) 27 # the bitbake cooker process. Therefore 'append' mode is
28 # not strictly necessary, but using it makes the class
29 # more robust should two processes ever write
30 # concurrently.
31 destfile = os.path.join(bsdir, '%sproc_%s.log' % ('reduced_' if handler else '', filename))
32 self.proc_files.append((filename, open(destfile, 'ab'), handler))
28 self.monitor_disk = open(os.path.join(bsdir, 'monitor_disk.log'), 'ab') 33 self.monitor_disk = open(os.path.join(bsdir, 'monitor_disk.log'), 'ab')
29 # Last time that we sampled /proc data resp. recorded disk monitoring data. 34 # Last time that we sampled /proc data resp. recorded disk monitoring data.
30 self.last_proc = 0 35 self.last_proc = 0