Merge "Add a persistence util logbook formatting function"

This commit is contained in:
Jenkins
2013-10-14 17:48:24 +00:00
committed by Gerrit Code Review
2 changed files with 74 additions and 13 deletions

View File

@@ -34,6 +34,7 @@ from taskflow.patterns import linear_flow as lf
from taskflow.persistence import backends from taskflow.persistence import backends
from taskflow.persistence import logbook from taskflow.persistence import logbook
from taskflow import task from taskflow import task
from taskflow.utils import persistence_utils as p_utils
import tempfile import tempfile
@@ -63,18 +64,6 @@ def make_flow(blowup=False):
return flo return flo
def dump_book(book):
for fd in book:
print("+ Ran '%s' (%s)" % (fd.name, fd.state))
for td in fd:
print(" - name = %s" % (td.name))
print(" state = %s" % (td.state))
print(" results = %s" % (td.results))
print(" failure = %s" % (bool(td.failure)))
if td.meta and 'progress' in td.meta:
print(" progress = %0.2f%%" % (td.meta['progress'] * 100))
def print_wrapped(text): def print_wrapped(text):
print("-" * (len(text))) print("-" * (len(text)))
print(text) print(text)
@@ -119,4 +108,4 @@ except Exception:
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
print_wrapped("Book contents") print_wrapped("Book contents")
dump_book(engine_config['book']) print(p_utils.pformat(engine_config['book']))

View File

@@ -20,6 +20,7 @@ import contextlib
import copy import copy
import logging import logging
from taskflow.openstack.common import timeutils
from taskflow.openstack.common import uuidutils from taskflow.openstack.common import uuidutils
from taskflow.persistence import logbook from taskflow.persistence import logbook
from taskflow.utils import misc from taskflow.utils import misc
@@ -191,3 +192,74 @@ def failure_from_dict(data):
raise ValueError('Invalid version of saved Failure object: %r' raise ValueError('Invalid version of saved Failure object: %r'
% version) % version)
return misc.Failure(**data) return misc.Failure(**data)
def _format_meta(metadata, indent):
"""Format the common metadata dictionary in the same manner."""
if not metadata:
return []
lines = [
'%s- metadata:' % (" " * indent),
]
for (k, v) in metadata.items():
# Progress for now is a special snowflake and will be formatted
# in percent format.
if k == 'progress' and isinstance(v, (float, int, long)):
v = "%0.2f%%" % (v * 100.0)
lines.append("%s+ %s = %s" % (" " * (indent + 2), k, v))
return lines
def _format_shared(obj, indent):
"""Format the common shared attributes in the same manner."""
if obj is None:
return []
lines = []
for attr_name in ("uuid", "state"):
if not hasattr(obj, attr_name):
continue
lines.append("%s- %s = %s" % (" " * indent, attr_name,
getattr(obj, attr_name)))
return lines
def pformat_task_detail(task_detail, indent=0):
"""Pretty formats a task detail"""
lines = ["%sTask: '%s'" % (" " * (indent), task_detail.name)]
lines.extend(_format_shared(task_detail, indent=indent + 1))
lines.append("%s- version = %s"
% (" " * (indent + 1), misc.get_version_string(task_detail)))
lines.append("%s- results = %s"
% (" " * (indent + 1), task_detail.results))
lines.append("%s- failure = %s" % (" " * (indent + 1),
bool(task_detail.failure)))
lines.extend(_format_meta(task_detail.meta, indent=indent + 1))
return "\n".join(lines)
def pformat_flow_detail(flow_detail, indent=0):
"""Pretty formats a flow detail"""
lines = ["%sFlow: '%s'" % (" " * indent, flow_detail.name)]
lines.extend(_format_shared(flow_detail, indent=indent + 1))
lines.extend(_format_meta(flow_detail.meta, indent=indent + 1))
for task_detail in flow_detail:
lines.append(pformat_task_detail(task_detail, indent=indent + 1))
return "\n".join(lines)
def pformat(book, indent=0):
"""Pretty formats a logbook"""
lines = ["%sLogbook: '%s'" % (" " * indent, book.name)]
lines.extend(_format_shared(book, indent=indent + 1))
lines.extend(_format_meta(book.meta, indent=indent + 1))
if book.created_at is not None:
lines.append("%s- created_at = %s"
% (" " * (indent + 1),
timeutils.isotime(book.created_at)))
if book.updated_at is not None:
lines.append("%s- updated_at = %s"
% (" " * (indent + 1),
timeutils.isotime(book.updated_at)))
for flow_detail in book:
lines.append(pformat_flow_detail(flow_detail, indent=indent + 1))
return "\n".join(lines)