""" Cleanup script - restore configuration to base state Deletes servers 2 and 3, keeping only original server 1 """ import asyncio import sys sys.path.insert(0, r'C:\DEV\COPILOT\geutebruck-api\src\api\protos') import grpc import configuration_pb2 import configuration_pb2_grpc async def delete_server(server_id): """Delete a server by ID""" channel = grpc.aio.insecure_channel('localhost:50051') stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) try: request = configuration_pb2.DeleteServerRequest(server_id=server_id) response = await stub.DeleteServer(request, timeout=10.0) print(f" [OK] Deleted server '{server_id}'") await channel.close() return True except grpc.RpcError as e: print(f" [ERROR] Failed to delete server '{server_id}': {e.details()}") await channel.close() return False async def get_existing_servers(): """Read current configuration and list all servers""" channel = grpc.aio.insecure_channel('localhost:50051') stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) try: request = configuration_pb2.ReadConfigurationTreeRequest() response = await stub.ReadConfigurationTree(request, timeout=10.0) servers = [] for child in response.root.children: if child.name == "GeViGCoreServer": for server in child.children: if server.type == "folder": servers.append({ 'id': server.name, 'alias': next((c.string_value for c in server.children if c.name == "Alias"), ""), 'host': next((c.string_value for c in server.children if c.name == "Host"), "") }) break await channel.close() return servers except grpc.RpcError as e: print(f"Error reading configuration: {e.code()} - {e.details()}") await channel.close() return [] async def main(): print("=" * 70) print("CLEANUP TO BASE STATE") print("=" * 70) # 1. List current servers print("\n1. CURRENT SERVERS:") print("-" * 70) servers = await get_existing_servers() if servers: for server in servers: print(f" ID: {server['id']:10s} | Alias: {server['alias']:30s} | Host: {server['host']}") else: print(" No servers found") # 2. Delete servers 2 and 3 print("\n2. DELETING TEST SERVERS:") print("-" * 70) for server_id in ["2", "3"]: if any(s['id'] == server_id for s in servers): await delete_server(server_id) else: print(f" [SKIP] Server '{server_id}' not found") # 3. List final state print("\n3. FINAL SERVER LIST:") print("-" * 70) servers = await get_existing_servers() for server in servers: print(f" ID: {server['id']:10s} | Alias: {server['alias']:30s} | Host: {server['host']}") print("\n" + "=" * 70) print("CLEANUP COMPLETE - Configuration restored to base state") print("=" * 70) if __name__ == "__main__": asyncio.run(main())