#!/usr/bin/env python3 """Explore the full configuration tree structure to find GeViScope servers""" import asyncio import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) from api.protos import configuration_pb2, configuration_pb2_grpc import grpc async def explore_config(): """Explore configuration tree to find all server-related folders""" channel = grpc.aio.insecure_channel('localhost:50051') stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) try: print("Reading configuration tree...") request = configuration_pb2.ReadConfigurationTreeRequest() response = await stub.ReadConfigurationTree(request, timeout=10.0) print(f"\nTop-level folders in TestMKS.set:") print("=" * 70) server_related = [] for child in response.root.children: print(f" - {child.name} (type: {child.type})") # Look for anything with "server", "scope", "gcore", etc. name_lower = child.name.lower() if any(keyword in name_lower for keyword in ['server', 'scope', 'gcore', 'gsc', 'storage']): server_related.append(child) print(f"\n{'=' * 70}") print("Server-related folders (detailed view):") print("=" * 70) for folder in server_related: print(f"\n[{folder.name}]") if folder.type == "folder" and len(folder.children) > 0: print(f" Contains {len(folder.children)} items:") # Show first few children for i, item in enumerate(folder.children[:5]): print(f" {i+1}. {item.name} (type: {item.type})") if item.type == "folder" and len(item.children) > 0: # Show fields of the first item print(f" Fields: {', '.join([c.name for c in item.children[:10]])}") if len(folder.children) > 5: print(f" ... and {len(folder.children) - 5} more items") await channel.close() except Exception as e: print(f"ERROR: {e}") await channel.close() if __name__ == "__main__": asyncio.run(explore_config())