+ if node[u"type"] == NodeType.DUT:
+ VPPUtil.show_event_logger(node)
+
+ @staticmethod
+ def show_log(node):
+ """Show logging on the specified topology node.
+
+ :param node: Topology node.
+ :type node: dict
+ """
+ PapiSocketExecutor.run_cli_cmd(node, u"show logging")
+
+ @staticmethod
+ def show_log_on_all_duts(nodes):
+ """Show logging on all DUTs in the given topology.
+
+ :param nodes: Nodes in the topology.
+ :type nodes: dict
+ """
+ for node in nodes.values():
+ if node[u"type"] == NodeType.DUT:
+ VPPUtil.show_log(node)
+
+ @staticmethod
+ def vpp_show_threads(node):
+ """Show VPP threads on node.
+
+ :param node: Node to run command on.
+ :type node: dict
+ :returns: VPP thread data.
+ :rtype: list
+ """
+ cmd = u"show_threads"
+ with PapiSocketExecutor(node) as papi_exec:
+ reply = papi_exec.add(cmd).get_reply()
+
+ threads_data = list()
+ for thread in reply[u"thread_data"]:
+ thread_data = list()
+ for item in thread:
+ if isinstance(item, str):
+ item = item.rstrip('\x00')
+ thread_data.append(item)
+ threads_data.append(thread_data)
+
+ logger.trace(f"show threads:\n{threads_data}")
+
+ return threads_data