CoolFace
Apppublic

findEthics/Atlas

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
validate_mongodb_data.py154 linesDownload Raw Back to tests
1#!/usr/bin/env python32"""3Validate MongoDB data collection4"""5import asyncio6import os7from dotenv import load_dotenv8from datetime import datetime9 10load_dotenv()11 12async def validate_mongodb_data():13    """Check what data is actually in MongoDB"""14    try:15        from analytics.database import get_sessions_collection, get_messages_collection16        17        print("๐Ÿ” Validating MongoDB Data Collection")18        print("=" * 50)19        20        # Get collections21        sessions_collection = await get_sessions_collection()22        messages_collection = await get_messages_collection()23        24        if sessions_collection is None or messages_collection is None:25            print("โŒ Database collections not available")26            return27        28        # Check sessions29        print("\n๐Ÿ“Š SESSIONS DATA:")30        sessions_count = await sessions_collection.count_documents({})31        print(f"Total sessions: {sessions_count}")32        33        if sessions_count > 0:34            # Get recent sessions35            recent_sessions = await sessions_collection.find({}).sort("start_time", -1).limit(5).to_list(5)36            print("\nRecent sessions:")37            for i, session in enumerate(recent_sessions, 1):38                print(f"  {i}. Session ID: {session.get('session_id', 'N/A')}")39                print(f"     Start: {session.get('start_time', 'N/A')}")40                print(f"     Status: {session.get('status', 'N/A')}")41                print(f"     Messages: {session.get('message_count', 0)}")42                print(f"     Search used: {session.get('search_used', False)}")43                print()44        45        # Check messages46        print("\n๐Ÿ’ฌ MESSAGES DATA:")47        messages_count = await messages_collection.count_documents({})48        print(f"Total messages: {messages_count}")49        50        if messages_count > 0:51            # Get recent messages52            recent_messages = await messages_collection.find({}).sort("timestamp", -1).limit(5).to_list(5)53            print("\nRecent messages:")54            for i, message in enumerate(recent_messages, 1):55                print(f"  {i}. Message ID: {message.get('message_id', 'N/A')}")56                print(f"     Session: {message.get('session_id', 'N/A')}")57                print(f"     Timestamp: {message.get('timestamp', 'N/A')}")58                print(f"     Prompt length: {message.get('prompt_length', 0)}")59                print(f"     Response time: {message.get('response_time_ms', 0)}ms")60                print(f"     Used search: {message.get('used_search', False)}")61                print(f"     Success: {message.get('success', False)}")62                print()63        64        # Check today's data65        today_start = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)66        messages_today = await messages_collection.count_documents({67            "timestamp": {"$gte": today_start}68        })69        print(f"\n๐Ÿ“… Messages today: {messages_today}")70        71        # Check active sessions72        active_sessions = await sessions_collection.count_documents({73            "status": "active"74        })75        print(f"๐ŸŸข Active sessions: {active_sessions}")76        77        # Check search usage78        messages_with_search = await messages_collection.count_documents({79            "used_search": True80        })81        search_percentage = (messages_with_search / messages_count * 100) if messages_count > 0 else 082        print(f"๐Ÿ” Search usage: {messages_with_search}/{messages_count} ({search_percentage:.1f}%)")83        84        return {85            "sessions_count": sessions_count,86            "messages_count": messages_count,87            "messages_today": messages_today,88            "active_sessions": active_sessions,89            "search_usage_percentage": search_percentage90        }91        92    except Exception as e:93        print(f"โŒ Error validating MongoDB data: {e}")94        import traceback95        traceback.print_exc()96        return None97 98async def test_dashboard_data():99    """Test dashboard data retrieval"""100    try:101        from analytics.dashboard import get_basic_stats102        103        print("\n๐ŸŽฏ DASHBOARD DATA:")104        print("=" * 50)105        106        stats = await get_basic_stats()107        print("Dashboard stats:")108        for key, value in stats.items():109            print(f"  {key}: {value}")110        111        return stats112        113    except Exception as e:114        print(f"โŒ Error getting dashboard data: {e}")115        import traceback116        traceback.print_exc()117        return None118 119async def main():120    print("๐Ÿš€ MongoDB Data Validation & Dashboard Check")121    print("=" * 60)122    123    # Validate MongoDB data124    mongodb_data = await validate_mongodb_data()125    126    # Test dashboard data127    dashboard_data = await test_dashboard_data()128    129    # Compare results130    if mongodb_data and dashboard_data:131        print("\n๐Ÿ”„ DATA COMPARISON:")132        print("=" * 50)133        print(f"MongoDB sessions: {mongodb_data['sessions_count']} | Dashboard: {dashboard_data.get('total_sessions', 'N/A')}")134        print(f"MongoDB messages: {mongodb_data['messages_count']} | Dashboard: {dashboard_data.get('total_messages', 'N/A')}")135        print(f"MongoDB today: {mongodb_data['messages_today']} | Dashboard: {dashboard_data.get('messages_today', 'N/A')}")136        print(f"MongoDB active: {mongodb_data['active_sessions']} | Dashboard: {dashboard_data.get('active_sessions', 'N/A')}")137        print(f"MongoDB search %: {mongodb_data['search_usage_percentage']:.1f} | Dashboard: {dashboard_data.get('search_usage_percentage', 'N/A')}")138        139        # Check for discrepancies140        discrepancies = []141        if mongodb_data['sessions_count'] != dashboard_data.get('total_sessions', 0):142            discrepancies.append("sessions count")143        if mongodb_data['messages_count'] != dashboard_data.get('total_messages', 0):144            discrepancies.append("messages count")145        if mongodb_data['messages_today'] != dashboard_data.get('messages_today', 0):146            discrepancies.append("today's messages")147        148        if discrepancies:149            print(f"\nโš ๏ธ  DISCREPANCIES FOUND: {', '.join(discrepancies)}")150        else:151            print("\nโœ… All data matches between MongoDB and Dashboard!")152 153if __name__ == "__main__":154    asyncio.run(main())