MCPcopy Index your code
hub / github.com/StackStorm/st2 / main

Function main

tools/visualize_action_chain.py:39–127  ·  view source on GitHub ↗
(metadata_path, output_path, print_source=False)

Source from the content-addressed store, hash-verified

37
38
39def main(metadata_path, output_path, print_source=False):
40 metadata_path = os.path.abspath(metadata_path)
41 metadata_dir = os.path.dirname(metadata_path)
42
43 meta_loader = MetaLoader()
44 data = meta_loader.load(metadata_path)
45
46 action_name = data["name"]
47 entry_point = data["entry_point"]
48
49 workflow_metadata_path = os.path.join(metadata_dir, entry_point)
50 chainspec = meta_loader.load(workflow_metadata_path)
51
52 chain_holder = ChainHolder(chainspec, "workflow")
53
54 graph_label = "%s action-chain workflow visualization" % (action_name)
55
56 graph_attr = {
57 "rankdir": "TD",
58 "labelloc": "t",
59 "fontsize": "15",
60 "label": graph_label,
61 }
62 node_attr = {}
63 dot = Digraph(
64 comment="Action chain work-flow visualization",
65 node_attr=node_attr,
66 graph_attr=graph_attr,
67 format="png",
68 )
69 # dot.body.extend(['rankdir=TD', 'size="10,5"'])
70
71 # Add all nodes
72 node = chain_holder.get_next_node()
73 while node:
74 dot.node(node.name, node.name)
75 node = chain_holder.get_next_node(curr_node_name=node.name)
76
77 # Add connections
78 node = chain_holder.get_next_node()
79 processed_nodes = set([node.name])
80 nodes = [node]
81 while nodes:
82 previous_node = nodes.pop()
83 success_node = chain_holder.get_next_node(
84 curr_node_name=previous_node.name, condition="on-success"
85 )
86 failure_node = chain_holder.get_next_node(
87 curr_node_name=previous_node.name, condition="on-failure"
88 )
89
90 # Add success node (if any)
91 if success_node:
92 dot.edge(
93 previous_node.name,
94 success_node.name,
95 constraint="true",
96 color="green",

Callers 1

Calls 6

loadMethod · 0.95
get_next_nodeMethod · 0.95
MetaLoaderClass · 0.90
ChainHolderClass · 0.90
popMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected