summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbitbake/bin/toaster-eventreplay13
-rw-r--r--bitbake/lib/bb/ui/buildinfohelper.py5
-rw-r--r--bitbake/lib/bb/ui/toasterui.py11
-rw-r--r--bitbake/lib/toaster/orm/views.py8
4 files changed, 19 insertions, 18 deletions
diff --git a/bitbake/bin/toaster-eventreplay b/bitbake/bin/toaster-eventreplay
index 624829aea0..615a7aed15 100755
--- a/bitbake/bin/toaster-eventreplay
+++ b/bitbake/bin/toaster-eventreplay
@@ -26,6 +26,7 @@
26# as a build eventlog, and the ToasterUI is used to process events in the file 26# as a build eventlog, and the ToasterUI is used to process events in the file
27# and log data in the database 27# and log data in the database
28 28
29from __future__ import print_function
29import os 30import os
30import sys, logging 31import sys, logging
31 32
@@ -39,12 +40,6 @@ from bb.ui import toasterui
39import sys 40import sys
40import logging 41import logging
41 42
42logger = logging.getLogger(__name__)
43console = logging.StreamHandler(sys.stdout)
44format_str = "%(levelname)s: %(message)s"
45logging.basicConfig(format=format_str)
46
47
48import json, pickle 43import json, pickle
49 44
50 45
@@ -168,12 +163,12 @@ class MockConfigParameters():
168# run toaster ui on our mock bitbake class 163# run toaster ui on our mock bitbake class
169if __name__ == "__main__": 164if __name__ == "__main__":
170 if len(sys.argv) < 2: 165 if len(sys.argv) < 2:
171 logger.error("Usage: %s event.log " % sys.argv[0]) 166 print("Usage: %s event.log " % sys.argv[0])
172 sys.exit(1) 167 sys.exit(1)
173 168
174 file_name = sys.argv[-1] 169 file_name = sys.argv[-1]
175 mock_connection = FileReadEventsServerConnection(file_name) 170 mock_connection = FileReadEventsServerConnection(file_name)
176 configParams = MockConfigParameters() 171 configParams = MockConfigParameters()
177 172
178 # run the main program 173 # run the main program and set exit code to the returned value
179 toasterui.main(mock_connection.connection, mock_connection.events, configParams) 174 sys.exit(toasterui.main(mock_connection.connection, mock_connection.events, configParams))
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index 64bd94e5e8..647d663cb5 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -718,12 +718,15 @@ class BuildInfoHelper(object):
718 return lvo 718 return lvo
719 719
720 #if we get here, we didn't read layers correctly; dump whatever information we have on the error log 720 #if we get here, we didn't read layers correctly; dump whatever information we have on the error log
721 logger.error("Could not match layer version for recipe path %s : %s" % (path, self.orm_wrapper.layer_version_objects)) 721 logger.warn("Could not match layer version for recipe path %s : %s" % (path, self.orm_wrapper.layer_version_objects))
722 722
723 #mockup the new layer 723 #mockup the new layer
724 unknown_layer, created = Layer.objects.get_or_create(name="__FIXME__unidentified_layer", local_path="/", layer_index_url="") 724 unknown_layer, created = Layer.objects.get_or_create(name="__FIXME__unidentified_layer", local_path="/", layer_index_url="")
725 unknown_layer_version_obj, created = Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build']) 725 unknown_layer_version_obj, created = Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build'])
726 726
727 # append it so we don't run into this error again and again
728 self.orm_wrapper.layer_version_objects.append(unknown_layer_version_obj)
729
727 return unknown_layer_version_obj 730 return unknown_layer_version_obj
728 731
729 def _get_recipe_information_from_taskfile(self, taskfile): 732 def _get_recipe_information_from_taskfile(self, taskfile):
diff --git a/bitbake/lib/bb/ui/toasterui.py b/bitbake/lib/bb/ui/toasterui.py
index f0f853be14..6a7a1cd174 100644
--- a/bitbake/lib/bb/ui/toasterui.py
+++ b/bitbake/lib/bb/ui/toasterui.py
@@ -88,7 +88,7 @@ def main(server, eventHandler, params ):
88 88
89 if not params.observe_only: 89 if not params.observe_only:
90 logger.error("ToasterUI can only work in observer mode") 90 logger.error("ToasterUI can only work in observer mode")
91 return 91 return 1
92 92
93 93
94 main.shutdown = 0 94 main.shutdown = 0
@@ -144,7 +144,6 @@ def main(server, eventHandler, params ):
144 buildinfohelper.store_log_event(event) 144 buildinfohelper.store_log_event(event)
145 if event.levelno >= format.ERROR: 145 if event.levelno >= format.ERROR:
146 errors = errors + 1 146 errors = errors + 1
147 return_value = 1
148 elif event.levelno == format.WARNING: 147 elif event.levelno == format.WARNING:
149 warnings = warnings + 1 148 warnings = warnings + 1
150 # For "normal" logging conditions, don't show note logs from tasks 149 # For "normal" logging conditions, don't show note logs from tasks
@@ -158,7 +157,6 @@ def main(server, eventHandler, params ):
158 157
159 if isinstance(event, bb.build.TaskFailed): 158 if isinstance(event, bb.build.TaskFailed):
160 buildinfohelper.update_and_store_task(event) 159 buildinfohelper.update_and_store_task(event)
161 return_value = 1
162 logfile = event.logfile 160 logfile = event.logfile
163 if logfile and os.path.exists(logfile): 161 if logfile and os.path.exists(logfile):
164 bb.error("Logfile of failure stored in: %s" % logfile) 162 bb.error("Logfile of failure stored in: %s" % logfile)
@@ -188,7 +186,6 @@ def main(server, eventHandler, params ):
188 continue 186 continue
189 187
190 if isinstance(event, bb.event.NoProvider): 188 if isinstance(event, bb.event.NoProvider):
191 return_value = 1
192 errors = errors + 1 189 errors = errors + 1
193 if event._runtime: 190 if event._runtime:
194 r = "R" 191 r = "R"
@@ -316,6 +313,7 @@ def main(server, eventHandler, params ):
316 continue 313 continue
317 314
318 logger.error("Unknown event: %s", event) 315 logger.error("Unknown event: %s", event)
316 return_value += 1
319 317
320 except EnvironmentError as ioerror: 318 except EnvironmentError as ioerror:
321 # ignore interrupted io 319 # ignore interrupted io
@@ -344,10 +342,13 @@ def main(server, eventHandler, params ):
344 except Exception as ce: 342 except Exception as ce:
345 logger.error("CRITICAL - Failed to to save toaster exception to the database: %s" % str(ce)) 343 logger.error("CRITICAL - Failed to to save toaster exception to the database: %s" % str(ce))
346 344
345 # make sure we return with an error
346 return_value += 1
347 pass 347 pass
348 348
349 if interrupted: 349 if interrupted:
350 if return_value == 0: 350 if return_value == 0:
351 return_value = 1 351 return_value += 1
352 352
353 logger.warn("Return value is %d", return_value)
353 return return_value 354 return return_value
diff --git a/bitbake/lib/toaster/orm/views.py b/bitbake/lib/toaster/orm/views.py
index 97d792b99e..61d14f9375 100644
--- a/bitbake/lib/toaster/orm/views.py
+++ b/bitbake/lib/toaster/orm/views.py
@@ -55,6 +55,8 @@ def eventfile(request):
55 scriptenv["DATABASE_URL"] = toastermain.settings.getDATABASE_URL() 55 scriptenv["DATABASE_URL"] = toastermain.settings.getDATABASE_URL()
56 56
57 # run the data loading process and return the results 57 # run the data loading process and return the results
58 (out, err) = subprocess.Popen([import_script, abstemppath], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=scriptenv).communicate() 58 importer = subprocess.Popen([import_script, abstemppath], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=scriptenv)
59 os.remove(abstemppath) 59 (out, err) = importer.communicate()
60 return HttpResponse("%s\n%s" % (out, err), content_type="text/plain;utf8") 60 if importer.returncode == 0:
61 os.remove(abstemppath)
62 return HttpResponse("== Retval %d\n== STDOUT\n%s\n\n== STDERR\n%s" % (importer.returncode, out, err), content_type="text/plain;utf8")