summaryrefslogtreecommitdiff
path: root/meta/classes/report-error.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/report-error.bbclass')
-rw-r--r--meta/classes/report-error.bbclass56
1 files changed, 42 insertions, 14 deletions
diff --git a/meta/classes/report-error.bbclass b/meta/classes/report-error.bbclass
index 9edf2ceb31..d6fdd364ad 100644
--- a/meta/classes/report-error.bbclass
+++ b/meta/classes/report-error.bbclass
@@ -9,59 +9,87 @@
ERR_REPORT_DIR ?= "${LOG_DIR}/error-report"
def errorreport_getdata(e):
- logpath = e.data.getVar('ERR_REPORT_DIR', True)
+ import codecs
+ logpath = e.data.getVar('ERR_REPORT_DIR')
datafile = os.path.join(logpath, "error-report.txt")
- with open(datafile) as f:
+ with codecs.open(datafile, 'r', 'utf-8') as f:
data = f.read()
return data
def errorreport_savedata(e, newdata, file):
import json
- logpath = e.data.getVar('ERR_REPORT_DIR', True)
- bb.utils.mkdirhier(logpath)
+ import codecs
+ logpath = e.data.getVar('ERR_REPORT_DIR')
datafile = os.path.join(logpath, file)
- with open(datafile, "w") as f:
+ with codecs.open(datafile, 'w', 'utf-8') as f:
json.dump(newdata, f, indent=4, sort_keys=True)
return datafile
python errorreport_handler () {
import json
+ import codecs
+
+ logpath = e.data.getVar('ERR_REPORT_DIR')
+ datafile = os.path.join(logpath, "error-report.txt")
if isinstance(e, bb.event.BuildStarted):
+ bb.utils.mkdirhier(logpath)
data = {}
machine = e.data.getVar("MACHINE")
data['machine'] = machine
- data['build_sys'] = e.data.getVar("BUILD_SYS", True)
+ data['build_sys'] = e.data.getVar("BUILD_SYS")
data['nativelsb'] = e.data.getVar("NATIVELSBSTRING")
data['distro'] = e.data.getVar("DISTRO")
- data['target_sys'] = e.data.getVar("TARGET_SYS", True)
+ data['target_sys'] = e.data.getVar("TARGET_SYS")
data['failures'] = []
- data['component'] = e.getPkgs()[0]
- data['branch_commit'] = base_detect_branch(e.data) + ": " + base_detect_revision(e.data)
+ data['component'] = " ".join(e.getPkgs())
+ data['branch_commit'] = str(base_detect_branch(e.data)) + ": " + str(base_detect_revision(e.data))
+ lock = bb.utils.lockfile(datafile + '.lock')
errorreport_savedata(e, data, "error-report.txt")
+ bb.utils.unlockfile(lock)
elif isinstance(e, bb.build.TaskFailed):
task = e.task
taskdata={}
- log = e.data.getVar('BB_LOGFILE', True)
+ log = e.data.getVar('BB_LOGFILE')
taskdata['package'] = e.data.expand("${PF}")
taskdata['task'] = task
if log:
try:
- logFile = open(log, 'r')
- taskdata['log'] = logFile.read().decode('utf-8')
+ logFile = codecs.open(log, 'r', 'utf-8')
+ logdata = logFile.read()
+
+ # Replace host-specific paths so the logs are cleaner
+ for d in ("TOPDIR", "TMPDIR"):
+ s = e.data.getVar(d)
+ if s:
+ logdata = logdata.replace(s, d)
+
logFile.close()
except:
- taskdata['log'] = "Unable to read log file"
+ logdata = "Unable to read log file"
else:
- taskdata['log'] = "No Log"
+ logdata = "No Log"
+
+ # server will refuse failures longer than param specified in project.settings.py
+ # MAX_UPLOAD_SIZE = "5242880"
+ # use lower value, because 650 chars can be spent in task, package, version
+ max_logdata_size = 5242000
+ # upload last max_logdata_size characters
+ if len(logdata) > max_logdata_size:
+ logdata = "..." + logdata[-max_logdata_size:]
+ taskdata['log'] = logdata
+ lock = bb.utils.lockfile(datafile + '.lock')
jsondata = json.loads(errorreport_getdata(e))
jsondata['failures'].append(taskdata)
errorreport_savedata(e, jsondata, "error-report.txt")
+ bb.utils.unlockfile(lock)
elif isinstance(e, bb.event.BuildCompleted):
+ lock = bb.utils.lockfile(datafile + '.lock')
jsondata = json.loads(errorreport_getdata(e))
+ bb.utils.unlockfile(lock)
failures = jsondata['failures']
if(len(failures) > 0):
filename = "error_report_" + e.data.getVar("BUILDNAME")+".txt"