From b6eacbca9cacb607de864ab7d093deb296da8226 Mon Sep 17 00:00:00 2001 From: Elliot Smith Date: Thu, 15 Oct 2015 15:45:13 +0300 Subject: [PATCH] toaster: Record critical errors Critical errors (where a build failed for reasons of misconfiguration, such as a machine being specified which is not in a project's layers) were being ignored (only log records up to ERROR level were being logged to Toaster's db). This meant that the build would fail but would not correctly report why. Add support for CRITICAL error levels to the LogMessage model, include errors at this level in the errors property for a build, and show errors at this level in the build dashboard. [YOCTO #8320] Signed-off-by: Elliot Smith Signed-off-by: Ed Bartosh Signed-off-by: Richard Purdie --- lib/bb/ui/buildinfohelper.py | 5 ++++- lib/bb/ui/toasterui.py | 2 ++ lib/toaster/orm/models.py | 20 ++++++++++++------- .../toastergui/templates/builddashboard.html | 11 +++++----- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/bb/ui/buildinfohelper.py b/lib/bb/ui/buildinfohelper.py index a8c884de37c..286fb6a74bf 100644 --- a/lib/bb/ui/buildinfohelper.py +++ b/lib/bb/ui/buildinfohelper.py @@ -1394,7 +1394,9 @@ class BuildInfoHelper(object): log_information = {} log_information['build'] = self.internal_state['build'] - if event.levelno == formatter.ERROR: + if event.levelno == formatter.CRITICAL: + log_information['level'] = LogMessage.CRITICAL + elif event.levelno == formatter.ERROR: log_information['level'] = LogMessage.ERROR elif event.levelno == formatter.WARNING: log_information['level'] = LogMessage.WARNING @@ -1407,6 +1409,7 @@ class BuildInfoHelper(object): log_information['pathname'] = event.pathname log_information['lineno'] = event.lineno logger.info("Logging error 2: %s", log_information) + self.orm_wrapper.create_logmessage(log_information) def close(self, errorcode): diff --git a/lib/bb/ui/toasterui.py b/lib/bb/ui/toasterui.py index dbe0d0980a2..0ed774ee7bb 100644 --- a/lib/bb/ui/toasterui.py +++ b/lib/bb/ui/toasterui.py @@ -145,10 +145,12 @@ def main(server, eventHandler, params ): event.levelno = formatter.ERROR buildinfohelper.store_log_event(event) + if event.levelno >= formatter.ERROR: errors = errors + 1 elif event.levelno == formatter.WARNING: warnings = warnings + 1 + # For "normal" logging conditions, don't show note logs from tasks # but do show them if the user has changed the default log level to # include verbose/debug messages diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py index 44a453a58c2..6ca45e0997d 100644 --- a/lib/toaster/orm/models.py +++ b/lib/toaster/orm/models.py @@ -353,7 +353,9 @@ class Build(models.Model): @property def errors(self): - return (self.logmessage_set.filter(level=LogMessage.ERROR)|self.logmessage_set.filter(level=LogMessage.EXCEPTION)) + return (self.logmessage_set.filter(level=LogMessage.ERROR) | + self.logmessage_set.filter(level=LogMessage.EXCEPTION) | + self.logmessage_set.filter(level=LogMessage.CRITICAL)) @property def warnings(self): @@ -1285,16 +1287,20 @@ class LogMessage(models.Model): INFO = 0 WARNING = 1 ERROR = 2 - - LOG_LEVEL = ( (INFO, "info"), - (WARNING, "warn"), - (ERROR, "error"), - (EXCEPTION, "toaster exception")) + CRITICAL = 3 + + LOG_LEVEL = ( + (INFO, "info"), + (WARNING, "warn"), + (ERROR, "error"), + (CRITICAL, "critical"), + (EXCEPTION, "toaster exception") + ) build = models.ForeignKey(Build) task = models.ForeignKey(Task, blank = True, null=True) level = models.IntegerField(choices=LOG_LEVEL, default=INFO) - message=models.CharField(max_length=240) + message = models.CharField(max_length=240) pathname = models.FilePathField(max_length=255, blank=True) lineno = models.IntegerField(null=True) diff --git a/lib/toaster/toastergui/templates/builddashboard.html b/lib/toaster/toastergui/templates/builddashboard.html index aa991348b8d..fc6cae6f29a 100644 --- a/lib/toaster/toastergui/templates/builddashboard.html +++ b/lib/toaster/toastergui/templates/builddashboard.html @@ -69,11 +69,12 @@
- {% for error in logmessages %}{% if error.level == 2 %} -
-
{{error.message}}
-
- {% endif %} + {% for error in logmessages %} + {% if error.level == 2 or error.level == 3 %} +
+
{{error.message}}
+
+ {% endif %} {% endfor %}
-- 2.47.2