#!/usr/bin/env python3 """Verify migration data in Neo4j.""" import json import os from neo4j import GraphDatabase NEO4J_URI = 'bolt://192.168.1.25:7687' NEO4J_USER = 'neo4j' NEO4J_PASSWORD = '!"MiTa1205' TARGET_DATABASE = 'graphiti' TARGET_GROUP_ID = '6910959f2128b5c4faa22283' driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASSWORD)) print('=' * 70) print('Verifying Migration Data') print('=' * 70) with driver.session(database=TARGET_DATABASE) as session: # Check total nodes result = session.run( """ MATCH (n {group_id: $group_id}) RETURN count(n) as total """, group_id=TARGET_GROUP_ID, ) total = result.single()['total'] print(f"\n✓ Total nodes with group_id '{TARGET_GROUP_ID}': {total}") # Check node labels and properties result = session.run( """ MATCH (n {group_id: $group_id}) RETURN DISTINCT labels(n) as labels, count(*) as count ORDER BY count DESC """, group_id=TARGET_GROUP_ID, ) print(f'\n✓ Node types:') for record in result: labels = ':'.join(record['labels']) count = record['count'] print(f' {labels}: {count}') # Sample some episodic nodes result = session.run( """ MATCH (n:Episodic {group_id: $group_id}) RETURN n.uuid as uuid, n.name as name, n.content as content, n.created_at as created_at LIMIT 5 """, group_id=TARGET_GROUP_ID, ) print(f'\n✓ Sample Episodic nodes:') episodes = list(result) if episodes: for record in episodes: print(f' - {record["name"]}') print(f' UUID: {record["uuid"]}') print(f' Created: {record["created_at"]}') print(f' Content: {record["content"][:100] if record["content"] else "None"}...') else: print(' ⚠️ No episodic nodes found!') # Sample some entity nodes result = session.run( """ MATCH (n:Entity {group_id: $group_id}) RETURN n.uuid as uuid, n.name as name, labels(n) as labels, n.summary as summary LIMIT 10 """, group_id=TARGET_GROUP_ID, ) print(f'\n✓ Sample Entity nodes:') entities = list(result) if entities: for record in entities: labels = ':'.join(record['labels']) print(f' - {record["name"]} ({labels})') print(f' UUID: {record["uuid"]}') if record['summary']: print(f' Summary: {record["summary"][:80]}...') else: print(' ⚠️ No entity nodes found!') # Check relationships result = session.run( """ MATCH (n {group_id: $group_id})-[r]->(m {group_id: $group_id}) RETURN type(r) as rel_type, count(*) as count ORDER BY count DESC LIMIT 10 """, group_id=TARGET_GROUP_ID, ) print(f'\n✓ Relationship types:') rels = list(result) if rels: for record in rels: print(f' {record["rel_type"]}: {record["count"]}') else: print(' ⚠️ No relationships found!') # Check if nodes have required properties result = session.run( """ MATCH (n:Episodic {group_id: $group_id}) RETURN count(n) as total, count(n.uuid) as has_uuid, count(n.name) as has_name, count(n.content) as has_content, count(n.created_at) as has_created_at, count(n.valid_at) as has_valid_at """, group_id=TARGET_GROUP_ID, ) props = result.single() print(f'\n✓ Episodic node properties:') print(f' Total: {props["total"]}') print(f' Has uuid: {props["has_uuid"]}') print(f' Has name: {props["has_name"]}') print(f' Has content: {props["has_content"]}') print(f' Has created_at: {props["has_created_at"]}') print(f' Has valid_at: {props["has_valid_at"]}') # Check Entity properties result = session.run( """ MATCH (n:Entity {group_id: $group_id}) RETURN count(n) as total, count(n.uuid) as has_uuid, count(n.name) as has_name, count(n.summary) as has_summary, count(n.created_at) as has_created_at """, group_id=TARGET_GROUP_ID, ) props = result.single() print(f'\n✓ Entity node properties:') print(f' Total: {props["total"]}') print(f' Has uuid: {props["has_uuid"]}') print(f' Has name: {props["has_name"]}') print(f' Has summary: {props["has_summary"]}') print(f' Has created_at: {props["has_created_at"]}') driver.close() print('\n' + '=' * 70)