summaryrefslogtreecommitdiff
path: root/buildstream/_frontend/widget.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildstream/_frontend/widget.py')
-rw-r--r--buildstream/_frontend/widget.py54
1 files changed, 51 insertions, 3 deletions
diff --git a/buildstream/_frontend/widget.py b/buildstream/_frontend/widget.py
index 4fa0addbf..cd4cbdcbb 100644
--- a/buildstream/_frontend/widget.py
+++ b/buildstream/_frontend/widget.py
@@ -272,7 +272,7 @@ class LogFile(Widget):
# A widget for formatting a log line
class LogLine(Widget):
- def __init__(self, content_profile, format_profile, err_profile, detail_profile,
+ def __init__(self, content_profile, format_profile, success_profile, err_profile, detail_profile,
indent=4,
log_lines=10,
message_lines=10,
@@ -280,6 +280,7 @@ class LogLine(Widget):
super(LogLine, self).__init__(content_profile, format_profile)
self.columns = []
+ self.success_profile = success_profile
self.err_profile = err_profile
self.detail_profile = detail_profile
self.indent = ' ' * indent
@@ -454,7 +455,51 @@ class LogLine(Widget):
if log_file:
click.echo(text, file=log_file, color=False, nl=False)
- def format_values(self, values):
+ # Print queue summaries at the end of a scheduler run
+ #
+ def print_summary(self, pipeline, scheduler, log_file, styling=False):
+
+ text = self.content_profile.fmt("Pipeline Summary\n", bold=True)
+ values = OrderedDict()
+ values['Total'] = self.content_profile.fmt(str(pipeline.total_elements))
+ values['Session'] = self.content_profile.fmt(str(pipeline.session_elements))
+
+ processed_maxlen = 1
+ skipped_maxlen = 1
+ failed_maxlen = 1
+ for queue in scheduler.queues:
+ processed_maxlen = max(len(str(len(queue.processed_elements))), processed_maxlen)
+ skipped_maxlen = max(len(str(len(queue.skipped_elements))), skipped_maxlen)
+ failed_maxlen = max(len(str(len(queue.failed_elements))), failed_maxlen)
+
+ for queue in scheduler.queues:
+ processed = str(len(queue.processed_elements))
+ skipped = str(len(queue.skipped_elements))
+ failed = str(len(queue.failed_elements))
+
+ processed_align = ' ' * (processed_maxlen - len(processed))
+ skipped_align = ' ' * (skipped_maxlen - len(skipped))
+ failed_align = ' ' * (failed_maxlen - len(failed))
+
+ status_text = self.content_profile.fmt("processed ") + \
+ self.success_profile.fmt(processed) + \
+ self.format_profile.fmt(', ') + processed_align
+
+ status_text += self.content_profile.fmt("skipped ") + \
+ self.content_profile.fmt(skipped) + \
+ self.format_profile.fmt(', ') + skipped_align
+
+ status_text += self.content_profile.fmt("failed ") + \
+ self.err_profile.fmt(failed) + ' ' + failed_align
+ values["{} Queue".format(queue.action_name)] = status_text
+
+ text += self.format_values(values, style_value=False)
+
+ click.echo(text, color=styling, nl=False)
+ if log_file:
+ click.echo(text, file=log_file, color=False, nl=False)
+
+ def format_values(self, values, style_value=True):
text = ''
max_key_len = 0
for key, value in values.items():
@@ -462,7 +507,10 @@ class LogLine(Widget):
for key, value in values.items():
text += self.format_profile.fmt(" {}: {}".format(key, ' ' * (max_key_len - len(key))))
- text += self.content_profile.fmt(str(value))
+ if style_value:
+ text += self.content_profile.fmt(str(value))
+ else:
+ text += str(value)
text += '\n'
return text