diff options
-rw-r--r-- | meta/classes/buildstats.bbclass | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/meta/classes/buildstats.bbclass b/meta/classes/buildstats.bbclass index 8e03039aeb..8a1466d3fe 100644 --- a/meta/classes/buildstats.bbclass +++ b/meta/classes/buildstats.bbclass | |||
@@ -104,7 +104,7 @@ def write_task_data(status, logfile, e, d): | |||
104 | f.write("Status: FAILED \n") | 104 | f.write("Status: FAILED \n") |
105 | f.write("Ended: %0.2f \n" % e.time) | 105 | f.write("Ended: %0.2f \n" % e.time) |
106 | 106 | ||
107 | def write_host_data(logfile, e, d): | 107 | def write_host_data(logfile, e, d, type): |
108 | import subprocess, os, datetime | 108 | import subprocess, os, datetime |
109 | # minimum time allowed for each command to run, in seconds | 109 | # minimum time allowed for each command to run, in seconds |
110 | time_threshold = 0.5 | 110 | time_threshold = 0.5 |
@@ -112,15 +112,22 @@ def write_host_data(logfile, e, d): | |||
112 | num_cmds = 0 | 112 | num_cmds = 0 |
113 | # interval at which data will be logged | 113 | # interval at which data will be logged |
114 | interval = int(d.getVar("BB_HEARTBEAT_EVENT", False)) | 114 | interval = int(d.getVar("BB_HEARTBEAT_EVENT", False)) |
115 | # the commands to be run at each interval | 115 | msg = "" |
116 | cmds = d.getVar('BB_LOG_HOST_STAT_CMDS') | 116 | if type == "interval": |
117 | # if no commands are passed, issue a warning and return | 117 | cmds = d.getVar('BB_LOG_HOST_STAT_CMDS_INTERVAL') |
118 | if cmds is None: | 118 | msg = "Host Stats: Collecting data at interval.\n" |
119 | d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0") | 119 | if cmds is None: |
120 | d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0") | 120 | d.setVar("BB_LOG_HOST_STAT_ON_INTERVAL", "0") |
121 | 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 at intervals failed. Set BB_LOG_HOST_STAT_CMDS_INTERVAL=\"command1 ; command2 ; ... \" in conf/local.conf\n") |
122 | return | 122 | return |
123 | # find the total commands | 123 | if type == "failure": |
124 | cmds = d.getVar('BB_LOG_HOST_STAT_CMDS_FAILURE') | ||
125 | msg = "Host Stats: Collecting data on failure.\n" | ||
126 | msg += "Failed at task " + e.task + "\n" | ||
127 | if cmds is None: | ||
128 | d.setVar("BB_LOG_HOST_STAT_ON_FAILURE", "0") | ||
129 | bb.warn("buildstats: Collecting host data on failure failed. Set BB_LOG_HOST_STAT_CMDS_FAILURE=\"command1 ; command2 ; ... \" in conf/local.conf\n") | ||
130 | return | ||
124 | c_san = [] | 131 | c_san = [] |
125 | for cmd in cmds.split(";"): | 132 | for cmd in cmds.split(";"): |
126 | if len(cmd) == 0: | 133 | if len(cmd) == 0: |
@@ -147,6 +154,7 @@ def write_host_data(logfile, e, d): | |||
147 | os.environ['PATH'] = path + ":" + opath + ":" + ospath | 154 | os.environ['PATH'] = path + ":" + opath + ":" + ospath |
148 | with open(logfile, "a") as f: | 155 | with open(logfile, "a") as f: |
149 | f.write("Event Time: %f\nDate: %s\n" % (e.time, datetime.datetime.now())) | 156 | f.write("Event Time: %f\nDate: %s\n" % (e.time, datetime.datetime.now())) |
157 | f.write("%s" % msg) | ||
150 | for c in c_san: | 158 | for c in c_san: |
151 | try: | 159 | try: |
152 | output = subprocess.check_output(c.split(), stderr=subprocess.STDOUT, timeout=limit).decode('utf-8') | 160 | output = subprocess.check_output(c.split(), stderr=subprocess.STDOUT, timeout=limit).decode('utf-8') |
@@ -171,7 +179,7 @@ python run_buildstats () { | |||
171 | taskdir = os.path.join(bsdir, d.getVar('PF')) | 179 | taskdir = os.path.join(bsdir, d.getVar('PF')) |
172 | if isinstance(e, bb.event.HeartbeatEvent) and bb.utils.to_boolean(d.getVar("BB_LOG_HOST_STAT_ON_INTERVAL")): | 180 | if isinstance(e, bb.event.HeartbeatEvent) and bb.utils.to_boolean(d.getVar("BB_LOG_HOST_STAT_ON_INTERVAL")): |
173 | bb.utils.mkdirhier(bsdir) | 181 | bb.utils.mkdirhier(bsdir) |
174 | write_host_data(os.path.join(bsdir, "host_stats"), e, d) | 182 | write_host_data(os.path.join(bsdir, "host_stats"), e, d, "interval") |
175 | 183 | ||
176 | if isinstance(e, bb.event.BuildStarted): | 184 | if isinstance(e, bb.event.BuildStarted): |
177 | ######################################################################## | 185 | ######################################################################## |
@@ -247,7 +255,7 @@ python run_buildstats () { | |||
247 | with open(build_status, "a") as f: | 255 | with open(build_status, "a") as f: |
248 | f.write(d.expand("Failed at: ${PF} at task: %s \n" % e.task)) | 256 | f.write(d.expand("Failed at: ${PF} at task: %s \n" % e.task)) |
249 | if bb.utils.to_boolean(d.getVar("BB_LOG_HOST_STAT_ON_FAILURE")): | 257 | if bb.utils.to_boolean(d.getVar("BB_LOG_HOST_STAT_ON_FAILURE")): |
250 | write_host_data(build_status, e, d) | 258 | write_host_data(os.path.join(bsdir, "host_stats"), e, d, "failure") |
251 | } | 259 | } |
252 | 260 | ||
253 | addhandler run_buildstats | 261 | addhandler run_buildstats |