diff --git a/trustgraph-cli/scripts/tg-show-flows b/trustgraph-cli/scripts/tg-show-flows index 3313fd7d..2a090013 100755 --- a/trustgraph-cli/scripts/tg-show-flows +++ b/trustgraph-cli/scripts/tg-show-flows @@ -6,40 +6,82 @@ import argparse import os import tabulate -from trustgraph.api import Api +from trustgraph.api import Api, ConfigKey import json default_url = os.getenv("TRUSTGRAPH_URL", 'http://localhost:8088/') +def get_interface(api, i): + + key = ConfigKey("interface-descriptions", i) + + value = api.config_get([key])[0].value + + return json.loads(value) + +def describe_interfaces(intdefs, flow): + + intfs = flow.get("interfaces", {}) + + lst = [] + + for k, v in intdefs.items(): + + if intdefs[k].get("visible", False): + + label = intdefs[k].get("description", k) + kind = intdefs[k].get("kind", None) + + if kind == "request-response": + req = intfs[k]["request"] + resp = intfs[k]["request"] + + lst.append(f"{k} request: {req}") + lst.append(f"{k} response: {resp}") + + if kind == "send": + q = intfs[k] + + lst.append(f"{k}: {q}") + + return "\n".join(lst) + def show_flows(url): api = Api(url) + interface_names = api.config_list("interface-descriptions") + + interface_defs = { + i: get_interface(api, i) + for i in interface_names + } + flow_ids = api.flow_list() if len(flow_ids) == 0: print("No flows.") return - print(flow_ids) - flows = [] for id in flow_ids: - flow = api.flow_get(id) - flows.append(( - id, - flow.get("description", ""), - )) - print(tabulate.tabulate( - flows, - tablefmt="pretty", - maxcolwidths=[None, 40], - stralign="left", - headers = ["id", "description"], - )) - + flow = api.flow_get(id) + + table = [] + table.append(("id", id)) + table.append(("class", flow.get("class-name", ""))) + table.append(("desc", flow.get("description", ""))) + table.append(("queue", describe_interfaces(interface_defs, flow))) + + print(tabulate.tabulate( + table, + tablefmt="pretty", + stralign="left", + )) + print() + def main(): parser = argparse.ArgumentParser( diff --git a/trustgraph-flow/trustgraph/config/service/flow.py b/trustgraph-flow/trustgraph/config/service/flow.py index beef679e..3933e4aa 100644 --- a/trustgraph-flow/trustgraph/config/service/flow.py +++ b/trustgraph-flow/trustgraph/config/service/flow.py @@ -112,9 +112,27 @@ class FlowConfig: self.config["flows-active"][processor] = json.dumps(target) + def repl_interface(i): + if isinstance(i, str): + return repl_template(i) + else: + return { + k: repl_template(v) + for k, v in i.items() + } + + if "interfaces" in cls: + interfaces = { + k: repl_interface(v) + for k, v in cls["interfaces"].items() + } + else: + interfaces = {} + self.config["flows"][msg.flow_id] = json.dumps({ "description": msg.description, "class-name": msg.class_name, + "interfaces": interfaces, }) await self.config.push()