findEthics/Atlas
0
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())