diff options
-rw-r--r-- | meta/classes/buildstats.bbclass | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/meta/classes/buildstats.bbclass b/meta/classes/buildstats.bbclass index a8ee6e69a6..8e03039aeb 100644 --- a/meta/classes/buildstats.bbclass +++ b/meta/classes/buildstats.bbclass | |||
@@ -106,26 +106,54 @@ def write_task_data(status, logfile, e, d): | |||
106 | 106 | ||
107 | def write_host_data(logfile, e, d): | 107 | def write_host_data(logfile, e, d): |
108 | import subprocess, os, datetime | 108 | import subprocess, os, datetime |
109 | # minimum time allowed for each command to run, in seconds | ||
110 | time_threshold = 0.5 | ||
111 | # the total number of commands | ||
112 | num_cmds = 0 | ||
113 | # interval at which data will be logged | ||
114 | interval = int(d.getVar("BB_HEARTBEAT_EVENT", False)) | ||
115 | # the commands to be run at each interval | ||
109 | cmds = d.getVar('BB_LOG_HOST_STAT_CMDS') | 116 | cmds = d.getVar('BB_LOG_HOST_STAT_CMDS') |
117 | # if no commands are passed, issue a warning and return | ||
110 | if cmds is None: | 118 | if cmds is None: |
111 | d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0") | 119 | d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0") |
112 | d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0") | 120 | d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0") |
113 | bb.warn("buildstats: Collecting host data failed. Set BB_LOG_HOST_STAT_CMDS=\"command1 ; command2 ; ... \" in conf\/local.conf\n") | 121 | bb.warn("buildstats: Collecting host data failed. Set BB_LOG_HOST_STAT_CMDS=\"command1 ; command2 ; ... \" in conf/local.conf\n") |
114 | return | 122 | return |
123 | # find the total commands | ||
124 | c_san = [] | ||
125 | for cmd in cmds.split(";"): | ||
126 | if len(cmd) == 0: | ||
127 | continue | ||
128 | num_cmds += 1 | ||
129 | c_san.append(cmd) | ||
130 | if num_cmds <= 0: | ||
131 | d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0") | ||
132 | d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0") | ||
133 | return | ||
134 | |||
135 | # return if the interval is not enough to run all commands within the specified BB_HEARTBEAT_EVENT interval | ||
136 | limit = interval / num_cmds | ||
137 | if limit <= time_threshold: | ||
138 | d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0") | ||
139 | d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0") | ||
140 | bb.warn("buildstats: Collecting host data failed. BB_HEARTBEAT_EVENT interval not enough to run the specified commands. HINT: Increase value of BB_HEARTBEAT_EVENT in conf/local.conf\n") | ||
141 | return | ||
142 | |||
143 | # set the environment variables | ||
115 | path = d.getVar("PATH") | 144 | path = d.getVar("PATH") |
116 | opath = d.getVar("BB_ORIGENV", False).getVar("PATH") | 145 | opath = d.getVar("BB_ORIGENV", False).getVar("PATH") |
117 | ospath = os.environ['PATH'] | 146 | ospath = os.environ['PATH'] |
118 | os.environ['PATH'] = path + ":" + opath + ":" + ospath | 147 | os.environ['PATH'] = path + ":" + opath + ":" + ospath |
119 | with open(logfile, "a") as f: | 148 | with open(logfile, "a") as f: |
120 | f.write("Event Time: %f\nDate: %s\n" % (e.time, datetime.datetime.now())) | 149 | f.write("Event Time: %f\nDate: %s\n" % (e.time, datetime.datetime.now())) |
121 | for cmd in cmds.split(";"): | 150 | for c in c_san: |
122 | if len(cmd) == 0: | ||
123 | continue | ||
124 | try: | 151 | try: |
125 | output = subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT, timeout=1).decode('utf-8') | 152 | output = subprocess.check_output(c.split(), stderr=subprocess.STDOUT, timeout=limit).decode('utf-8') |
126 | except (subprocess.CalledProcessError, subprocess.TimeoutExpired, FileNotFoundError) as err: | 153 | except (subprocess.CalledProcessError, subprocess.TimeoutExpired, FileNotFoundError) as err: |
127 | output = "Error running command: %s\n%s\n" % (cmd, err) | 154 | output = "Error running command: %s\n%s\n" % (c, err) |
128 | f.write("%s\n%s\n" % (cmd, output)) | 155 | f.write("%s\n%s\n" % (c, output)) |
156 | # reset the environment | ||
129 | os.environ['PATH'] = ospath | 157 | os.environ['PATH'] = ospath |
130 | 158 | ||
131 | python run_buildstats () { | 159 | python run_buildstats () { |