diff options
author | Marko Kreen | 2009-05-13 11:15:13 +0000 |
---|---|---|
committer | Marko Kreen | 2009-06-01 07:13:47 +0000 |
commit | f05248217b22464613bb20e8520d2feab4f41c7e (patch) | |
tree | c23e524580cc2a172dbcafaf56fc511fcb8e19dc | |
parent | c5ade516e9af7e4405f5205de3fb7624e41b7806 (diff) |
cascade status: work on broken tree, show node type
- Show node type after name
- Allow several roots, take nodes with missing parents as roots
It still cannot work on cycles. But as the change-provider code
should avoid making those, maybe it's not worth worrying about.
-rw-r--r-- | python/pgq/cascade/nodeinfo.py | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/python/pgq/cascade/nodeinfo.py b/python/pgq/cascade/nodeinfo.py index 6b661c07..9bd1cead 100644 --- a/python/pgq/cascade/nodeinfo.py +++ b/python/pgq/cascade/nodeinfo.py @@ -59,6 +59,9 @@ class NodeInfo: raise Exception("no target queue") return qname + def get_title(self): + return "%s (%s)" % (self.name, self.type) + def get_infolines(self): lst = self._info_lines @@ -141,11 +144,12 @@ class QueueInfo: """Print ascii-tree for set. Expects that data for all nodes is filled in.""" - root = self._prepare_tree() - self._tree_calc(root) - datalines = self._print_node(root, '', []) - for ln in datalines: - print(self._DATAFMT % (' ', ln)) + root_list = self._prepare_tree() + for root in root_list: + self._tree_calc(root) + datalines = self._print_node(root, '', []) + for ln in datalines: + print(self._DATAFMT % (' ', ln)) def _print_node(self, node, pfx, datalines): # print a tree fragment for node and info @@ -153,7 +157,7 @@ class QueueInfo: for ln in datalines: print(self._DATAFMT % (_setpfx(pfx, '|'), ln)) datalines = node.get_infolines() - print("%s%s" % (_setpfx(pfx, '+--'), node.name)) + print("%s%s" % (_setpfx(pfx, '+--'), node.get_title())) for i, n in enumerate(node.child_list): sfx = ((i < len(node.child_list) - 1) and ' |' or ' ') @@ -163,25 +167,26 @@ class QueueInfo: def _prepare_tree(self): # reset vars, fill parent and child_list for each node - # returns root - root = None + # returns list of root nodes (mostly 1) + for node in self.node_map.values(): node.total_childs = 0 node.levels = 0 node.child_list = [] - if node.type == ROOT: - root = node + node.parent = None + + root_list = [] for node in self.node_map.values(): - if node.provider_node and node.provider_node != node.name: + if node.provider_node \ + and node.provider_node != node.name \ + and node.provider_node in self.node_map: p = self.node_map[node.provider_node] p.child_list.append(node) node.parent = p else: node.parent = None - - if root is None: - raise Exception("root node not found") - return root + root_list.append(node) + return root_list def _tree_calc(self, node): # calculate levels and count total childs |