You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by no...@apache.org on 2020/12/29 12:45:11 UTC
[buildstream] 13/16: Add support for logger print header displaying
pipeline output
This is an automated email from the ASF dual-hosted git repository.
not-in-ldap pushed a commit to branch tpollard/buildsubtemp
in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 3f644493743d06b28d1c168f4a52518c052e0dbf
Author: Tom Pollard <to...@codethink.co.uk>
AuthorDate: Thu Oct 24 17:04:29 2019 +0100
Add support for logger print header displaying pipeline output
---
src/buildstream/_frontend/app.py | 3 +++
src/buildstream/_frontend/widget.py | 6 +++++-
src/buildstream/_scheduler/scheduler.py | 5 ++++-
src/buildstream/_stream.py | 8 ++++++++
4 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/buildstream/_frontend/app.py b/src/buildstream/_frontend/app.py
index c021602..e146de9 100644
--- a/src/buildstream/_frontend/app.py
+++ b/src/buildstream/_frontend/app.py
@@ -227,6 +227,9 @@ class App():
self._detail_profile,
indent=INDENT)
+ # Register the Logline pipeline renderer callback in Stream
+ self.stream._pipeline_render_callback = self.logger.show_pipeline
+
# Propagate pipeline feedback to the user
self.context.messenger.set_message_handler(self._message_handler)
diff --git a/src/buildstream/_frontend/widget.py b/src/buildstream/_frontend/widget.py
index d40b87c..9a02588 100644
--- a/src/buildstream/_frontend/widget.py
+++ b/src/buildstream/_frontend/widget.py
@@ -512,7 +512,11 @@ class LogLine(Widget):
# Pipeline state
text += self.content_profile.fmt("Pipeline\n", bold=True)
- text += self.show_pipeline(stream.total_elements, context.log_element_format)
+ # Check if the output of show pipeline has already been generated for stream total elements
+ if stream.total_pipeline_render:
+ text += stream.total_pipeline_render
+ else:
+ text += self.show_pipeline(stream.total_elements, context.log_element_format)
text += '\n'
# Separator line before following output
diff --git a/src/buildstream/_scheduler/scheduler.py b/src/buildstream/_scheduler/scheduler.py
index 2b9f9e6..b6539f6 100644
--- a/src/buildstream/_scheduler/scheduler.py
+++ b/src/buildstream/_scheduler/scheduler.py
@@ -71,6 +71,7 @@ class NotificationType(FastEnum):
ELEMENT_TOTALS = "element_totals"
FINISH = "finish"
SIGTSTP = "sigstp"
+ SHOW_PIPELINE = "show_pipeline"
# Notification()
@@ -95,7 +96,8 @@ class Notification():
task_error=None,
exception=None,
task_groups=None,
- element_totals=None):
+ element_totals=None,
+ show_pipeline = None):
self.notification_type = notification_type
self.full_name = full_name
self.job_action = job_action
@@ -107,6 +109,7 @@ class Notification():
self.exception = exception
self.task_groups = task_groups # Tuple of queue name, complete name, task change, & optional element name
self.element_totals = element_totals
+ self.show_pipeline = show_pipeline # Output of LogLine.show_pipeline() cb, to represent pipeline state
# Scheduler()
diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py
index 2e6e650..61a8322 100644
--- a/src/buildstream/_stream.py
+++ b/src/buildstream/_stream.py
@@ -76,6 +76,7 @@ class Stream():
self.len_session_elements = ''
self.len_total_elements = ''
self.loop = None
+ self.total_pipeline_render = None
#
# Private members
@@ -105,6 +106,7 @@ class Stream():
self._notify_back_queue = None
self._casd_process = None
self._watcher = None
+ self._pipeline_render_callback = None
# init()
#
@@ -1456,6 +1458,10 @@ class Stream():
element_totals=element_totals))
+ # Also send through the pipeline renderer output for heading & summary rendering
+ total_pipeline_render = self._pipeline_render_callback(self.total_elements, self._context.log_element_format) # pylint: disable=not-callable
+ self._notify_front(Notification(NotificationType.SHOW_PIPELINE, show_pipeline=total_pipeline_render))
+
if self._session_start_callback is not None:
self._notify_front(Notification(NotificationType.START))
@@ -1794,6 +1800,8 @@ class Stream():
self._session_start_callback()
elif notification.notification_type == NotificationType.ELEMENT_TOTALS:
self.len_session_elements, self.len_total_elements = notification.element_totals
+ elif notification.notification_type == NotificationType.SHOW_PIPELINE:
+ self.total_pipeline_render = notification.show_pipeline
elif notification.notification_type == NotificationType.FINISH:
if self.loop:
self.loop.stop()