summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2009-05-13 11:15:13 +0000
committerMarko Kreen2009-06-01 07:13:47 +0000
commitf05248217b22464613bb20e8520d2feab4f41c7e (patch)
treec23e524580cc2a172dbcafaf56fc511fcb8e19dc
parentc5ade516e9af7e4405f5205de3fb7624e41b7806 (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.py35
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