bitbake: monitordisk: add event
The current disk usage is interesting and may be worth logging over time as part of the build statistics. Instead of re-implementing the code and the configuration option (BB_DISKMON_DIRS), the information gathered by monitordisk.py is made available to buildstats.bbclass via a new event. This has pros and cons: - there is already a useful default configuration for "interesting" directories - no code duplication - on the other hand, users cannot configure recording separately from monitoring (probably not that important) (Bitbake rev: f065ac17d0031dca6309ddbff18c8792630de865) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
091ebb8665
commit
268bf22263
|
@ -451,6 +451,23 @@ class DiskFull(Event):
|
||||||
self._free = freespace
|
self._free = freespace
|
||||||
self._mountpoint = mountpoint
|
self._mountpoint = mountpoint
|
||||||
|
|
||||||
|
class DiskUsageSample:
|
||||||
|
def __init__(self, available_bytes, free_bytes, total_bytes):
|
||||||
|
# Number of bytes available to non-root processes.
|
||||||
|
self.available_bytes = available_bytes
|
||||||
|
# Number of bytes available to root processes.
|
||||||
|
self.free_bytes = free_bytes
|
||||||
|
# Total capacity of the volume.
|
||||||
|
self.total_bytes = total_bytes
|
||||||
|
|
||||||
|
class MonitorDiskEvent(Event):
|
||||||
|
"""If BB_DISKMON_DIRS is set, then this event gets triggered each time disk space is checked.
|
||||||
|
Provides information about devices that are getting monitored."""
|
||||||
|
def __init__(self, disk_usage):
|
||||||
|
Event.__init__(self)
|
||||||
|
# hash of device root path -> DiskUsageSample
|
||||||
|
self.disk_usage = disk_usage
|
||||||
|
|
||||||
class NoProvider(Event):
|
class NoProvider(Event):
|
||||||
"""No Provider for an Event"""
|
"""No Provider for an Event"""
|
||||||
|
|
||||||
|
|
|
@ -205,6 +205,7 @@ class diskMonitor:
|
||||||
""" Take action for the monitor """
|
""" Take action for the monitor """
|
||||||
|
|
||||||
if self.enableMonitor:
|
if self.enableMonitor:
|
||||||
|
diskUsage = {}
|
||||||
for k, attributes in self.devDict.items():
|
for k, attributes in self.devDict.items():
|
||||||
path, action = k
|
path, action = k
|
||||||
dev, minSpace, minInode = attributes
|
dev, minSpace, minInode = attributes
|
||||||
|
@ -214,6 +215,11 @@ class diskMonitor:
|
||||||
# The available free space, integer number
|
# The available free space, integer number
|
||||||
freeSpace = st.f_bavail * st.f_frsize
|
freeSpace = st.f_bavail * st.f_frsize
|
||||||
|
|
||||||
|
# Send all relevant information in the event.
|
||||||
|
freeSpaceRoot = st.f_bfree * st.f_frsize
|
||||||
|
totalSpace = st.f_blocks * st.f_frsize
|
||||||
|
diskUsage[dev] = bb.event.DiskUsageSample(freeSpace, freeSpaceRoot, totalSpace)
|
||||||
|
|
||||||
if minSpace and freeSpace < minSpace:
|
if minSpace and freeSpace < minSpace:
|
||||||
# Always show warning, the self.checked would always be False if the action is WARN
|
# Always show warning, the self.checked would always be False if the action is WARN
|
||||||
if self.preFreeS[k] == 0 or self.preFreeS[k] - freeSpace > self.spaceInterval and not self.checked[k]:
|
if self.preFreeS[k] == 0 or self.preFreeS[k] - freeSpace > self.spaceInterval and not self.checked[k]:
|
||||||
|
@ -257,4 +263,6 @@ class diskMonitor:
|
||||||
self.checked[k] = True
|
self.checked[k] = True
|
||||||
rq.finish_runqueue(True)
|
rq.finish_runqueue(True)
|
||||||
bb.event.fire(bb.event.DiskFull(dev, 'inode', freeInode, path), self.configuration)
|
bb.event.fire(bb.event.DiskFull(dev, 'inode', freeInode, path), self.configuration)
|
||||||
|
|
||||||
|
bb.event.fire(bb.event.MonitorDiskEvent(diskUsage), self.configuration)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue